当应用程序不在焦点上时捕获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/

这对我来说非常有效

当应用程序不在焦点上时捕获Alt D

键盘事件通常发送到当前关注的应用程序。为了在应用程序未聚焦时处理键盘事件,您通常需要设置键盘挂钩

  • 挂钩概述
  • C中的Windows挂钩#

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

然而,我强烈建议不要尝试这样做。处理发送到其他应用程序的键盘事件的应用程序非常烦人。它阻止我以预期的方式使用其他应用程序。通常情况下,我会卸载窃取我按键的应用程序

您可以使用另一项服务来检测按键并与您的应用程序进行通信。这里有一个类似的问题:监控C#中的特定击键

您要找的似乎是键盘挂钩:http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

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