3

我正在寻找一种以编程方式检测系统中热键的方法。我的应用程序支持可配置的热键来执行不同的操作,并且我希望能够判断另一个应用程序是否已经捕获了一个或者它是内置的 Windows 热键(例如用于锁定工作站的 Win-L)。

如果它是拥有热键的另一个应用程序,我希望能够向用户展示它。至少是exe的名称。

我知道使用热键的三种方法:

  • 使用标准 API 的系统挂钩
  • 使用属性对话框中的热键功能获取快捷方式
  • 轮询异步键状态并响应

我怀疑我可以检测到第三种类型,但是其他两种呢?还有其他我需要了解的情况吗?

4

1 回答 1

4

我可以想到三种使用标准 API 的方法:

  • 注册热键

  • SetWindowsHookEx(WH_KEYBOARD)

  • SetWindowsHookEx(WH_LL_KEYBOARD)

使用第一种方法,您将获得返回值是否另一个应用程序已经注册了相同的热键(或者快捷方式是否使用此热键,或者 Explorer.exe 注册了热键,因为它是 Win+E 或 win+R)。但是,您不会以这种方式获得应用程序名称。

对“热键”使用 Windows Hooks 或异步键状态:我认为不可能在那里检测到热键,因为您可能会在上下文中使用热键(例如,如果最后四个击键是“,则将“t”替换为“irst”)弗里斯") 那样。您可以使用 keybd_event 注入热键(以您的窗口为焦点)并测试事件是否“通过”;另一方面,通过钩子实现的某些“热键”情况不会消耗击键,因此它仍然会通过。

我将使用的方法:首先确保要输入快捷方式,您必须在快捷方式框中键入确切的快捷方式(如果失败,用户将看到哪个应用程序使用它)。然后使用RegisterHotkey,这样你会注意到(在以后的会话中)如果另一个“表现良好”的应用程序试图从你那里窃取这个快捷方式。

于 2009-04-13T16:22:34.613 回答