0

SHBrowseForFolder() を使用して、MTP デバイス上のフォルダーを選択します。次に、そこから/へファイルをコピーしたい。IWMDMStorageControl インターフェイス (Windows Media Format 11 SDK から) が適しているようですが、SHBrowseForFolder() から返された PIDL を持つオブジェクトを取得するにはどうすればよいですか?

( IWMDMStorageControl インターフェイスの取得について同様の質問をしました: How to get IPortableDeviceContent インターフェイス for given PIDL )

4

1 に答える 1

0

この方法で SHBrowseForFolder() から PILD に関連付けられた表示名を取得できます。

TCHAR DisplayName[MAX_PATH]; // we will get it here
LPITEMIDLIST pidlSelected = SHBrowseForFolder( &bi );
if ( pidlSelected && ! SHGetPathFromIDList(pidlSelected, DisplayName) )
{ // it is media device
    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]) );
    }
}

次に、パスを解析し、同じパスで MTP ファイル構造をトラバースできます。それはエレガントな解決策ではありませんが、私が見つけた唯一のものです。

于 2013-01-19T19:59:32.247 に答える