0

右クリックのターゲットがショートカットの場合、ContextMenu の実装で選択したファイルのリストを取得するのが困難です。グローバル メモリ ハンドルは、ショートカット項目のみを含むリストを返し、選択した他の項目を認識していないようです。

Notepad++、WinRar、UltraEdit など、多くのサード パーティ製アプリでもこの動作に気付きました。

右クリックの対象がショートカットの場合、選択したファイルのリストを取得する正しい方法は何ですか? これは、エクスプローラーに組み込まれているファイル圧縮機能の問題ではありません (右クリック > 送信先 > 圧縮された zip フォルダー)。

編集:これは私の現在の方法の小さなスニペットです。pida->cidlターゲットがショートカットの場合は 1 になります。それ以外の場合は、選択したアイテムの正しい数です。

CStgMedium me; 
pDataObj->GetData(&fe, &me); 

LPIDA pida = reinterpret_cast<LPIDA>(me.hGlobal); 
for(UINT i = 0; i < pida->cidl; i++) {
    ...
}
4

1 に答える 1

0

IContextMenuここでインターフェースについて話しているのですか?もしそうなら、あなたはそのようにするべきです(間違いの可能性があります、私はコンパイラなしで書いています):

Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID){

    FORMATETC fetc = { CF_HDROP, null, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
    STGMEDIUM stgm;

    pdtobj->GetData(&fetc, &stgm);
    UINT count = DragQueryFile(stgm.hGlobal, 0xFFFFFFFF, null, 0);
    char filename[255];

    for (int i=0; i<count; i++){
        DragQueryFile(stgm.hGlobal, i, filename, 255);
        // Here do something with i-th filename
    }
}

簡単にするためにエラーチェックを省略しました。

于 2013-07-04T04:01:40.203 に答える