1

录制按键时是否可以抑制 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 快捷方式,但让它这样工作很烦人。

感谢任何帮助。谢谢

4

1 回答 1

-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;
    }
于 2015-08-31T20:58:41.370 回答