自定义鼠标右键(层叠式菜单:cascading menu)

Author:KillerLegend

From:http://www.cnblogs.com/killerlegend/p/3575391.html

Date:Tuesday, February 18, 2014

春节期间在家没有网,这篇文章写完后就一直放着,现在终于有网了,发表咯……哈哈

自定义鼠标右键(层叠式菜单:cascading menu)

在MSDN上提到了三种方式来创建,如下:

  • Creating Cascading Menus with the SubCommands Registry Entry
  • Creating Cascading Menus with the ExtendedSubCommandsKey Registry Entry
  • Creating Cascading Menus with the IExplorerCommand Interface

官网资料在这里:http://msdn.microsoft.com/zh-cn/library/cc144171(v=vs.85)

今天来实现自定义鼠标右键采用第一种方式,即采用SubCommands来实现层叠式菜单,可以实现的效果如下图中红色框所示:

clip_image001

其中的所有内容比如应用程序,以及左边显示的图标完全可以自定义,按照自己的爱好来实现。

我们先手动一步步注册表中的选项,来了解一下实现的原理,最后使用注册表的代码来一步实现:

我们为鼠标右键添加一个ContextMenu选项,然后在里面加入各种我们想要打开的应用程序:

步骤1:转到

HKEY_CLASSES_ROOT\*\shell

按照图示1.1新建键, 在这里命名为ContextMenu.

clip_image002

然后在左侧空白处鼠标右键,选择新建一个字符串值,如图1.2所示,

clip_image003

名字设置为MUIVerb,名字必须为MUIVerb,这就是所谓的标准名字(Canonical Verbs).然后双击它,打开后将其值设置为ContextMenu这个字符串就是在鼠标右键中显示的名称(你当然可以设置为其他的值),如图1.3所示:

clip_image004

经过这一步,我们可以在一个具体的文件上鼠标右键了,就会出现一个名字为ContextMenu的鼠标右键选项,注意是一个文件,而不是一个目录.也就是说,这个时候我在一个应用程序,doc文档,txt文本或者图片上鼠标右键会出现而在一个包含有子文件的文件夹上或者桌面上鼠标右键是不会出现的.如图1.4和图1.5对比所示.

clip_image005clip_image006

然后我们需要为我们添加的选项添加命令,和建立MUIVerb同样的步骤建立一个SubCommands,

其值设置为ContextMenu.1;ContextMenu.2;ContextMenu.3;ContextMenu.4;ContextMenu.5好的我们暂且先添加这5个选项吧,每一个选项对应于一个命令(应用程序),稍后我将说在那里设置每一个命令的具体执行路径。如图1.6所示。

clip_image007

这时候。在一个应用程序图标上鼠标右键可以看到ContextMenu选项右边出现了一个小小的黑色箭头,不过现在还不能展开,因为我们还没有为其添加具体的应用程序,如图1.7所示。

clip_image008

步骤2:

现在我们来添加具体的命令选项,以使那个黑色的小箭头能够展开。在注册表中展开到下面这个位置:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\

然后在shell上新建一个键(key),如图2.1所示,名字为ContextMenu.1

clip_image009

然后转到ContextMenu.1中,将默认的值设置为应用程序的名字(总之是你想要其显示的字符),如图2.2所示。

clip_image010

然后再在ContextMenu.1上新建一个键,名字为command,然后转到新建的command键,在command键中默认的值设置为应用程序路径,如图2.3所示。

clip_image011

然后同样的方式建立ContextMenu.2;ContextMenu.3;ContextMenu.4;ContextMenu.5。如图2.4所示。

clip_image012

为了方便,我将它们均设置为了notepad。初步效果如2.5所示。

clip_image013

显然,这个选项里面没有图标,很是不爽,那么我们只需要很简单的操作就可以为各个选项加入图标。

步骤3:

以选项之一为例加入图标,转到ContextMenu.1,然后为其添加一个icon项目,值设置为应用程序路径或者是你自己定义的图片路径即可。如图3.1所示。

clip_image014

现在,再在一个文件上鼠标右键这个选项就会出现图标了,如图3.2所示,但是其父级还没有图标,也是同样的方式添加。

clip_image015

步骤4:

上面的只是在文件上鼠标右键才会出现,如果再在注册表下面的这些位置按照步骤1添加就可以在文件夹或者桌面上鼠标右键出现了。

[HKEY_CLASSES_ROOT\Directory\Background\shell\]

[HKEY_CLASSES_ROOT\Directory\shell\]

[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\]

步骤5:

可是如果按照上面的步骤却是很累人啊,如果我要是添加7-8个选项,那可真有得受了,不过不用担心,现在我们用代码来实现,很简单的:在Windows7的注册表代码中,开头必须以Windows Registry Editor Version 5.00开始(也就是说,reg文件的开始不准有空行),然后空一行,用中括号括起路径,在在下面书写要添加的东西。总之对于我们要实现的功能涉及不到多复杂的,再复杂的我目前也不懂。用代码来加入一个新的鼠标右键菜单,我们将其命名为TestMenu吧,OK,代码如下:

添加一个鼠标右键选项(下载代码):

clip_image016

为添加的鼠标右键选项添加功能(下载代码):

clip_image017

分别保存为first.reg,second.reg,依次运行即可.

上面的代码运行后效果如图final所示。

clip_image018

一些说明:

说明1:代码"SubCommands"="TestMenu.0;TestMenu.1;TestMenu.2;TestMenu.3;|;TestMenu.4"中,里面的|线是分割线,如果你不喜欢,你去掉它就是了。还有就是用双引号括起来的路径分隔符必须得是两条,需要转义。@表示默认值的设置。

说明2:如果你想要修改其中的一项功能,比如说修改Notepad4为win7自带的截图软件,你可以将最后一项代码修改为下面的(下载代码):

clip_image019

那么结果就会如图addition所示:

clip_image020

说明3:运行修改过的代码将覆盖以前的注册表选项。

另外附上四个实用的鼠标右键管理工具(点击下载),四个软件大约11M,让我吭哧吭哧几k的网速上传了大半个晚上,太不容易了,真心感谢辛老师在学校为我们提供那么给力的网速。春节花200两银子买的3G网卡白瞎了,突然间发现,爱情就像山旮旯里的网速,不是你愿意掏钱,电信商就会给你牛逼的网速。呵呵……

其中仅有一个是安装版,其余三个均是免安装版,解压密码是我的QQ号:1191509410

-----------------------------------------知识共享,为中国的互联网领域加力!------------------------------------------------------------

转载请注明出处:你对别人的劳动成果尊重,别人也会以此对你。所以尊重他人就是尊重自己。

posted @ 2014-03-01 18:15  KillerLegend  Views(2367)  Comments(2Edit  收藏  举报