捕获击键

jac*_*jac 1 c#

我需要从楔形设备捕获键盘并防止任何控件或表单接收它们.我还需要能够知道值(char).我已经尝试重写ProcessCmdKey(Keys)和ProcessDialogChar(char)事件.在ProcessCmd事件中,我可以抑制击键,如果它是我想要的,但我的角色不是事件的参数.在ProcessDialogChar事件中,角色就在那里,但我不能阻止焦点的表单或控件接收密钥.建议?

jas*_*onh 5

您需要在表单加载期间添加此项:

Application.AddMessageFilter(this);
Run Code Online (Sandbox Code Playgroud)

添加此常量:

private const int WM_KEYDOWN = 0x100;
Run Code Online (Sandbox Code Playgroud)

而这种方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

通过返回true,您的表单和控件将永远不会看到按键.