0

当我的右键单击目标是快捷方式时,我很难在 ContextMenu 的实现中获取选定文件的列表。全局内存句柄返回一个仅包含快捷方式项的列表,并且似乎不知道我选择的任何其他项。

我在许多 3rd 方应用程序中也注意到了这种行为,包括 Notepad++、WinRar 和 UltraEdit。

当右键单击的目标是快捷方式时,获取所选文件列表的正确方法是什么?这不是资源管理器中包含的文件压缩功能的问题(右键单击 > 发送到 > 压缩的压缩文件夹)。

编辑:这是我当前方法的一小部分。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 回答