点击按键Ctrl-Alt-Q

fla*_*404 2 c# winforms

选择击键组合的"正确/最佳"方法是什么?有问题的密钥是Ctrl+ Alt+ Q,我希望用户同时按下所有密钥,此时我将打开一个窗口.我目前正在做一个阵列,然后单独捕捉每个击键,但我的结果是不一致的,特别是在戴尔笔记本电脑/ Windows 7组合的特定品牌,但这是另一个故事.

所以在谷歌花了五分钟后,这只是一个粗略的版本,看了msdn,但正如我之前所说的那样是这个版本(未经测试)正确/最好的方式吗?

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)    
{
    const int WM_KEYDOWN = 0x100;
    const int WM_SYSKEYDOWN = 0x104;

    if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
    {
        switch(keyData)
        {
            case Keys.Control | Keys.Alt | Keys.Q:
            this.Parent.Text="<CTRL> + Alt + Q Captured";
            break;
        }               
    }

    return base.ProcessCmdKey(ref msg,keyData);
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 6

忽略msg.Msg,只看keyData.如果使用击键,则返回true而不调用base.这简化为:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)    
{
    if (keyData == (Keys.Control | Keys.Alt | Keys.Q)) {
        this.Parent.Text="<CTRL> + Alt + Q Captured";
        return true;
    }
    return base.ProcessCmdKey(ref msg,keyData);
}
Run Code Online (Sandbox Code Playgroud)

这可能应该是窗体方法的覆盖,因此您不依赖于具有焦点的控件.你会使用this.Text.