在录制按键时抑制全局窗口快捷方式

Posted

技术标签:

【中文标题】在录制按键时抑制全局窗口快捷方式【英文标题】:Suppressing global windows shortcuts while recording keypresses 【发布时间】:2015-08-30 21:13:21 【问题描述】:

是否可以在录制按键时抑制 windows 全局快捷键?

我有一个用 c# 编写的 Windows 窗体应用程序,并使用这个库来记录按键以便以后在宏中使用。现在,当我记录 Windows 使用的组合键(即 L Control + Win + Right Arrow 以更改 Win 10 上的虚拟桌面)时,我希望我的应用程序记录它,但在我记录时避免 Windows 实际使用它很烦人。

我有一个复选框可以在点击事件时启用键捕获

m_KeyboardHookManager.KeyDown += HookManager_KeyDown;

HookManager_KeyDown 就是这样

private void HookManager_KeyDown(object sender, KeyEventArgs e)

    Log(string.Format("KeyDown \t\t 0\n", e.KeyCode));
    string [] sArr = new string [2];
    if (keyBindingArea1.Text != "")
    
        sArr[0] = keyBindingArea1.Text;
        sArr[1] = string.Format("0", e.KeyCode);

        keyBindingArea1.Text = string.Join("+", sArr);
    
    else
    
        keyBindingArea1.Text = string.Format("0", e.KeyCode);
    

在 comboText 控件中显示组合键。 (此代码直接取自软件包附带的演示。

现在录制效果很好,例如我按下 L Control + Win,然后松开按键并按下第三个键(即右箭头),这不会触发 Windows 快捷方式,但让它像这样工作很烦人那个。

感谢任何帮助。谢谢

【问题讨论】:

【参考方案1】:

尝试使用事件的e.Handled 属性。如果将其设置为true,它将终止密钥处理链。通常,处理链中的其他应用程序不会得到它。我不确定它是否适用于像虚拟桌面切换这样的低级别 Windows 人员。

    private void OnKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    
        bool isThirdKey = //Some state evaluation to detect the third key was pressed
        if (isThirdKey) e.Handled = true;
    

【讨论】:

我已经尝试过了,但是没有用。例如,它检测到我正在按下左 Win 键,但它不会抑制它。我用过的代码:if (e.KeyCode == Keys.LWin || e.KeyCode == Keys.RWin) e.Handled = true; 尝试一些简单的键,比如说'a'。启动您的应用程序并在记事本中键入“a”-s。您将看到“a”被正确抑制。然后打开让我们说 Microsoft Word 并重复相同的操作。您会发现抑制不适用于 Word。原因是Word本身使用了钩子,你没有机会压制它。正如我所说,某些应用程序不能被“欺骗”。在这篇文章中查看@Hans Passant 的 cmets:***.com/questions/31054486/…

以上是关于在录制按键时抑制全局窗口快捷方式的主要内容,如果未能解决你的问题,请参考以下文章

联想怎么录屏

win10关机快捷键键盘

如何在快捷方式窗口中显示快捷方式?

JMeter去掉启动的cmd命令窗口和制作快捷方式

怎样在快捷方式里加上窗口化的参数-window

如何在电子应用程序中将鼠标单击设置为全局快捷方式