我已经参考代码项目上的文章测试了一个小型 shell 扩展。尽管整个过程相当复杂,但我对以下方法以及它们的作用有所了解:
Initialize,DragQueryFile,GetCommandString,InvokeCommand,QueryContextMenu
但通读后我无法理解我们的 ContextMenu 扩展是如何与 .txt 文件相关联的。
这篇文章解释了如果我们看一下 .rgs 文件,我们可以看到它创建了一个像这样的注册表项:
HKCR
{
NoRemove txtfile
{
NoRemove ShellEx
{
NoRemove ContextMenuHandlers
{
ForceRemove SimpleShlExt = s '{5E2121EE-0300-11D4-8D3B-444553540000}'
}
}
}
}
但实际上,按照文章编写代码后,当我打开SimpleShlExt.rgs它看起来像这样:
--在 CodeProject 中编辑--
HKCR
{
NoRemove CLSID
{
ForceRemove {1E569362-E0A6-4DEA-AB1F-67D6D3DEF1A5} = s 'SimpleShExt Class'
{
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
}
}
}
注册表是否在 CLSID 和 txtfile reg 条目之间动态创建任何映射。
如果是这种情况,如果我想修改任何其他文件的行为,例如 mp3 文件或驱动器本身,并且我希望我的上下文菜单弹出或显示,那么如何去做。因为我不知道 CLSID。