1

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

(IWMDMStorageControlインターフェイスの取得について同様の質問をしました: 特定のPIDLのIWMDMStorageControlインターフェイスを取得する方法

4

1 に答える 1

1

この方法で 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:55:16.577 に答える