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

Ram*_*hum 9 wxpython autohotkey keyboard-shortcuts global-hotkey windows-10

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

最近,我被迫升级到Windows10。问题之一是某些热键似乎无法绑定。几个示例是ctrl-j和ctrl-v。

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

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

更新:

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

Lex*_*kos 1

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

  1. 系统函数RegisterHotkey。这只支持标准修饰键和 VK 识别的一个键的基本组合。它不支持条件热键 (#If)。如果该热键已被系统或其他应用程序注册,则会失败。
  2. 如果 RegisterHotkey 由于某种原因无法使用或者无法注册热键,则使用键盘挂钩。这是它覆盖其他应用程序的系统热键和全局热键的方法。

通常,^j^v注册为全局热键。大多数 Ctrl+ 组合都在应用程序中使用,因此对于全局热键来说不是一个好的选择。^v特别是这是一个糟糕的选择,因为它通常是“粘贴”热键(但不是全局的)。

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

但是,如果ListHotkeys要显示^j并且^v正在使用该方法(在没有或 的k-hook情况下),则意味着其他东西已经注册了这些热键。在这种情况下,使 RegisterHotkey 工作的唯一方法是找到注册它们的任何内容(使用常规故障排除技术,例如执行干净启动),然后删除它(或者如果可以的话更改其热键)。例如,如果您终止explorer.exe,则可以像使用 RegisterHotkey 一样注册标准热键。#UseHook#If#e

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

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