捕捉“全球热键” (Windows)

现在我一直在尝试创建与Push-To-Talk语音聊天应用程序类似的功能,但到目前为止我找不到任何合适的解决方案。我没有使用MFC或CLR。 问题很简单。我的窗口通常应该没有焦点(即最小化等),但我需要对按键作出反应(基本上,我甚至不想知道按钮是否被按下)。不幸的是,WM_KEYDOWN仅在窗口具有键盘焦点时才有效。我知道,例如Teamspeak使用DirectInput,但我也知道它绝对可以在没有它的情况下完成,我非常喜欢。 我可以使用的唯一其他解决方案是使用GetAsyncKeyState进行轮询,但看起来这也不是一个好的解决方案。如果可能的话,我仍然更喜欢使用Windows消息。     
已邀请:
问题可以通过
RegisterHotKey
或全局低级键盘钩来解决。
RegisterHotKey
(Cody Gray在评价中建议的)可能是更合适的选择。     
我同意乔恩。使用user32.dll和RegisterHotKey函数。非常有用的示例代码位于:https://www.codeproject.com/kb/cs/kiosk_cs.aspx?display = print 如果像我最初一样,代码看起来像是完全乱码而你不知道该怎么做,请观看教程:https://www.youtube.com/watch?v = qQWqGOaZiFI它们非常实用! 如果您尝试注册系统热键:但请注意,第一个链接中的代码将返回错误,具体取决于您尝试注册的系统热键。我的问题突出了这个问题:如何在user32.dll中禁用系统热键? (目前尚未解决)。如果您尝试覆盖系统热键,那么还有一个代码编辑可以修复您将获得的一个错误:
[DllImport("user32.dll", SetLastError = true)]
我设法阻止了Windows + E热键,但其他像Alt + F4和Home + Right没有被禁用,并会返回错误。 如果您不尝试覆盖系统热键,这对您来说应该不是问题。但是,如果您的某个热键无法注册,我建议您使用下面的代码来诊断您的代码。
Marshal.GetLastWin32Error()
^该行代码的完整上下文位于第一个链接中!     

要回复问题请先登录注册