如何将自己的程序加入到系统的快捷菜单中(即鼠标右键弹出的菜单)?

解决方案 »

  1.   

    用程序注册自己的上下文菜单DLL。我暂时没写成功。GZ
      

  2.   

    对,系统菜单的item都是存放在注册表里的,你在注册表里找到相应选项,加进去 菜单名,及响应程序就可以了。
      

  3.   

    http://www.vccode.com/file_show.php?id=1644
      

  4.   

    http://www.codeproject.com/shell/shellextguide1.asp
    http://www.codeproject.com/shell/shellextguide7.asp
    http://www.codeproject.com/shell/commandprompt.asp--------------------------------------------------------------------------------
    在右键菜单中添加item可以用一个com,楼上所说的方法都是那样,也可以直接修改注册表,如下注册文件:
    REGEDIT4[HKEY_CLASSES_ROOT\.dll]
    @="dllfile"[HKEY_CLASSES_ROOT\dllfile\shell\Register Component\command]
    @="regsvr32 \"%L\""将上面代码拷贝到一个文本文件中,save as a.reg,运行a.reg即可在右键菜单添加一项,以后再右键点击一个dll文件的时候将看到Register component菜单,点击该菜单将执行动态库注册。
    http://www.csdn.net/expert/topic/1015/1015222.xml?temp=.2947657
    给系统菜单添加一个菜单项需要进行下述三个步骤:--------------------------------------------------------------------------------
    首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显示该对话)定义菜单项ID,该ID应大于0x0F而小于0xF000;
    其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单项添加到菜单中。下例给系统菜单添加两个新的
    int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)
    {
     …
     //Make sure system menu item is in the right range.
     ASSERT (IDM_MYSYSITEM &0xFFF0)==IDM_MYSYSITEM)
     ASSERT (IDM-MYSYSITEM < 0xf000)
     //Get pointer to system menu.
     CMenu* pSysmenu=GetSystemmenu (FALSE)
     ASSERT_VALID (pSysMenu)
     //Add a separator and our menu item to system menu.
     CString StrMenuItem (_T ("New menu item"))
     pSysMenu->Appendmenu (MF_SEPARATOR)
     pSysMenu->AppendMenu (MF_STRING, IDM_MYSYSITEM, strMenuitem)
     …
    }
    现在,选择系统菜单项时用户应进行检测。使用ClassWizard处理WM_SYSCOMMAND消息并检测用户菜单的nID参数:
    void CMainFrame:: OnSysCommand (UINT nID,LPARAM lParam)
    {
     //Determine if our system menu item was selected.
     if ( (nID & 0xFFF0)==IDM_MYSYSITEM)
     {
     //TODO-process system menu item
     }
     else
     CMDIFrameWnd ::OnSysCommand (nID, lParam)
    }
    最后,一个设计良好的UI应用程序应当在系统菜单项加亮时在状态条显示一个帮助信息,这可以通过增加一个包含系统菜单基ID的串表的入口来实现。--------------------------------------------------------------------------------
    1.启动注册表编辑器
    2 展开HKEY_CLASSES_ROOT
    3 展开Unknow子项
    4 单击shell项后右击
    5 从显示菜单中选择New, 然后选择key
    6 输入要显示的程序名称后,单击OK确定
    7 右击新建子键后单击New
    8 再次选择Key,输入Command, 回车确定
    9 单击新建Command子键,双击(Default)
    10 输入可执行文件全路径名称及 %1
       如C:\program files\mypro\mypro.exe %1--------------------------------------------------------------------------------
    Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Folder\shell\从这里进入DOS]
    @="从这里进入DOS"
    [HKEY_CLASSES_ROOT\Folder\shell\从这里进入DOS\command]
    @="cmd.exe /k cd \"%1\""[HKEY_CLASSES_ROOT\*\Shell\用记事本打开]
    @="用记事本打开"
    [HKEY_CLASSES_ROOT\*\Shell\用记事本打开\command]
    @="notepad.exe \"%1\""
      

  5.   

    先让我试试JennyVenus()的方法,然后结题
      

  6.   

    出处CSDN,作者:zhenxizhou在Windows2000中,当用户在“我的电脑”或“资源管理器”中的某一文件上单击鼠标右键时会出现一个快捷菜单。单击的位置和对象不同,快捷菜单的内容也不尽相同。用户可根据自己的需要定制快捷菜单中的一些内容。假设用户希望在txt文件类型的右键快捷菜单中关联上自己的应用程序 (用户的应用程序名为mytxtapp.exe,在D盘根目录下) ,步骤如下:1、在注册表中找到并打开HKEY_CLASSES_ROOT\.txt子键,查到其默认键值项数据为“txtfile”。2、在注册表中找到并打开HKEY_CLASSES_ROOT\txtfile子键,在该子键的shell子键中添加一个“我的文本应用程序”子键,并将该子键的默认键值项数据设为“用我的文本程序打开”,“用我的文本程序打开”将作为新添加菜单项的名字出现在右键菜单中。双引号内的文字用户可随意设置。3、在HKEY_CLASSES_ROOT\txtfile\shell\我的文本应用程序子键中添加一个command子键,并将command子键的默认键值项数据设为“d:\mytxtapp.exe %1”,此处设置的数据是在快捷菜单中选中相应的菜单项时执行的程序,%1表示应用程序启动时自动将当前文件装入。[应用实例]       用VC++的应用程序向导AppWizard建立一基于对话框的程序,接受所有默认选项。在主对话框中添加一个按钮控件,双击该按钮,接受默认名,在该按钮的消息响应函数中添加如下代码:HKEY hresult;CString str1,str2;long value;LPCTSTR dataset1="txtfile\\shell\\我的文本应用程序";LPCTSTR dataset2="txtfile\\shell\\我的文本应用程序\\command";str1="用我的文本程序打开";str2="d:\\mytxtapp.exe %1";DWORD dwPos;//创建“我的文本应用程序”子键value=RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset1,0,NULL,REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPos);//将该子键的“默认”数据项的数据设置为“用我的文本程序打开”       value=RegSetValueEx(hresult,NULL,0,REG_SZ,(const BYTE*)(LPCTSTR)str1,str1.GetLength());       //创建“command”子键value=RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPos);//将该子键的“默认”数据项的数据设置为用户应用程序的路径       value=RegSetValueEx(hresult,NULL,0,REG_SZ,(const BYTE*)(LPCTSTR)str2,str2.GetLength());::RegCloseKey(hresult);这段代码用来关联用户的应用程序。在主对话框中再添加一个按钮控件,双击该按钮,接受默认名,在该按钮的消息响应函数中添加如下代码:HKEY hKey;LPCTSTR dataset1="txtfile\\shell\\我的文本应用程序";LPCTSTR dataset2="txtfile\\shell";long ret1=::RegOpenKeyEx(HKEY_CLASSES_ROOT,dataset1,0,KEY_READ,&hKey);//删除“command”子键::RegDeleteKey(hKey,LPCTSTR("command"));::RegCloseKey(hKey);ret1=::RegOpenKeyEx(HKEY_CLASSES_ROOT,dataset2,0,KEY_READ,&hKey);//删除“我的文本应用程序”子键::RegDeleteKey(hKey,LPCTSTR("我的文本应用程序"));::RegCloseKey(hKey);这段代码用来恢复注册表中的默认数据。至此,我们完成了在扩展名为.txt文件的右键菜单中关联上自己的应用程序,但不是.txt文件的右键菜单上不会出现该菜单项。如果用户希望在所有文件类型的右键菜单中关联上自己的应用程序,则应在HKEY_CLASSES_ROOT\*\shell子键下进行操作,操作步骤同上。对于关联其他类型的文件依此类推。以上程序在Windows2000和VC6中通过。