解决c#中全局热键处理的最佳方法?

时间:2008-09-17 08:32:48

标签: c# global hotkeys

  

可能重复:
  How can I register a global hot key to say CTRL+SHIFT+(LETTER) using WPF and .NET 3.5?

我想在我的新应用程序中拥有多个全局热键(从Windows中的任何位置控制应用程序),我在网络上找到的所有给定的源/解决方案似乎都提供了一种跛行的解决方案(或者只针对一个g.hotkey的解决方案,或者在运行时在屏幕上创建恼人的鼠标延迟的解决方案)。

这里有没有人知道可以帮助我实现这一目标的资源,我可以从中学到什么? 什么?

谢谢! :)

3 个答案:

答案 0 :(得分:40)

我找到的最好的解决方案是http://bloggablea.wordpress.com/2007/05/01/global-hotkeys-with-net/

Hotkey hk = new Hotkey();

hk.KeyCode = Keys.1;
hk.Windows = true;
hk.Pressed += delegate { Console.WriteLine("Windows+1 pressed!"); };

hk.Register(myForm); 

请注意如何将不同的lambda设置为不同的热键

答案 1 :(得分:7)

答案 2 :(得分:5)

我会通过使用P / Invoke为每个热键调用RegisterHotKey()来处理这个问题,然后使用NativeForm(假设您正在使用WinForms)来通知WM_HOTKEY消息。这应该将大多数热键代码保存在一个地方。