AutoHotkey 实现键盘热键基本上是以下两种方式之一:
- 系统函数RegisterHotkey。这仅支持标准修饰键和 VK 标识的一个键的基本组合。它不支持条件热键 (#If)。如果热键已经被系统或其他应用程序注册,它会失败。
- 如果由于某种原因无法使用 RegisterHotkey 或注册热键失败,则使用键盘挂钩。这是它覆盖系统热键和其他应用程序的全局热键的方法。
通常,并且未^j
注册^v
为全局热键。大多数 Ctrl+ 组合在应用程序中使用,因此不是全局热键的好选择。尤其是一个糟糕的选择,因为它通常是“粘贴”热键(但不是全局的)。^v
当我在 Windows 10.0.19041 上使用^j::
AutoHotkey^v::
脚本时,ListHotkeys
显示它们使用的是reg
(RegisterHotkey) 方法。在这种情况下,其他程序应该没有问题使用 RegisterHotkey 注册热键,只要它们是第一个这样做的。AutoHotkey 没有做任何特别的事情来使 RegisterHotkey 工作;它只是调用该函数,并等待 WM_HOTKEY 消息。
但是,如果ListHotkeys
要显示这一点^j
并且^v
正在使用该k-hook
方法(在没有#UseHook
or的情况下#If
),那将意味着其他东西已经注册了这些热键。在这种情况下,使 RegisterHotkey 工作的唯一方法是找到注册它们的任何内容(使用一般故障排除技术,如执行干净启动),然后将其删除(或如果可以更改其热键)。例如,如果您终止explorer.exe,则可以像#e
RegisterHotkey 一样注册标准热键。
或者,如果您的程序实现了一个低级键盘钩子(与 AutoHotkey 的相同),它可以通过观察 Ctrl 和 J 或 V keydown 和 keyup 事件来检测热键。
实现热键的程序不需要以管理员身份运行。但是,如果活动/聚焦窗口属于以管理员身份运行的程序,则只有以管理员身份运行或具有UI 访问权限的其他程序才能拦截其键盘输入。