C# 当应用程序未聚焦时,侦听密钥
我有一个应用程序(C#4.0-WPF),它是隐藏的,可以通过单击systray图标或我创建的其他框架(停靠在最左侧和最顶部的小框架)来显示 我的客户希望添加一种显示应用程序的新方式:按“F”键(例如F9)时C# 当应用程序未聚焦时,侦听密钥,c#,.net,wpf,keyboard-shortcuts,shortcut,C#,.net,Wpf,Keyboard Shortcuts,Shortcut,我有一个应用程序(C#4.0-WPF),它是隐藏的,可以通过单击systray图标或我创建的其他框架(停靠在最左侧和最顶部的小框架)来显示 我的客户希望添加一种显示应用程序的新方式:按“F”键(例如F9)时 在我的应用程序中,如何知道当应用程序不是当前窗口或未聚焦时用户是否按下此键?如果您只需要几个全局热键,则全局键盘挂钩不是正确的解决方案 使用WH_-keyboard的全局键盘钩子意味着您的dll将被注入到每个接收按键的进程中。在托管代码中根本不应该使用CLR,因为CLR相对较重,可能会导致
在我的应用程序中,如何知道当应用程序不是当前窗口或未聚焦时用户是否按下此键?如果您只需要几个全局热键,则全局键盘挂钩不是正确的解决方案
- 使用
的全局键盘钩子意味着您的dll将被注入到每个接收按键的进程中。在托管代码中根本不应该使用CLR,因为CLR相对较重,可能会导致版本冲突 这种代码注入对于可能会阻止它的反病毒软件来说也是可疑的WH_-keyboard
- 对于托管代码,使用
的低级键盘挂钩是更好的选择,因为它在您自己的应用程序中处理键盘事件。但它仍然要求每个键盘事件都由线程处理 这会增加按键和目标应用程序接收按键之间的时间 如果CPU优先级高于应用程序的应用程序耗尽了CPU时间,则这种情况尤其糟糕。在这种情况下,延迟可以达到几秒钟,将多个按键集中在一起。有些(写得不好的)游戏就是这样工作的,在这种情况下无法运行WH\u keyboard\u LL
- windows API函数是用于全局热键的合适函数 Windows将为您进行筛选,并且仅在按下其中一个注册键时通知您的应用程序,因此您不必处理所有注册键