当应用程序不在焦点上时捕获Alt D
本文关键字:Alt 应用程序 焦点 | 更新日期: 2023-09-27 18:28:26
我有一个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/
这对我来说非常有效
键盘事件通常发送到当前关注的应用程序。为了在应用程序未聚焦时处理键盘事件,您通常需要设置键盘挂钩
- 挂钩概述
- C中的Windows挂钩#
钩子本质上允许例程在事件传递到目标应用程序之前拦截事件。
然而,我强烈建议不要尝试这样做。处理发送到其他应用程序的键盘事件的应用程序非常烦人。它阻止我以预期的方式使用其他应用程序。通常情况下,我会卸载窃取我按键的应用程序
您可以使用另一项服务来检测按键并与您的应用程序进行通信。这里有一个类似的问题:监控C#中的特定击键
您要找的似乎是键盘挂钩:http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C
此类允许您敲击键盘和鼠标和/或检测它们活动,即使应用程序在后台运行或没有运行拥有任何用户界面。此类引发常见的.NET事件使用KeyEventArgs和MouseEventArgs,因此您可以轻松检索您需要的信息。