背景和我做了什么
我正在尝试学习如何为 Windows 编写 shell 扩展,但是该过程没有很好的文档记录,并且初学者的信息很少。根据我的阅读,本指南作为 Windows shell 扩展的最佳初学者教程之一随处发布。我已经按照教程完成了,但我不得不进行一些调整以避免一些冲突:
- 我不得不修改 Visual Studio 2012 来构建 x86-64bit。我所做的只是将配置从 切换
win32
到x64
,但可能还有更多我不知道的步骤。 - 我使用
guidgen.exe
Visual Studio 2012 附带的 为我生成 GUID。
我的项目编译成功,我可以通过终止explorer.exe
(ctrl+shift+右键单击开始菜单,选择Exit Explorer
)并在发布模式下编译/运行我的项目(然后启动另一个实例explorer.exe
)来启动它。
问题
regedit.exe
问题是执行程序时没有写入 CLSID 值(尽管txtfile
注册表位置确实得到了更新)。此外,任何程序挂钩都不起作用,如果 CLSID 没有注册,这是可以预料的。我希望我能进一步缩小问题的范围,而不仅仅是说“帮助;它不起作用!” 但老实说,我不知道我能做些什么来进一步查明问题。我几乎可以肯定我的SimpleShlExt.rgs
文件有问题,但是该指南没有提供有关该*.rgs
文件的关键步骤的太多信息(除了一些离题的玩笑)
- 在向注册表注册我的 DLL 时,如何获得有关出现问题的更多信息?
- 教程中没有解释 Visual Studio 2012 的任何警告(由于教程的年龄或我缺乏隐含的知识)。
- 我的
SimpleShlExt.rgs
文件有什么问题?!?!?
代码
有关其他信息,我在下面发布了相关代码。它与上面引用的指南几乎相同(但具有不同的 GUID)。如果需要,我可以发布我的SimpleShlExt.cpp
,SimpleShlExt.h
但它与指南几乎相同,我不确定它是否添加了任何有用的信息。
SimpleShlExt.rgs(CLSID 是用 生成的guidgen.exe
)
HKCR
{
NoRemove CLSID
{
ForceRemove {E2D6660C-E3E5-43CE-BF24-44D4269EEC1C} = s 'SimpleShlExt Class'
{
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
}
}
}
HKCR
{
NoRemove txtfile
{
NoRemove ShellEx
{
NoRemove ContextMenuHandlers
{
ForceRemove SimpleShlExt = s '{E2D6660C-E3E5-43CE-BF24-44D4269EEC1C}'
}
}
}
}