我已经开发了一个应用程序,可以使用窗口上下文菜单(右键单击文件)加载图像,目前它正在工作,但reg key打开着。
HKEY_CLASSES_ROOT\*
它可以与所有文件一起使用。
我希望上下文菜单中的菜单项仅在 .jpg 文件中显示。
我该如何做?我应该使用哪些注册表键?
我已经开发了一个应用程序,可以使用窗口上下文菜单(右键单击文件)加载图像,目前它正在工作,但reg key打开着。
HKEY_CLASSES_ROOT\*
它可以与所有文件一起使用。
我希望上下文菜单中的菜单项仅在 .jpg 文件中显示。
我该如何做?我应该使用哪些注册表键?
识别.jpg文件的文件类型(ProgID)
可以通过检查HKEY_CLASSES_ROOT\.jpg
的默认值来完成。根据你安装的内容,它可能是任何东西,但为了本例子的目的,我们将其称为jpegfile
,这是一个常见的默认值。
设置该文件类型的上下文菜单项(verb)属性
你可以在HKEY_CURRENT_USER\Software\Classes\jpegfile\shell
里设置每个用户上下文菜单项。该键具有文件类型的一系列动作。在HKEY_LOCAL_MACHINE\Software\Classes\jpegfile\shell
中也有类似的键,这是该文件类型的系统默认值。你也可以在那里放置一个verb键,但如果同样的键存在于HKCU中,则会被覆盖,请注意。
设置命令值
最少需要设置的键值是command子键的默认值才能使它起作用。你需要使用你的应用程序的路径来设置它,例如: HKEY_CURRENT_USER\Software\Classes\jpegfile\shell\open_with_myapp\command
将设置为"c:\path\to\myapp.exe" "%1"
。现在,.jpg文件的上下文菜单将具有“open_with_myapp”项目,当点击时将启动你的应用程序,并将所选文件的文件名作为参数传递。当然,你的应用程序如何处理参数取决于你,因此,你需要将参数字符串设置为你的应用程序可以处理的内容。
设置其他动作属性
我想你可能希望上下文菜单项读起来更加友好。你可以通过设置该键的默认值(open_with_myapp
)使上下文菜单显示任何你想要的标签来为你的项目命名。
这就是基本概述。一定要查看我在有一个类似答案的关于文件关联的问题上的回答:
还有一个与用户默认程序独立运作的注册表关键字:HKEY_CLASSES_ROOT\SystemFileAssociations
。由于在这个问题中没有人提到它,所以在添加上下文菜单项之前无需检查ProgID。例如:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\SystemFileAssociations\.mkv\shell\subtitle]
@="Search subtitles..."
[HKEY_CLASSES_ROOT\SystemFileAssociations\.mkv\shell\subtitle\command]
@="\"D:\\Tools\\subsearch.exe\" \"%1\""
其他要考虑的因素:
HKEY_CLASSES_ROOT
子树可以写入,但通常是通过合并下列信息来形成视图:
HKEY_CURRENT_USER\Software\Classes
HKEY_LOCAL_MACHINE\Software\Classes
你可以将注册信息写入这些类别中。
定义了(ProgID) 的动词优先于在 ...\SystemFileAssociations\
中定义的同名动词,但其取决于特定应用程序。当该应用程序卸载时,它通常会删除其注册表项,以及您在该键下进行的任何修改/添加。或者如果更改了默认的 (ProgID),则您的修改将不再生效。
...\SystemFileAssociations\
注册是稳定的,即使用户更改/卸载了默认程序也是如此。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\
路径下的覆盖设置(参见 https://superuser.com/questions/1424724/file-extension-shell-verbs-dont-show-up-in-windows-10-context-menus),这会覆盖添加其他选项至右键菜单的能力,直到你将其删除为止。 - aolszowkaregedit.exe
),导航到:
创建一个名为"MyApp"的新键。HKEY_CLASSES_ROOT\SystemFileAssociations\.jpg\Shell
我将发布我的工作解决方案,它源自先前的答案(以及其作者的另一个答案)。
它还添加了一个图标。我将其用于所有文件类型,并且没有管理员权限。子项*
在我的注册表中不存在,我自己创建了它。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\*]
[HKEY_CURRENT_USER\Software\Classes\*\shell]
[HKEY_CURRENT_USER\Software\Classes\*\shell\open_with_notepad_pp]
@="Open with Notepad++"
"icon"="C:\\portable\\npp.7.9\\notepad++.exe"
[HKEY_CURRENT_USER\Software\Classes\*\shell\open_with_notepad_pp\command]
@="\"C:\\portable\\npp.7.9\\notepad++.exe\" \"%1\""
更新
将*
替换为类似于.svg
的内容,仅对此扩展名显示菜单项。
shell
键的默认值设置为您希望成为默认值的动词键的名称。 - Factor Mystic