全球Windows按键

我有一个简单的WPF应用程序,我需要捕获在Windows(操作系统)中按下的F1键,即使我的WPF窗口被最小化,或者它没有被激活。

检测到这个问题我有问题。 我在互联网上搜索,发现很多结果,但他们没有帮助我。

为了检测应用程序内部按下的键,我使用了这个简单的代码:

AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)KeyPressed); private void KeyPressed(object sender, KeyEventArgs e) { if (e.Key == Key.F1) { //my code went here } } 

但是当我的窗口未激活时,这不起作用。

所以,我的问题是: 如何检测全球按键?

我再说一遍:这是一个WPF应用程序。

无需Keyboard Hooking 。 只需使用RegisterHotKey (定义系统范围的热键)和Windows API的UnregisterHotKey 。 尝试在pinvoke.net或这些教程的C#中使用它们:

  • 全局热键:注册即使表单未聚焦时也会触发的热键。
  • 启用Hotkey和ShortcutInput用户控件的简单步骤

Microsoft论坛中有一个示例。

您可以使用这些修饰符和虚拟键代码 :

 MOD_ALT(0x0001)
 MOD_CONTROL(0x0002)
 MOD_NOREPEAT(0x4000)
 MOD_SHIFT(0x0004)
 MOD_WIN(0x0008) 

例如F1键是VK_F1 (0x70)

当您的应用程序不在焦点时 – messags pump将无法获得任何内容 – 您需要使用系统级API来挂钩密钥。 (尝试在SetWindowsHookEx上搜索信息)