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

本文关键字:上下文 菜单项 文件名 资源管理器 插入 单击 | 更新日期: 2023-09-27 18:34:14

我想为所有"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);
            }
        }

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

若要在较旧版本的 Windows 上为文件类型注册谓词,您需要:

  1. 获取程序 ID。在您的情况下,请阅读 HKCR'.jpg 下的默认值(这通常会给您类似 jpgfile
  2. HKCR'%ProgId%'shell'%YourVerb%'command 下编写谓词命令

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

  1. HKCR'SystemFileAssociations'.jpg'shell'%YourVerb%'command 下编写谓词命令

通常"c:'full'path'to'yourapp.exe" "%1"谓词命令,并且 %1 由窗口替换为文件名。应用程序必须分析命令行。

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