【发布时间】:2023-10-06 05:28:01
【问题描述】:
我尝试为 Windows 文件/文件夹创建上下文菜单扩展。我已经尝试了很多,但没有什么对我有用。我已经为 32 位系统提供了这样的扩展,但它已经过时了。我想为 64 位系统使用 C++ 重新创建它。
这个最接近我想做的事情:Klick 但这是针对 32 位系统的。阅读 cmets 后,我能够为 x64 修改和构建它。
在我的 64 位系统上使用 system32/regsvr32.exe 注册它,表明它已成功注册。所有注册表项均已正确创建。但是菜单项没有出现。我不知道为什么......
有人可以帮助我吗?如果你愿意,我可以为你上传项目。
更新
我使用上面链接中的原始项目并更改了以下内容:
1) 将目标设置为“x64”
2)由于无法编译,我更改了以下内容:
2.1) 在包含在 stdafx.h 之前,我添加了:
#define _ATL_NO_UUIDOF
2.2) 我在这里把 UINT 改成了 UINT_PTR:
HRESULT CFSBankShellExtension::GetCommandString (
UINT_PTR idCmd,
UINT uFlags,
UINT* pwReserved,
LPSTR pszName,
UINT cchMax )
3) 我将 .rgs 文件中的 txtfile 更改为 *,因此它应该适用于所有文件类型。
4) 我能够编译并注册它
如果你不能帮助我,如果你能上传一个模板会很酷,它可以在 x64 系统上运行。
【问题讨论】:
-
第一步是确定您的 dll 是否已实际加载到资源管理器进程中。尝试使用 SysInternals procexp 工具并打开底部窗格的 DLL View。
-
它就在那里!我搜索了 SimpleExt.dll 并在 procexp 中找到了它。那么……接下来呢?
-
您在使用 Visual Studio 吗?加载您的项目,将 VS 调试器附加到 explorer.exe 并在扩展的方法中设置断点。然后右键单击某个东西,看看你的函数是否真的被调用了。如果他们被调用,请逐步检查并尝试找出错误的地方。
-
甚至没有一个函数被调用...
-
@FlashFan:如果已加载,您可以完全确定
DllMain()已被调用,并且您的QueryInterface()也有 99.9x% 的确定性被调用。那只是基本的 COM 东西。但是你的反应正确吗? 32 位 Windows 有很多遗留的 hack,您可能会在不经意间依赖它们。
标签: c++ windows shell-extensions