【问题标题】:capture Alt D when application isnt in focus当应用程序不在焦点时捕获 Alt D
【发布时间】:2013-08-24 00:34:48
【问题描述】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 好的,Click.to 类似,它会弹出一个可配置的菜单,因此它允许默认或配置选项,我只是不想使用 Click.to。如果我可以定义一些真正独特的东西,也许双击鼠标(同时左键和右键)我可以让它工作
  • @user1320651 unique 不需要修饰符,它是单数。您试图将修饰符归因于唯一的事实表明它实际上不是唯一的。您无法选择 a) 快速和 b) 未被其他应用程序使用的组合。它会冲突并惹恼用户恕我直言
  • fluxbytes.com/csharp/… 很好地概述了另一个解决方案。很简单。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 2017-10-17
      相关资源
      最近更新 更多