在Windows 10上绑定某些全局快捷键失败

9

我是一位长期使用Windows的用户,非常喜欢使用各种不同的工具(有些是用Python编写的)和AutoHotKey脚本来自定义我的Windows。它们都使用全局热键进行功能操作。

最近,我被迫升级到Windows 10。其中一个问题是某些热键似乎无法绑定。例如CTRL-JCTRL-V

我被告知需要通过“属性”将这些应用程序标记为管理员运行,但即使如此,它们也无法成功绑定到这些热键。

你有什么办法可以绑定到这些热键吗?

更新:

看起来AHK实际上可以绑定到这些键,但常用的Ditto和我的wxPython程序不能。你有什么想法为什么后两者无法绑定到这些键,以及我该如何解决?


1
^j::MsgBox^v::MsgBox 对我来说都很好用。这是一个默认安装,没有进行任何特殊修改的安装;也就是说,没有修改属性。一些 Windows 热键已在注册表中设置(例如 # + L),但我不认为你提到的两个热键是其中之一。 - EJE
@EJE 你说得对,我更新了我的问题。 - Ram Rachum
1
你说:“我被告知需要通过属性将这些应用程序标记为管理员才能运行”,但实际上可能是相反的:你需要将AutoHotkey脚本设置为管理员运行。请参见https://www.autohotkey.com/docs/Variables.htm#IsAdmin,以及您可以添加到AutoHotkey脚本开头的代码https://www.autohotkey.com/docs/commands/Run.htm#RunAs - lintalist
@tukan,我现在尝试了快捷方式浏览器,它说:“在您的Windows快捷方式中未找到任何快捷键。”然后显示一个空列表。 - Ram Rachum
@RamRachum 即使 AHK 绑定了这些键也不行吗?这很奇怪。这可能意味着 Win10 更新破坏了“传统”的映射方式。你从哪个 Win10 版本更新的?我猜 AHK 使用了某种低级别的方式,而其他人使用的是“标准”的 Ms 方式。 - tukan
显示剩余6条评论
1个回答

1
AutoHotkey实现键盘热键的基本方法有两种:
  1. 系统函数RegisterHotkey。它仅支持标准修饰键和一个由VK标识的键的基本组合。它不支持条件热键(#If)。如果热键已经被系统或其他应用程序注册,它将失败。
  2. 如果由于某种原因无法使用RegisterHotkey或者无法注册热键,则使用键盘钩子。这是覆盖其他应用程序的系统热键和全局热键的方法。
通常,^j^v没有被注册为全局热键。大多数Ctrl+组合键在应用程序内部使用,因此不适合作为全局热键的选择。特别是^v,因为它通常是“粘贴”热键(但不是全局热键),所以不是个好的选择。

当我在Windows 10.0.19041上使用AutoHotkey脚本中的^j::^v::时,ListHotkeys显示它们使用reg(RegisterHotkey)方法。在这种情况下,只要其他程序是第一个注册热键,它们就可以使用RegisterHotkey注册热键而没有任何问题。AutoHotkey没有做任何特殊的事情来使RegisterHotkey起作用;它只是调用该函数,并等待WM_HOTKEY消息。

然而,如果 ListHotkeys 显示 ^j^v 使用了 k-hook 方法(在没有 #UseHook#If 的情况下),那就意味着其他东西已经注册了这些热键。在这种情况下,使 RegisterHotkey 生效的唯一方法是找到注册它们的任何内容(使用常规故障排除技术如执行 clean boot),并且将其删除(或者如果可能改变其热键)。例如,如果终止 explorer.exe,则可以使用 RegisterHotkey 注册标准热键如 #e
另外,如果您的程序实现了一个 低级键盘钩子 (与AutoHotkey相同),它可以通过观察 Ctrl 和 J 或 V 的按下和松开事件来检测热键。
实现热键的程序不需要以管理员权限运行。但是,如果当前/焦点窗口属于以管理员权限运行的程序,则只有其他以管理员权限运行或具有UI访问 的程序才能拦截其键盘输入。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接