取消处理(取消注册)系统范围的“HotKey”

时间:2012-08-13 13:06:41

标签: c# events keyboard-events hotkeys unhandled

我已经定义了HotKey Ctrl + Space 来激活我的Windows窗体。当表单处理此HotKey时,系统不会看到此事件。有没有办法解开这些击键? (即取消注册HotKey。)

以下是我的尝试:

private int tuyen_HotKey_Active = 1208132019;

private void Reg_HotKey(bool mode)
{
    if (mode)
    {
        RegisterHotKey(this.Handle, tuyen_HotKey_Active, 2, 32); // Ctrl + Space
    }
    else
    {
        UnregisterHotKey(this.Handle, tuyen_HotKey_Active);
    }
}

protected override void WndProc(ref Message m)
{            
    if (m.Msg == 0x0312) if(m.WParam.ToInt32() == tuyen_HotKey_Active)
    {
        // Do something here. I want Ctrl + Space keystroke to be
        // unhandled here so that it can be seen by the system.
    }
    base.WndProc(ref m);
}

1 个答案:

答案 0 :(得分:0)

创建一个全局bool变量。将其值设置为false。

在Windows KeyDown事件中检查bool变量是否为true返回方法。

如果要取消处理这些击键,请将其值设置为true,当您想要处理这些击键时,请将其值设置为false。

public bool flag = false;

public void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (flag)
        return;

    //.. Code Here something
}

现在您只需设置此标志值即可处理或取消您的击键。