【发布时间】:2012-07-11 03:52:06
【问题描述】:
我使用 SHBrowseForFolder() 在 MTP 设备上选择一个文件夹。然后我想从那里复制文件。 IPortableDeviceContent 接口(来自 Windows Portable Devices SDK)似乎很合适,但是如何从 SHBrowseForFolder() 返回的带有 PIDL 的对象获取它?
(我问过关于获取 IWMDMStorageControl 接口的类似问题: How to get IWMDMStorageControl interface for given PIDL)
【问题讨论】:
-
您是否找到了一种方法来至少检索与 SHBrowseForFolder() 为所选 MTP 文件夹返回的 PILD 关联的显示名称?
-
是的。这样:TCHAR DisplayName[MAX_PATH]; // 我们会在这里得到它 LPITEMIDLIST pidlSelected = SHBrowseForFolder(&bi); if (pidlSelected && !SHGetPathFromIDList(pidlSelected, DisplayName)) { // 它是媒体设备 IShellFolder psfParent; LPCITEMIDLIST pidlRelative; STRRET str; HRESULT hres = SHBindToParent(pidlSelected, IID_IShellFolder, (void*)&psfParent, &pidlRelative); if (SUCCEEDED(hres)) { psfParent->GetDisplayNameOf(pidlRelative, SHGDN_FORADDRESSBAR, &str); psfParent->Release(); StrRetToBuf(&str, pidlSelected, DisplayName, sizeof(DisplayName)/sizeof(DisplayName[0])); } }
-
对不起,这里没有格式化,我也将代码作为常规注释。
标签: c++ windows interface wpd mtp