捕获特定的修改器键
本文关键字:修改器 | 更新日期: 2023-09-27 18:26:55
根据MSDN上的此页面,Left Control的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);
}
Messr Passant在许多个月前就回答了这个问题。
如果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);
}