Как перечислить устройства MTP и PTP

В этом ответе объясняется, как использовать WMI для поиска подключенных запоминающих устройств USB по букве диска, но я пытаюсь найти имена (или UNC-пути к) подключенных устройств MTP или PTP, таких как подключенные камеры или мобильные устройства, которые монтируются без букву диска, чтобы я мог сканировать их каталоги для поиска изображений. Как я могу это сделать?

1 ответ

Прежде всего, вы должны понимать, что наличие имени устройства MTP не позволит вам сканировать его каталоги или искать изображения методами, которые вы используете для простых файловых систем ПК. Это только упрощенный вид из Windows Explorer, но не совсем так.

Я не знаю, как именно это сделать с Delphi, но есть API переносимых устройств Windows, и все они используют COM, поэтому я верю, что есть способ заставить его работать даже на Delphi.

Другой способ, которым вы можете попробовать, это использование libmtp - это простая библиотека C, вы определенно можете вызывать ее методы dll из Delphi с некоторым вспомогательным кодом.

Если вам нужны только имена, вы можете найти имена подключенных устройств WPD (Windows Portable Devices, они используют протоколы MTP и PTP), используя функцию WinDpi SetupDiGetDeviceRegistryProperty.

Сначала вам нужно вызвать SetupDiGetClassDevs с GUID_DEVINTERFACE_WPD (это определено в PortableDevice.h, но это легко найти в google.
{6AC27878-A6FA-4155-BA85-F98F491D4F33})

Затем выполните итерации на устройствах с помощью SetupDiEnumDeviceInfo, получите идентификатор каждого устройства из категории WPD с помощью вызова функции CM_Get_Device_ID и передайте его в SetupDiGetDeviceRegistryProperty с помощью SPDRP_FRIENDLYNAME (или SPDRP_DEVICEDESC, возможно, вам следует попробовать другие параметры)

Существует множество примеров использования этой функции, например, эта: Пример использования SetupDiGetDeviceProperty

Другие вопросы по тегам