上下文&我做了什么
我正在尝试学习如何为Windows编写shell扩展,但是这个过程没有很好地记录,并且初学者的信息很少。根据我的阅读,this指南随处可见,作为Windows shell扩展的最佳初学者教程之一。我已经按照教程进行了结束,但我必须做一些调整以避免一些冲突:
win32
切换到x64
,但可能会有更多我不了解的步骤。guidgen.exe
来为我生成GUID。我的项目编译成功,我可以通过终止explorer.exe
(ctrl + shift +右键单击开始菜单,选择Exit Explorer
)并在发布模式下编译/运行我的项目来启动它(然后启动另一个explorer.exe
}的实例。
问题
问题是在执行程序时,regedit.exe
中没有写入CLSID值(尽管txtfile
注册表位置确实已更新)。此外,没有任何程序挂钩工作,如果CLSID没有注册,这是预期的。我希望我能更多地缩小这个问题,而不是仅仅说“帮助;它不起作用!”但老实说,我不知道我能做些什么来进一步查明问题。我几乎肯定我的SimpleShlExt.rgs
文件出了问题,但是指南没有提供关于*.rgs
文件关键步骤的更多信息(除了一些偏离主题的戏弄)
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}'
}
}
}
}
答案 0 :(得分:1)
这是很久以前的事了,但我才意识到我把这个挂了。我回到使用示例的CLSID,它工作得很好。我找到了几个定义CLSID的其他文件,这些文件与我用guidgen.exe
生成的文件不匹配。例如,教程没有真正提到SimpleExt.h
,其中也注册了CLSID信息。为了更改CLSID,您必须找出它出现的所有位置。