2009-04-13 43 views
3

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

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

我所知道的三种途径热键:使用标准的API的

  • 使用在属性对话框中的快捷方式
  • 轮询异步国家重点和应对
  • 热键功能

    • 系统挂钩

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

    回答

    3

    我能想到的三种方式使用标准的API来做到这一点:

    • RegisterHotkey

    • 和SetWindowsHookEx(WH_KEYBOARD)

    • 和SetWindowsHookEx(WH_LL_KEYBOARD)

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

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

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

    相关问题