gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:22:34 26 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

  • 注册热键

  • SetWindowsHookEx(WH_KEYBOARD)

  • SetWindowsHookEx(WH_LL_KEYBOARD)

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

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

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

关于windows - 如何以编程方式检测系统热键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com