据我所知,Windows 没有提供一个 API 函数来告诉哪个应用程序已经注册了一个全局热键(通过 RegisterHotkey)。我只能发现一个热键注册如果 RegisterHotkey 返回 false,但没有谁“拥有”热键。
在没有直接 API 的情况下,是否有一种迂回的方法?Windows 维护与每个注册热键相关联的句柄——这有点令人恼火,因为没有办法获得这些信息。
例如: 发送(模拟)一个已注册的热键,然后拦截 Windows 将发送到注册它的进程的热键消息。首先,我不认为拦截消息会暴露目的地窗口句柄。其次,即使这是可能的,这将是一件坏事做,因为发送热键将触发各种潜在的不必要的活动从各种程序。
这并不重要,但是我经常看到对这种功能的请求,而且我自己也是那些注册热键却不在 UI 或文档中任何地方公开的应用程序的受害者。
(在 Delphi 工作,不过是 WinAPI 的学徒,请友好一点。)