我开发了一个使用窗口上下文菜单加载图像的应用程序(右键单击该文件),目前正在运行,但是reg键已经开启
HKEY_CLASSES_ROOT\*
它适用于所有文件。
我希望上下文菜单中的菜单项只能显示.jpg文件。
我能做到的?我应该使用哪些注册表项?
提前致谢。
答案 0 :(得分:78)
1)识别.jpg文件的文件类型(ProgID)
这可以通过检查HKEY_CLASSES_ROOT\.jpg
的默认值来完成。它可以是基于您安装的内容的任何内容,但出于本示例的目的,我们将其称为jpegfile
,这是一种常见的默认设置。
2)设置该文件类型的上下文菜单项(动词)属性
您可以在HKEY_CURRENT_USER\Software\Classes\jpegfile\shell
中设置每用户上下文菜单项。此键具有文件类型的动词列表。 HKEY_LOCAL_MACHINE\Software\Classes\jpegfile\shell
中有一个类似的键,这些是文件类型的系统默认值。您也可以在其中放置一个动词键,但如果HKCU中存在相同的键,它将被覆盖,因此请注意。
3)设置命令值
为使其工作而需要设置的最小键值是command
子项的默认值。您需要使用应用程序的路径进行设置,例如:HKEY_CURRENT_USER\Software\Classes\jpegfile\shell\open_with_myapp\command
将设置为"c:\path\to\myapp.exe" "%1"
。现在,.jpg文件的上下文菜单将包含一个“open_with_myapp”项,该项将在单击时启动您的应用,并将所选文件的文件名作为参数传递。当然,您的应用程序如何处理参数取决于您,因此您需要将参数字符串设置为您的应用可以处理的内容。
4)设置其他动词属性
我想你可能会希望上下文菜单项读取比键名更友好的东西。您可以通过设置该键的默认值(open_with_myapp
)让上下文菜单显示您想要的任何标签。
这是你的基本概述。绝对查看我关于关联文件的答案,该文件有一个类似的答案:
答案 1 :(得分:15)
注册表中的另一个密钥与用户的默认程序无关: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\""
答案 2 :(得分:0)
将发布源自the previous answer的我的工作解决方案(及其作者的另一个答案之一)。
它还添加了一个图标。我将其用于所有文件类型,并且没有管理员权限。子项目*
在我的注册表中不存在,我自己做了。
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\""
答案 3 :(得分:0)
您可以尝试使用 Nilesoft Shell。您可以在其中以更专业的方式编辑和自定义上下文菜单项。 将菜单项添加到 .jpg 文件的示例
shell
{
dynamic
{
item(type='file' find='.jpg'
title='open_with_myapp'
cmd='myapp.exe'
args='@sel.path')
}
}