我需要从楔形设备捕获键盘并防止任何控件或表单接收它们。我还需要能够知道值(char)。我已经尝试重写ProcessCmdKey(Keys)和ProcessDialogChar(char)事件。在ProcessCmd事件中,我可以抑制击键,如果它是我想要的,但我的角色不是事件的参数。在ProcessDialogChar事件中,角色就在那里,但我不能阻止焦点的表单或控件接收密钥。建议?
答案 0 :(得分:5)
您希望在表单加载期间添加此内容:
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;
}
通过返回true,您的表单和控件将永远不会看到按键。
答案 1 :(得分:1)
这不是我想要的方式,但因为我需要解决这个问题并继续前进,我在表单上放了一个隐藏的文本框,一旦看到表示数据字符串可能开始的字符我就立刻想捕获我将焦点设置到该文本框并响应TextChanged事件。如果我在计时器到期之前没有看到结束字符,我清除文本框并重新开始。 Kludge,但它起作用并让我接下来的任务。