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

时间:2015-08-30 21:13:22

标签: c# mousekeyhook

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

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

我有一个复选框,可以在点击事件

上启用键捕获
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 个答案:

答案 0 :(得分:-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;
    }