如何以编程方式检测系统热键?

时间:2009-04-13 16:07:42

标签: windows hotkeys

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

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

我知道有三种方法可以做热键:

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

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

1 个答案:

答案 0 :(得分:4)

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

  • RegisterHotkey

  • 和SetWindowsHookEx(WH_KEYBOARD)

  • 和SetWindowsHookEx(WH_LL_KEYBOARD)

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

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

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