桌面右键菜单,添加程序的方法
2016-08-28 11:10
253 查看
最近做了一个程序,想要在桌面右键中添加菜单项,可以直接在上面点击就能进入打开或程序界面。
然后在其下继续添加新建项,命名为command,同时默认值改为自己程序的路径,当然如果需要参数可以加在后面。
效果如下:
但是这种方法只能在自己电脑中手动添加。
添加位置:HKEY_CLASSES_ROOT\Directory\Background\shell
<a href="http://www.cnblogs.com/qintangtao/archive/2012/12/21/2827540.html">注册表编程</a>
以上两种方法都可以在右键擦弹添加新项,但是无法做更多的判断,因此需要Shell扩展编程实现。
至于如何判断自己的程序是否已经打,可先使用SPY++来找到自己程序的类和标题名,然后在桌面上通过FindWindowsEx依次遍历
程序编译成功,并注册后,在HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers下出现新加项。
注销扩展程序:regsvr32.exe /u xxx.dll
(注册或注销成功失败都会弹出一个对话框来提示,如果不希望弹出对话框,则可添加参数/s,如:regsvr32.exe /s xxx.dll )
(这里可能失败,需要检查权限问题,可以在开始菜单输入cmd,然后在查到的cmd.exe上右键,以管理员权限运行,在跳转到dll所在目录执行注册或注销)
(同时需要注意,32的系统使用32位的扩展程序,64位的系统使用64位的扩展程序)
另:
如果测试的时候想要重新编译,如果注册了前一次编译出来的dll,可能会提示打不开xxx.dll,这是因为explorer.exe即资源管理器已经在运行这个扩展了。
这个时候需要先注销这个扩展。然后,快捷键Ctrl+Alt+del,进入任务管理器,结束进程explorer.exe,并且在左上方文件中新建任务运行EXPLORER,如下图:
完了之后,再重新编译。
方法1:注册表中直接添加
在HKEY_CLASSES_ROOT\Directory\Background\shell下新建项,命名为自己想在右键菜单中显示的名字,如”谷歌吧”、“百度吧”。然后在其下继续添加新建项,命名为command,同时默认值改为自己程序的路径,当然如果需要参数可以加在后面。
效果如下:
但是这种方法只能在自己电脑中手动添加。
方法2:注册表编程
通过Windows提供注册表函数来实现。添加位置:HKEY_CLASSES_ROOT\Directory\Background\shell
<a href="http://www.cnblogs.com/qintangtao/archive/2012/12/21/2827540.html">注册表编程</a>
以上两种方法都可以在右键擦弹添加新项,但是无法做更多的判断,因此需要Shell扩展编程实现。
方法3:Windows Shell扩展编程
怎么编写菜单扩展就不多讲了,可以参考 自己动手写一个简单的Windows Shell扩展程序至于如何判断自己的程序是否已经打,可先使用SPY++来找到自己程序的类和标题名,然后在桌面上通过FindWindowsEx依次遍历
BOOL IsOpenProgram() { HWND hDeskWnd = NULL;//桌面上SysListView32的窗口句柄 HWND hWnd = ::FindWindow(_T("WorkerW"), NULL);//先当作WIN7系统来查找 while(hWnd){ HWND hShellView = ::FindWindowEx(hWnd, NULL, _T("SHELLDLL_DefView"), NULL); if(hShellView){ hDeskWnd = ::FindWindowEx(hShellView, NULL, _T("SysListView32"), NULL); break; } hWnd = ::GetWindow(hWnd,GW_HWNDNEXT); } if(!hDeskWnd){//如果没找到,再按XP方式查找 hWnd = ::FindWindow(_T("Progman"), _T("Program Manager")); if(hWnd){ hWnd = ::FindWindowEx(hWnd,NULL, _T("SHELLDLL_DefView"), NULL); hDeskWnd = ::FindWindowEx(hWnd, NULL, _T("SysListView32"), NULL); } } HWND hDesktopMenu = NULL;//自己窗口的句柄 if (hDeskWnd){ hDesktopMenu = ::FindWindowEx(hDeskWnd, NULL, _T("UIMainFrame"), _T("DeskMenu")); } if (hDesktopMenu){ return TRUE; } else{ return FALSE; } }
程序编译成功,并注册后,在HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers下出现新加项。
关于扩展程序的测试:
注册扩展程序:regsvr32.exe xxx.dll注销扩展程序:regsvr32.exe /u xxx.dll
(注册或注销成功失败都会弹出一个对话框来提示,如果不希望弹出对话框,则可添加参数/s,如:regsvr32.exe /s xxx.dll )
(这里可能失败,需要检查权限问题,可以在开始菜单输入cmd,然后在查到的cmd.exe上右键,以管理员权限运行,在跳转到dll所在目录执行注册或注销)
(同时需要注意,32的系统使用32位的扩展程序,64位的系统使用64位的扩展程序)
另:
如果测试的时候想要重新编译,如果注册了前一次编译出来的dll,可能会提示打不开xxx.dll,这是因为explorer.exe即资源管理器已经在运行这个扩展了。
这个时候需要先注销这个扩展。然后,快捷键Ctrl+Alt+del,进入任务管理器,结束进程explorer.exe,并且在左上方文件中新建任务运行EXPLORER,如下图:
完了之后,再重新编译。
相关文章推荐
- 注册表添加策略方法及实现,添加桌面右键菜单
- Win7系统如何在桌面右键菜单里添加自定义程序或网址?
- 将任意程序添加进右键菜单方法
- 【电脑使用】修改注册表,添加右键菜单“打开”的方法
- 添加删除右键菜单的方法
- 去掉桌面右键ATI Catalyst Tm Control Center菜单方法
- merlin.acs的使用方法 merlin.acs添加右键菜单
- 添加IE右键菜单 以 调用和运行 自己的程序或文件
- 使用Python为程序添加右键菜单打开方式
- 文件夹右键菜单添加快捷DOS命令的两种方法
- 实现添加程序到桌面快捷菜单
- <轉載>在(CListView)列表视图中添加右键菜单的方法
- 在(CListView)列表视图中添加右键菜单的方法 (转)
- 在文件夹右键菜单中添加“进入DOS”命令的方法
- utraledit安装之后无右键菜单--添加方法
- 在文件夹右键菜单中添加“进入DOS”命令的方法
- C#中在IE右键菜单中添加自定义项的方法
- 在(CListView)列表中添加右键菜单方法
- 在桌面菜单新建里添加程序
- 将程序添加到右键菜单