2

我实现了从 windows pc 到 android 设备的文件传输,该设备通过 MTP 连接到计算机。复制实现已准备就绪(我使用了此示例:http ://code.msdn.microsoft.com/windowsdesktop/Portable-Devices-COM-API-fd4a5f7d )。

现在我想改进 UI,我想提供一个文件夹选择对话框,用户可以在其中选择一个 MTP 设备文件夹,我将在其中保存文件(使用 FOS_PICKFOLDERS 的 CLSID_FileOpenDialog 效果很好)。请注意,简单的文件保存对话框不起作用,因为您会从对话框中收到错误消息:“您无法在此处保存”。

文件夹浏览的结果将类似于:
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\?\usb#vid_04e8&pid_6860&mi_00#6&2296b879&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\ ,SECZ9519043CHOHB,12635222016}{01B8016B-0164-00F2-E100-55012C014001}

usb#vid_04e8&pid_6860&mi_00#6&2296b879&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}
我知道这是设备,IPortableDeviceManager 使用它作为设备 ID。

SID-{10001,SECZ9519043CHOHB,12635222016}\{01B8016B-0164-00F2-E100-55012C014001}
这是设备上的路径。这些 GUID 是设备对象的 WPD_OBJECT_PERSISTENT_UNIQUE_ID 属性。

有了这些信息,我可以选择设备并在设备中找到文件夹,这样我就可以进行复制了。

我的问题是我还想在设备上的文件夹浏览对话框中选择一个默认目录,但我无法创建上面提到的路径。请注意,如果我将其作为默认路径,它将在正确的文件夹中开始浏览。

有问题的部分是起始 GUID,我无法获得:
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}

我还查看了注册表。我只在一个条目中找到了这个 GUID:
HKEY_USERS\S-1-5-21-2044730494-4069800027-1247311059-1000\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ DefaultIcon
哪个值是这样的:
C:\Windows\System32\imageres.dll,-109
(CLSID 子文件夹包含更多的 GUID,所以我找不到,这是正确的)

你知道如何让这个 GUID 能够构建整个默认路径吗?

4

1 回答 1

2

该 guid 代表计算机文件夹,MTP 设备的外壳命名空间扩展是计算机文件夹委托。您可以将此 guid 用作常量来构造文件夹浏览器的解析名称。

问候,丽莎

于 2012-11-19T17:31:28.363 回答