Windows Shell 扩展没有提供确切的文件路径
Windows Shell Extension doesn't give exact file paths
目前我正在编写一个 Shell 扩展,因为扩展文件上下文菜单的常规方法不符合我的需求,但是我在这里面临同样的问题。
如果我右键单击单个快捷方式(*.lnk 文件),我会得到它的目标路径,如果我选择许多文件并右键单击快捷方式,我只会得到一个文件 - 快捷方式目标文件。
我的 shell 扩展还没有完成,但枚举文件的部分代码是这样的:
HRESULT CFileContextMenuExt::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID)
{
HRESULT hr = E_INVALIDARG;
if (NULL == pdtobj)
{
return hr;
}
FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stm = {};
// pDataObj contains the objects being acted upon. In this example,
// we get an HDROP handle for enumerating the selected files.
if (SUCCEEDED(pdtobj->GetData(&fe, &stm)))
{
// Get an HDROP handle.
HDROP hDrop = static_cast<HDROP>(GlobalLock(stm.hGlobal));
if (hDrop != NULL)
{
// Determine how many files are involved in this operation.
UINT nFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
if (nFiles != 0)
{
m_selectedFiles.clear();
//Enumerates the selected files and directories.
for (UINT i = 0; i < nFiles; i++)
{
// Get the next filename.
int size = DragQueryFile(hDrop, i, NULL, 0) + 1;
string_t str;
str.resize(size);
if (DragQueryFile(hDrop, i, &str[0], size) == 0)
continue;
m_selectedFiles.push_back(str);
}
hr = S_OK;
}
GlobalUnlock(stm.hGlobal);
}
ReleaseStgMedium(&stm);
}
// If any value other than S_OK is returned from the method, the context
// menu is not displayed.
return hr;
}
有人可以建议如何获得确切的路径而不是目标吗?
(我不确定以下解决方案是否绝对正确,也许在某些情况下它无法正常工作,但在标准情况下我已经测试过它工作正常)
您必须在 * 和 lnkfile 下注册上下文菜单处理程序。这意味着当用户右键单击快捷方式QueryContextMenu时将被调用两次。第一次是快捷方式文件目标,第二次是快捷方式文件本身。但差别不大。对于快捷方式文件,目标 shell 始终传递CMF_VERBSONLY并且快捷方式文件本身没有此标志。因此,只需检查此标志,如果存在,则不添加任何内容。
相关文章:
- 从函数角度看ID到文件路径的内部与外部映射
- 在C++中设置基于操作系统的文件路径
- Windows 非 ASCII 文件路径
- 非 ASCII 文件路径窗口
- C++和带有国家符号的文件路径(也许用 UTF8 编码)
- 如何为文件路径使用变量?
- 包括 VS Code 上的完整文件路径
- 如何使用提升获取当前文件路径?
- 如何在 c++ 中获取当前文件路径?
- 保存json文件后如何返回文件路径
- 从 C++ 中的文件路径中提取文件名
- 是否可以将文件路径传递给Qt中的setStyleSheet()
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 在结构函数之间传递文件路径 C++ 编辑:修复LNK2019错误
- 提供依赖于输入的程序的文件路径
- 从 QFileSystemModel 中的文件路径和文件名获取 QModelIndex
- 如何更改变量文件名的文件路径?
- cmake:包括vs vs add_subDirectory:相对标头文件路径
- 在OSX中使用CGDisplayStream存储屏幕记录的特定文件路径
- 如何在另一个系统上启用文件路径