繁体   English   中英

捕捉按键

[英]Capture Keystrokes

我需要从楔形设备捕获按键,并防止任何控件或表单接收它们。 我还需要能够知道值(字符)。 我试过重写ProcessCmdKey(Keys)和ProcessDialogChar(char)事件。 在ProcessCmd事件中,我可以抑制击键,如果它是我想要的,但是我的角色不是事件的参数。 在ProcessDialogChar事件中,字符在那里,但是我不能阻止具有焦点的窗体或控件接收键。 有什么建议吗?

您需要在表单加载期间添加以下内容:

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,您的窗体和控件将永远不会看到按键。

这不是我想要的方式,但是因为我需要解决此问题并继续前进,所以我在表单上放置了一个隐藏的文本框,并且一旦我看到一个字符,该信号表明我想捕获的数据字符串可能开始我将焦点设置到该文本框并响应TextChanged事件。 如果在计时器到期之前没有看到结束符,请清除文本框,然后重新开始。 Kludge,但是它起作用了,让我完成了下一个任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM