全球Windows按键

时间:2012-08-01 03:39:16

标签: c# .net wpf keyboard-shortcuts

我有一个简单的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应用程序。

2 个答案:

答案 0 :(得分:23)

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

Microsoft Forums中有一个示例。

您可以使用这些修饰符和Virtual-Key Codes

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

例如F1键是VK_F1 (0x70)

答案 1 :(得分:0)

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