全球Windows键(Global Windows Key Press)

2019-06-26 15:57发布

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

Answer 1:

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

  • 全局热键:注册时不集中形式甚至触发热键。
  • 简单的步骤,使热键和ShortcutInput用户控制

有一个样品微软论坛 。

您可以使用这些改性剂和虚拟键代码 :

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

例如F1键是VK_F1 (0x70)



Answer 2:

当你的应用程序没有焦点 - messags泵不会得到任何东西 - 你需要使用系统级API的卡勾按键。 (尝试搜索上调用SetWindowsHookEx信息)



文章来源: Global Windows Key Press