应用程序未处于焦点时捕获Alt D.

时间:2013-08-21 14:54:20

标签: c# winforms keyboard-shortcuts

我有一个可以激活或最小化的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/

这对我很有用

3 个答案:

答案 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,您可以轻松检索任何内容   你需要的信息。