3

HotKey Ctrl + SpaceWindowsフォームをアクティブ化するためのを定義しました。フォームがこれを処理する場合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);
}
4

1 に答える 1

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
}

ここで、キーストロークを処理または処理解除するには、このフラグ値を設定する必要があります。

于 2012-08-13T13:13:11.753 に答える