如何在Windows右键新建菜单中添加自定义项

Windows管理右键新建菜单的奥妙就在注册表的HKEY_CLASSES_ROOT中——在HKEY_CLASSES_ROOT下存在两种类型的项:一个是以文件扩展名项,另一个是类型项。这两个项包含了用于确定新建菜单所需的全部数据结构。其中文件扩展名项下的“ShellNew”子项为新建菜单提供了鼠标点击后行为的控制信息,类型项则提供了用于在新建菜单中显示的项名称。他们的实际工作原理,以.txt文件为例:1、Windows Shell在初始化时会依次遍历HKEY_CLASSES_ROOT中所有以“.”开头的文件扩展名项;2、对遍历到的每一项项时读取其的默认值,该值即为HKEY_CLASSES_ROOT中对应的类型项,[HKEY_CLASSES_ROOT\.txt]的默认值是txtfile;3、并检索其中是否存在ShellNew子项,若存在且第二步中的默认值不为空则表示该扩展名的文件能够在Windows新建菜单中生成;4、然后获取第二步中得到的类型项所对应的默认值,该值即为Windows新建菜单中显示的项名称,[HKEY_CLASSES_ROOT\txtfile]的默认值为Text Document(注:在中文版的Windows系统中,该值在最终显示时会被本地化模块转换为“文本文档”显示在新建菜单中)。同时在ShellNew项中,注册表提供了以下几种字符串型的值:值名值内容备注command用鼠标点击新建菜单项时系统调用的可执行文件全路径值的格式为:"E:\自产工具\会议纪要生成工具\ContextMenuMeettingRecordDoc.exe" "%1"。其中”%1”代表新建文件的全路径iconpath用于显示在新建菜单上该项对应的图标的全路径NullFile值为空,表示鼠标点击该新建菜单项后仅生成空文件FileName用于生成新文件所需的文件模板文件的全路径该值与NullFile互斥,同时如果ShellNew项下均不存在NullFile和FileName两值,则只创建新建文件名,而不会创建文件(包括空文件)。待补充写到这里,相信大家可以发现我们此时已经具备了在Windows右键新建菜单中创建自定义会议纪要文档的全部知识,那么下面就再介绍下该功能的实现过程,以使得大家对以上的知识有更直观的理解。首先,在注册表HKEY_CLASSES_ROOT下创建项“.mr”和“MeettingRecordFile”,并将.mr的默认值设置为“MeettingRecordFile”,MeettingRecordFile项的默认值设置为“会议纪要文档”;然后,在项.mr下新建子项“ShellNew”,接着在“ShellNew”下依次新建名为“command”和“iconpath”的字符串类型的值,其中“command”的值为“"E:\自产工具\会议纪要生成工具\ContextMenuMeettingRecordDoc.exe" "%1"”,“iconpath”的值为“C:\Windows\Installer\{20140000-0011-0000-0000-0000000FF1CE}\wordicon.exe,13”(注:该值是word2010的图标地址,大家可根据需要用其他图标)。注意,因为会议纪要文档最终需要由E:\自产工具\会议纪要生成工具\ContextMenuMeettingRecordDoc.exe    工具生成,而新建菜单只需提供新建文件的文件名,而不用生成文件,故无需再ShellNew中新建字符串类型值“NullFile”或“FileName”  。至此,在右键新建菜单中我们就可以看到“会议纪要文档”的项了,如下图:

最后,在程序ContextMenuMeettingRecordDoc.exe 的代码中,将其入口函数(本例是用C#Windows Form Application实现)由static void Main()该为static void Main(string[] args),其它代码不变,接着从通过args[0]获取到新建文件的全路径得到当前目录,之后就可以在该目录中按自定义命名规则生成的会议纪要文件了,下图为点击新建会议纪要文档后的功能展示图。

点击新建“会议纪要文档”后弹出的会议信息设置窗口

生成的会议纪要文件

生成的会议纪要文档内容程序下载地址:https://docs.google.com/leaf?id=0B_C03yoyIyOpMjc3NjE4NzktYTc1ZC00ZDI5LTg4ODEtZTE1NjYxOTRlYzgw&hl=zh_CN

(0)

相关推荐