根据MSDN上的this page,左侧控制的Key Value
为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);
}
答案 0 :(得分:2)
Messr Passant answered这很多个月前。
如果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);
}