【发布时间】:2012-03-07 04:25:51
【问题描述】:
根据 MSDN 上的this page,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);
}
【问题讨论】:
-
你能提供你用来捕获按键的代码吗(我假设你想从你的表单中而不是全局捕获它)?
-
我已经添加了代码,是的,只是表单。
-
在 WinForms 中,我认为您不走运。您只能处理传递给您的应用程序的键码。一个潜在的解决方法是设置一个全局密钥挂钩并检查当前应用程序是否是您自己的。
标签: c# winforms capture key modifier