This answer解释了如何使用WMI通过驱动器号查找连接的USB大容量存储设备,但我正在尝试查找连接的MTP或PTP设备的名称(或UNC路径),例如连接的相机或没有驱动器号安装的移动设备,以便我可以爬行它们的目录来搜索图像。我该怎么做呢?
发布于 2017-08-30 23:48:02
首先,您需要了解,拥有MTP设备名称将不允许您使用用于简单PC文件系统的方法爬行它的目录或搜索图像。它只是Windows资源管理器中的简化视图,而不是事物的真实状态。
我不知道如何用Delphi严格地做到这一点,但是有一个Windows Portable Devices API,它都使用COM,所以我相信有一种方法可以让它在Delphi上也能工作。
你可以尝试的另一种方式是使用libmtp,这是一个普通的C库,你可以通过一些辅助代码明确地从can call中获取它的动态链接库方法。
如果你只想要名字,你可以使用SetupDiGetDeviceRegistryProperty WinApi函数找到所连接的WPD设备(Windows便携设备,它们正在使用MTP和PTP协议)的名字。
首先,你需要用GUID_DEVINTERFACE_WPD调用SetupDiGetClassDevs (它是在PortableDevice.h中定义的,但是你可以在谷歌中找到它
{6AC27878-A6FA-4155-BA85-F98F491D4F33} )
然后使用SetupDiEnumDeviceInfo在设备上迭代,通过CM_Get_Device_ID函数调用从WPD cathegory获取每个设备的id,并使用SPDRP_FRIENDLYNAME (或者SPDRP_DEVICEDESC,也许你应该尝试不同的参数)将其传递给SetupDiGetDeviceRegistryProperty。
有很多使用此函数的示例,例如这个:SetupDiGetDeviceProperty usage example
https://stackoverflow.com/questions/45733242
复制相似问题