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来实现层叠式菜单,可以实现的效果如下图中红色框所示:

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

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

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

步骤1:转到

HKEY_CLASSES_ROOT\*\shell

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

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

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

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

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

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

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

步骤2:

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

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

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

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

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

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

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

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

步骤3:

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

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

步骤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,代码如下:

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

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

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

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

一些说明:

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

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

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

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

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

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

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

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

自定义鼠标右键(层叠式菜单:cascading menu)的更多相关文章

  1. 自定义鼠标右键(层叠式菜单:cascading menu)(文件系统右键、文件夹系统右键和桌面鼠标右键)

    转载:http://www.cnblogs.com/killerlegend/p/3575391.html 转载:http://www.cnblogs.com/shouce/p/5101001.htm ...

  2. js的鼠标右键简单菜单

    实现点击鼠标右键时出来菜单代码如下: 主要运用oncontextmenu事件,oncontextmenu 事件在元素中用户右击鼠标时触发并打开上下文菜单. <!DOCTYPE html> ...

  3. 添加找回鼠标右键新建菜单里的新建office2003/2007/2010文档的简洁方法

    鼠标右键新建菜单里的新建office文档丢失了怎么办?我们可以通过一些优化设置软件如优化大师来定制,但更简单的方法是只需要导入相应的注册表设置就行了. 下面即在鼠标右键新建菜单里添加新建office2 ...

  4. JavaScript自定义鼠标右键菜单

    下面为JavaScript代码 window.onload = function () { //好友列表 var f = 0; //判断指定id的元素在页面中是否存在 if (document.get ...

  5. JQuery模拟网页中自定义鼠标右键菜单

    题外话.......最近在开发一个网站项目的时候,需要用到网页自定义右键菜单,在网上看了各路前辈大神的操作,头晕目眩,为了达到目的,突然灵机一动,于是便有了这篇文章. 先放个效果图(沾沾自喜,大神勿喷 ...

  6. js自定义鼠标右键菜单

    document.oncontextmenu = function(e) { return false; } document.onmousedown = function(e) { switch(e ...

  7. Win10 自定义鼠标右键菜单

    1. 点击文件鼠标右键显示软件 1.1 步骤 win+R输入regedit进入注册表 定位到HKEY_CLASSES_ROOT\*\shell下 在shell创建一个你想要的右键文件 例如:Kinok ...

  8. Win7如何自定义鼠标右键菜单 添加用记事本打开

    鼠标右键用记事本打开.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Notepad] @="用记事本 ...

  9. Win7如何自定义鼠标右键菜单 添加新建WORD文档

    鼠标右键添加新建WORD文档.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.doc] @="Word.Docume ...

随机推荐

  1. linux下文件校验的使用

    为解决官方发布的软件包被别人更改或者软件在传输过程中出现传输错误等问题,软件官方在提供软件包的同时,还提供一个保存MD5校验码的文件. Linux/unix中可以使用如下命令获得校验码和官方的校验码对 ...

  2. [codeforces Mail.Ru Cup 2018 Round 3][B Divide Candies ][思维+数学]

    https://codeforces.com/contest/1056/problem/B 题意:输入n,m    求((a*a)+(b*b))%m==0的(a,b)种数(1<=a,b<= ...

  3. java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方案

    导入commons-logging-1.2.jar辅助类包即可. 报错提示: Exception in thread "main" java.lang.NoClassDefFoun ...

  4. goreplay 镜像nginx web app流量

    goreplay 是一个很不错的流量拷贝,复制工具,小巧,支持一些扩展,当然也提供了企业版,企业版 功能更强大,支持二进制协议的分析 备注: 演示使用docker-compose 运行,测试镜像流量到 ...

  5. ios Programming:The Big Nerd Ranch Guid(6th Edition) (Joe Conway & AARON HILLEGASS 著)

    Introduction (已看) Prerequisites What Has Changed in the Sixth Edition? Our Teaching Philosophy How t ...

  6. SAS常用函数

    SAS常用函数 一.数学函数  ABS(x) 求x的绝对值. MAX(x1,x2,…,xn) 求所有自变量中的最大一个. MIN(x1,x2,…,xn) 求所有自变量中的最小一个. MOD(x,y) ...

  7. python 高阶函数学习, map、reduce

    一个函数可以接收另一个函数作为参数,这样的函数叫做高阶函数. 函数map(): map()函数接收两个参数,一个是函数,一个是Iterable, map把函数作用于序列的每一个元素,并把结果作为Ite ...

  8. Hessian总结

    一.简介: Hessian是一个基于Binary-RPC 实现的远程通讯library,基于 Http 协议进行传输.通过其自定义的串行化机制将请求信息进行序列化,产生二进制流.响应端根据 Hessi ...

  9. node inspector

  10. 将react升级到15之后的坑

    问题来源: 运用ant-design 的metion组件必须要使用react 15.x以上的版本,而目前所用的版本是 react 0.14.x版本,所以就不得不对react进行升级   出现的问题: ...