将上下文菜单项插入资源管理器,并在单击上下文菜单项时传递完整文件名

时间:2012-05-15 04:57:50

标签: c# .net windows shell contextmenu

我想在Windows资源管理器上下文菜单中为所有“jpg”文件添加一个上下文菜单项。当用户点击它时,上下文菜单项的名称将为“process JPEG”,将调用一个主可执行文件。问题是我已经创建了主要的c#可执行文件,它不能仅通过上下文菜单运行它可以独立运行。我想传递用户选择的文件名或文件名,并单击上下文菜单命令和主菜单可执行文件,以便主可执行文件将能够使用某些方法获取文件并处理那些文件。我已经完成了以下内容以集成上下文菜单 - 请帮帮我

public static void Register(
            string fileType, string shellKeyName, 
            string menuText, string menuCommand)
        {
            Debug.Assert(!string.IsNullOrEmpty(fileType) &&
                !string.IsNullOrEmpty(shellKeyName) &&
                !string.IsNullOrEmpty(menuText) && 
                !string.IsNullOrEmpty(menuCommand));

            // create full path to registry location
            string regPath = string.Format(@"{0}\shell\{1}", fileType, shellKeyName);

            // add context menu to the registry
            using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(regPath))
            {
                key.SetValue(null, menuText);
            }

            // add command that is invoked to the registry
            using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(
                string.Format(@"{0}\command", regPath)))
            {               
                key.SetValue(null, menuCommand);
            }
        }

1 个答案:

答案 0 :(得分:0)

要在旧版Windows上为file type注册动词,您需要:

  1. 获取ProgID。在您的情况下,请阅读HKCR\.jpg下的默认值(这通常会为您提供jpgfile
  2. HKCR\%ProgId%\shell\%YourVerb%\command
  3. 下编写动词命令

    从XP开始,您可以在SystemFileAssociations下注册补充动词,而无需控制ProgID:

    1. HKCR\SystemFileAssociations\.jpg\shell\%YourVerb%\command
    2. 下编写动词命令

      动词命令通常为"c:\full\path\to\yourapp.exe" "%1",%1由Windows替换为文件名。您的应用程序必须解析命令行。

      要正确支持同时打开多个文件,最好使用DDE or IDropTarget(或Win7 +上的IExecuteCommand