创建一个不占资源的多功能“快捷方式”

来源:百度文库 编辑:神马文学网 时间:2024/04/26 17:56:55

先用一个图片来说明这个“快捷方式”的作用。

嗯,这个“快捷方式”其实也没什么特色是不是?不过最重要的一点是它是完全由系统自带的功能实现的,并且不占用任何资源,不论是XP、Vista还是Win7,全部通用。至于Win98……好吧,我承认我没测试过。

这个“快捷方式”是完全通过修改注册表实现的,与其说是“快捷方式”,更准确的说它是一个类。我以一个示例注册表文件来说明:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}]

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\DefaultIcon]
@="D:\\Program Files\\SunChrome\\Chrome.exe,0"

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell]

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Open]
@="Chrome"
"Icon"="D:\\Program Files\\SunChrome\\Chrome.exe,0"

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Open\Command]
@="D:\\Program Files\\SunChrome\\Chrome.exe"

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Firefox]
@="Firefox"
"Icon"="D:\\Program Files\\Firefox3\\FirefoxLoader.exe,0"

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Firefox\Command]
@="D:\\Program Files\\Firefox3\\FirefoxLoader.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{7986336A-DFB4-4375-8841-1489E75A7571}]
@=""

上面这个注册表文件中的{7986336A-DFB4-4375-8841-1489E75A7571}可不是什么随便的字符串,它叫CLSID(类标识符),可以由我在文末提供的工具guidgen来生成。至于什么是CLSID,大家自己上网查去,不在本文的讨论范围内。下面我分别讲解上面每段注册表文件的含义:

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}]
@="Chrome"

这句表示创建一个标识符为{7986336A-DFB4-4375-8841-1489E75A7571}的类,名为Chrome,同时这个Chrome也是最终在桌面显示图标的名称。

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\DefaultIcon]
@="D:\\Program Files\\SunChrome\\Chrome.exe,0"

这句定义了这个类在桌面上显示的图标,当然你也可以直接使用ico文件。

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell]

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Open]
@="Chrome"
"Icon"="D:\\Program Files\\SunChrome\\Chrome.exe,0"(此参数在XP下无效)

上面这句定义了双击这个图标的右键菜单第一项(也就是默认项),在右键中显示的名称和图标,如果去掉Icon这个值,则右键相应项前没有图标。

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Open\Command]
@="D:\\Program Files\\SunChrome\\Chrome.exe"

这句定义了双击这个图标时的默认操作,也就是所打开的程序,就像上例定义的,我让他打开Chrome。

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Firefox]
@="Firefox"
"Icon"="D:\\Program Files\\Firefox3\\FirefoxLoader.exe,0"

接下去这个就是定义右键菜单的下一项了。[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell]后所跟随的“Firefox”字样可随便自定义,一般为了便于辨别常常使用所启动程序的名称。
默认值表示他在右键菜单中所显示的名称,Icon的值表示他在右键菜单中显示的图标。

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Firefox\Command]
@="D:\\Program Files\\Firefox3\\FirefoxLoader.exe"

这项当然就是表示右键中Firefox这项所启动的程序了。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{7986336A-DFB4-4375-8841-1489E75A7571}]
@=""

我们在上面已经创建了一个名为{7986336A-DFB4-4375-8841-1489E75A7571}的类标识符,那么如何在桌面上显示它呢?上面这个注册表项就是实现的这个功能。聪明的你是否已经发现了这个注册表路径中的Desktop字样呢?那么既然有Desktop,有没有其他的呢?能不能在计算机的其他位置创建这种多功能的“快捷方式”呢?这个就当作课后作业好了,提示下,只要有NameSpace子项的都可以。

如果还想在右键中添加其他的程序也只要以此类推就可以了。以上便完成了最简单的一个“快捷方式”。如果还想创建一个新的“快捷方式”,注意不要使用同一个CLSID,必须换一个才行。

接下来我们该稍微扩展下了。右键菜单我们经常用,我们也经常发现右键菜单中常常有很多分栏线把整个右键菜单分成好几栏,如下图中“蓝冰工作室FTP”项上下的分隔线。那在这里我们如何实现呢?(此功能在XP下无效)

其实也很简单,依然以上面的注册表示例为例。例如要在Firefox项的上下添加分栏线,则添加以下注册表项:

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Firefox]
"SeparatorAfter"=dword:00000001"
"SeparatorBefore"=dword:00000001"

另外还可以让他在桌面图标下的文字消失,只剩一个图标,如下图中的Chrome图标所示:

其实这也很简单,添加以下项即可:

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\Shell\Firefox]
"WantsFORDISPLAY"=""

其实右键菜单中还可以有更多的项的,如剪切、复制、删除等,如下图所示:

添加以下注册表项可以实现这个目的:

[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\ShellFolder]
"Attributes"=dword:00000000

其中当Attributes的值为0时没有其他菜单(但是“创建快捷方式”这项依然存在,我也不知道怎么去掉它,望知道的TX告知。)
当Attributes的值为1时右键中有“复制”项,如上图的左上角所示。
当Attributes的值为2时右键中有“剪切”项,如上图的右上角所示。
当Attributes的值为3时右键中同时存在“复制”和“剪切”项,如上图左下角所示。
如果删除[HKEY_CLASSES_ROOT\CLSID\{7986336A-DFB4-4375-8841-1489E75A7571}\ShellFolder]这一项的话则出现的是“剪切”和“删除”,如上图的右下角所示。

好了,至此整个多功能“快捷方式”的创建方法就介绍完毕了。

点此下载guidgen.exe