Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何以编程方式检测系统热键?_Windows_Hotkeys - Fatal编程技术网

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

Windows 如何以编程方式检测系统热键?,windows,hotkeys,Windows,Hotkeys,我正在寻找一种在系统中以编程方式检测热键的方法。我的应用程序支持可配置的热键来执行不同的操作,我希望能够判断另一个应用程序是否已经锁定了一个热键,或者它是内置的Windows热键(如锁定工作站的Win-L) 如果它是另一个拥有热键的应用程序,我希望能够向用户展示。至少是exe的名称 我知道使用热键的三种方法: 使用标准API的系统钩子 使用“属性”对话框中的热键功能创建快捷方式 轮询异步密钥状态并响应 我怀疑我能检测出第三种类型,但其他两种呢?还有其他我需要了解的情况吗?我可以想出三种使用标

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

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

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

  • 使用标准API的系统钩子
  • 使用“属性”对话框中的热键功能创建快捷方式
  • 轮询异步密钥状态并响应

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

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

  • 注册表快捷键

  • SetWindowsHookEx(万用键盘)

  • SetWindowsHookEx(万用键盘)

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

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

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