我有一个可以激活或最小化的c#winforms应用程序。我希望能够捕获并覆盖任何现有的快捷方式,这样无论我的应用程序将响应“Alt + D”。
如果应用具有焦点,我可以使用
执行此操作protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Alt | Keys.D))
{
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
但是,当应用程序没有焦点时,它不会执行,例如如果我在firefox中,我的Ctrl D按键序列不会被激活
我怎样才能让它发挥作用?
理想情况下,我希望能够使用鼠标突出显示/在任何应用程序中选择一些文本,然后按Alt D,然后将此文本发送到我的应用程序。
更新
http://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/
这对我很有用
答案 0 :(得分:1)
键盘事件通常发送到当前处于焦点的应用程序。为了在应用程序未对焦时处理键盘事件,通常需要设置键盘挂钩
钩子本质上允许例程在将事件传递给目标应用程序之前拦截它们。
但我强烈建议不要尝试这样做。处理发送到其他应用程序的键盘事件的应用程序非常烦人。它阻止我以我期望的方式使用其他应用程序。通常我会通过卸载正在窃取我的击键的应用来做出回应
答案 1 :(得分:0)
您可以使用其他服务始终检测按键并与您的应用进行通信。 这是一个类似的问题: Monitoring for specific Keystrokes in C#
答案 2 :(得分:0)
你在寻找什么似乎是一个键盘钩:http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C
此类允许您点击键盘和鼠标和/或检测它们 活动,即使应用程序在后台运行或不运行 有任何用户界面。这个类引发了常见的.NET事件 使用KeyEventArgs和MouseEventArgs,您可以轻松检索任何内容 你需要的信息。