2017-08-17 157 views
0

This answer說明如何使用WMI通過驅動器號查找連接的USB海量存儲設備,但我試圖找到連接MTP或PTP設備的(或UNC路徑)的名稱,如附加照相機或沒有驅動器盤符的移動設備,以便我可以抓取他們的目錄以搜索圖像。我怎樣才能做到這一點?如何枚舉MTP和PTP設備

+0

相關:https://stackoverflow.com/q/29144536/327083 –

+0

也相關(無回答):https://stackoverflow.com/q/29194124/327083 –

+0

https://stackoverflow.com/q/8234407/327083 –

回答

0

首先,您需要明白,擁有MTP設備名稱將不允許您抓取目錄或使用簡單PC文件系統使用的方法搜索圖像。這只是Windows資源管理器的簡化視圖,並非真正的事情狀態。

我不知道如何用Delphi執行它,但有一個Windows Portable Devices API,它都使用COM,所以我認爲有一種方法可以讓它在Delphi上也能正常工作。

另一種可能的嘗試方法是使用libmtp這是一個普通的C庫,您只需定義can call它是Delphi的一些輔助代碼的dll方法。

如果您只想使用名稱,您可以使用SetupDiGetDeviceRegistryProperty WinApi函數找到連接的WPD設備(Windows便攜式設備,它們使用MTP和PTP協議)的名稱。

首先,你需要調用SetupDiGetClassDevs與GUID_DEVINTERFACE_WPD(它在PortableDevice.h定義,但你可以發現很容易在谷歌
{6AC27878-A6FA-4155-BA85-F98F491D4F33})

然後在設備遍歷使用SetupDiEnumDeviceInfo,得到WPD cathegory與CM_Get_Device_ID函數調用每個設備的ID,並通過它與SPDRP_FRIENDLYNAME到SetupDiGetDeviceRegistryProperty(或SPDRP_DEVICEDESC,也許你應該嘗試不同的參數)

有很多使用此功能的樣品,例如這一個: SetupDiGetDeviceProperty usage example