代码之家  ›  专栏  ›  技术社区  ›  jac

捕获击键

c#
  •  1
  • jac  · 技术社区  · 15 年前

    我需要从一个楔形装置中捕获keystok,并防止任何控件或窗体接收它们。我还需要知道值(char)。我已尝试重写processCmdKey(keys)和processDialogChar(char)事件。在processCmd事件中,如果需要,我可以抑制击键,但是字符不是事件的参数。在processDialogChar事件中,字符在那里,但我不能阻止具有焦点的窗体或控件接收键。建议?

    2 回复  |  直到 15 年前
        1
  •  5
  •   jasonh    15 年前

    您将希望在表单加载期间添加此项:

    Application.AddMessageFilter(this);
    

    添加此常量:

    private const int WM_KEYDOWN = 0x100;
    

    这种方法:

    public bool PreFilterMessage(ref Message m)
    {
        Keys keyCode = (Keys)(int)m.WParam & Keys.KeyCode;
        bool retVal = false;
    
        if (m.Msg == WM_KEYDOWN)
        {
            // Handle the keypress
            retVal = true;
        }
    
        return retVal;
    }
    

    如果返回“真”,则窗体和控件将永远看不到按键。

        2
  •  1
  •   jac    15 年前

    这不是我想做的,但因为我需要解决这个问题并继续前进,我在窗体上放置了一个隐藏的文本框,当我看到表示我想要捕获的数据字符串可能开始的字符时,我就将焦点设置到该文本框并响应TextChanged事件。如果在计时器过期之前我没有看到结束字符,请清除文本框并重新开始。克劳奇,但它起作用了,让我开始下一个任务。