9

我是一个长期使用 Windows 的用户,他非常喜欢使用许多不同的实用程序(一些是我自己用 Python 编写的)和 AutoHotKey 脚本来自定义他的 Windows。这些都使用全局热键来实现其功能。

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

有人告诉我,我需要将这些应用程序标记为通过属性以管理员身份运行,但即便如此,它们也无法成功绑定到这些热键。

知道如何绑定到这些热键吗?

更新:

看起来 AHK能够绑定到这些键,但永远有用的同上不能,我的 wxPython 程序也不能。知道为什么最后两个不能绑定到这些键,我该如何解决?

4

1 回答 1

1

AutoHotkey 实现键盘热键基本上是以下两种方式之一:

  1. 系统函数RegisterHotkey。这仅支持标准修饰键和 VK 标识的一个键的基本组合。它不支持条件热键 (#If)。如果热键已经被系统或其他应用程序注册,它会失败。
  2. 如果由于某种原因无法使用 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方法(在没有#UseHookor的情况下#If),那将意味着其他东西已经注册了这些热键。在这种情况下,使 RegisterHotkey 工作的唯一方法是找到注册它们的任何内容(使用一般故障排除技术,如执行干净启动),然后将其删除(或如果可以更改其热键)。例如,如果您终止explorer.exe,则可以像#eRegisterHotkey 一样注册标准热键。

或者,如果您的程序实现了一个低级键盘钩子(与 AutoHotkey 的相同),它可以通过观察 Ctrl 和 J 或 V keydown 和 keyup 事件来检测热键。

实现热键的程序不需要以管理员身份运行。但是,如果活动/聚焦窗口属于以管理员身份运行的程序,则只有以管理员身份运行或具有UI 访问权限的其他程序才能拦截其键盘输入。

于 2021-02-27T23:24:32.330 回答