所以我刚刚在桌面上创建了一个带有新扩展名的文件,它的上下文菜单如下所示:
我可以使用键盘上的菜单键调出上下文菜单,然后按下按键实际上可以选择上下文菜单中的某些项目。当然,这让我有机会创建一些键盘快捷键。但是,我不太明白它们是如何工作的。请看以下示例。
如果我创建一个名为“item.newextension”的文件,然后导入以下注册表文件:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.newextension\shell\Edit\command]
@="notepad.exe \"%1\""
[HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.newextension\shell\Contemplate\command]
@="mspaint.exe \"%1\""
我得到了一些不一致且有趣的结果。为了保持一致,我的上下文菜单现在如下所示:
如果我打开上下文菜单并按下“e”键,记事本就会立即打开。此外,如果我打开上下文菜单并按下“c”键,上下文菜单会在“考虑”和“复制”之间切换,但直到我按下 Enter 键才会选择其中之一。
所以我意识到,如果你仔细观察,你会发现上下文菜单项中每个字母下方都有一条小线,对应于选择该字母需要按下的键,当有重叠时,反复按下该键会在两者之间切换。所以我有几个问题:
- 当我创建自己的上下文菜单条目时(就像在 .reg 文件中所做的那样),如何选择负责选择该条目的键?
- 我可以更改“创建快捷方式”和“复制”等现有的键盘快捷键吗?或者它们必须分别始终为“s”和“c”?
我使用的是 Windows 10 1803 Build 17134,以供参考。
答案1
如果有多个上下文菜单项具有相同的热键,则按下该热键将在它们之间切换,正如您所发现的。如果热键仅对应一个项目,则按下它将立即触发该项目。
显然,Windows 使用项目文本的首字母作为热键。您可以通过&
在要成为热键的字母前放置一个与号 ( ) 来覆盖它。但是,这必须在命令的注册表项的默认值中完成,而不是键名。在此图中,我尝试将 Contemplate 的热键更改为 ,将OEdit 的热键更改为I:
两者似乎都可以工作,因为上述配置会产生以下上下文菜单:
按下O会立即触发 Contemplate,但按下I不会执行任何操作,尽管我的菜单中没有其他项目使用I。将 Edit 更改为具有无 & 符号的键名但默认值为Ed&it
可使其按预期工作。
没有直接的方法来更改内置上下文菜单项(如复制);它们不在注册表中,而是由 Explorer 生成的。您可以编写一个使用SetMenuItemInfo
适当的菜单信息结构在运行时更改它。对于一个较旧的答案, 我写用于更改内置项目图标的外壳扩展这可能是一个很好的起点。