此答案解释了如何使用 WMI 按驱动器号查找附加的 USB 大容量存储设备,但我正在尝试查找附加的 MTP 或 PTP 设备的名称(或 UNC 路径),例如附加的相机或移动设备,它们没有安装驱动器号,这样我就可以爬取他们的目录来搜索图像。我怎样才能做到这一点?
1 回答
首先,您需要了解拥有 MTP 设备名称将不允许您抓取它的目录或使用用于简单 PC 文件系统的方法搜索图像。它只是来自 Windows 资源管理器的简化视图,而不是真正的事物状态。
我不知道如何用 Delphi 准确地做到这一点,但是有一个Windows Portable Devices API并且它都使用 COM,所以我相信即使在 Delphi 上也有办法让它工作。
您可以尝试的另一种方法是使用libmtp,它是一个普通的 C 库,您可以使用一些帮助代码从 Delphi调用它的 dll 方法。
如果您只需要名称,您可以使用 SetupDiGetDeviceRegistryProperty WinApi 函数找到附加的 WPD 设备(Windows 便携式设备,它们使用 MTP 和 PTP 协议)的名称。
首先,您需要使用 GUID_DEVINTERFACE_WPD 调用SetupDiGetClassDevs(它在 PortableDevice.h 中定义,但您可以在 google
{6AC27878-A6FA-4155-BA85-F98F491D4F33} 中轻松找到它)
然后使用 SetupDiEnumDeviceInfo 在设备上进行迭代,使用 CM_Get_Device_ID 函数调用从 WPD 分类中获取每个设备的 id,并使用 SPDRP_FRIENDLYNAME(或 SPDRP_DEVICEDESC,也许你应该尝试不同的参数)将其传递给 SetupDiGetDeviceRegistryProperty
有很多使用这个函数的例子,例如这个: SetupDiGetDeviceProperty usage example