1

根据MSDN 上的这个页面Key Value, Left Control 的值为 162。如何确定在代码中是否按下了此键?目前,每次我尝试处理按键时,我都会得到17一个通用控制键的值。有没有办法区分这两者?我尝试过覆盖ProcessCmdKey和处理PreviewKeyDown文本框,但它们都返回 17 而不是 162。我需要对所有修饰键执行此操作,并且在最终硬编码这些值之前,是否有更好的替代方法在代码中捕获这些值?

编辑:添加代码。为了澄清,我想检索 162 数字,而不仅仅是找到区分修饰符的替代方法。

private void PortfolioNameTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    var val = e.KeyValue; //17 when control is pressed and not 162

}

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    //msg.Wparam = 17
    return base.ProcessCmdKey(ref msg, keyData);
}
4

1 回答 1

2

帕桑特先生在很多个月前就回答了这个问题。

如果 KeyEventArgs 包含它会很好,但尽管如此,您可以像这样实现它:

    [DllImport("user32.dll")]
    private static extern short GetAsyncKeyState(Keys key);

    private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        Console.WriteLine("Ctrl:{0}, LCtrl:{1}, RCtrl:{2}",
        GetAsyncKeyState(Keys.ControlKey) < 0,
        GetAsyncKeyState(Keys.LControlKey) < 0,
        GetAsyncKeyState(Keys.RControlKey) < 0);
    }
于 2012-03-07T05:06:27.477 回答