1

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

这对我来说非常有用

4

3 回答 3

1

键盘事件通常发送到当前处于焦点的应用程序。为了在您的应用程序不在焦点时处理键盘事件,您通常需要设置一个键盘挂钩

钩子本质上允许例程在事件传递到目标应用程序之前拦截事件。

但是,我强烈建议不要尝试这样做。处理发送到其他应用程序的键盘事件的应用程序非常烦人。它阻止我以我期望的方式使用其他应用程序。通常我会通过卸载窃取我的击键的应用程序来回应

于 2013-08-21T14:59:34.897 回答
0

您可以使用其他服务一直检测按键并与您的应用程序进行通信。这是一个类似的问题: Monitoring for specific Keystrokes in C#

于 2013-08-21T14:57:18.460 回答
0

你在找什么似乎是一个键盘钩子: http: //www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

此类允许您点击键盘和鼠标和/或检测它们的活动,即使应用程序在后台运行或根本没有任何用户界面。此类使用 KeyEventArgs 和 MouseEventArgs 引发常见的 .NET 事件,因此您可以轻松检索所需的任何信息。

于 2013-08-21T14:58:57.167 回答