1

我想为所有“jpg”文件在 Windows 资源管理器上下文菜单中添加一个上下文菜单项。当用户单击它时,上下文菜单项的名称将是“处理 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);
            }
        }
4

1 回答 1

0

要在旧版本的 Windows 上为文件类型注册动词,您可以:

  1. 获取ProgID。在你的情况下,阅读下面的默认值HKCR\.jpg(这通常会给你类似的东西jpgfile
  2. 在下面写下你的动词命令HKCR\%ProgId%\shell\%YourVerb%\command

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

  1. 在下面写下你的动词命令HKCR\SystemFileAssociations\.jpg\shell\%YourVerb%\command

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

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

于 2012-05-15T05:26:28.893 回答