c#中如何获得键盘扫描码 比如在NumLock键关闭的情况下,数字键4和方向键<-的keyvalue是相同的,这种情况下怎么区分这两个键的keydown事件。听说可以通过扫描码区分,但是怎样获得扫描码呢?或者谁还有其他的方法吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private void Sequence_KeyDown(object sender, KeyEventArgs e) { MessageBox.Show(e.KeyCode.ToString()); }一个是Left,一个是D4 不知道这个可不可以,很久以前用过protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { switch (keyData) {case Keys.Up...... 还是不行啊,关闭numlock后数字键4和向左的方向键的keycode都是left啊 // 可以用 msg.LParam 来区分 NumPad4, Left, 左右 Alt, Ctrl, Shift, 两个Enter 键using System.Windows.Forms;class Test : Form{ protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { string s = string.Empty; switch ((int)msg.LParam) { case 0x004b0001 : s = "NumPad4" ; break; case 0x014b0001 : s = "Left" ; break; case 0x20380001 : s = "LAlt" ; break; case 0x21380001 : s = "RAlt" ; break; case 0x001d0001 : s = "LControl"; break; case 0x011d0001 : s = "RControl"; break; case 0x002a0001 : s = "LShift" ; break; case 0x00360001 : s = "RShift" ; break; case 0x001c0001 : s = "Enter" ; break; case 0x011c0001 : s = "PadEnter"; break; } MessageBox.Show(msg + "\r\n" + keyData + "\r\n" + s); return base.ProcessCmdKey(ref msg, keyData); } static void Main() { Application.Run(new Test()); }} // 命令键是始终比常规输入键具有优先权的键。命令键的示例包括快捷键和菜单快捷方式。// 在派生类中重写 ProcessCmdKey 方法时,控件应返回 true 以指示它已处理该键。// 对于未由该控件处理的键,应返回调用基类的 ProcessCmdKey 方法的结果。using System.Windows.Forms;class Test : Form{ protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { switch (keyData) { case Keys.Apps : // 应用程序键 case Keys.RWin : // 右 Win 键 case Keys.Menu | Keys.Alt : // Alt 键 case Keys.F4 | Keys.Shift : // Shift-F4 键 MessageBox.Show("Key Press : " + keyData); return true; } return base.ProcessCmdKey (ref msg, keyData); } static void Main() { Application.Run(new Test()); }} wuyi8808的方法有效太感谢了 TAPI3 初始化线路时异常 CS0103: 当前上下文中不存在名称“GetPicPath” 求助算法高手。实现查找曲线的相似段的算法 太怪的事,不知道你们遇到过没有 C#里,想对tab键和shift+tab键的光标移动功能做一些修改 框架页中.aspx刷新的问题 老板压得紧,自已水平又不够,因此想购买一个视频聊天系统的源码?谁有请报价给我。 detailview控件内进行编辑时出错 " C# 标签条形码打印 c# web 中如何获取文件夹的路径?很急 怎样在datagrid里加一个序号列
{
MessageBox.Show(e.KeyCode.ToString());
}
一个是Left,一个是D4
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Up
......
数字键4和向左的方向键的keycode都是left啊
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
string s = string.Empty;
switch ((int)msg.LParam)
{
case 0x004b0001 : s = "NumPad4" ; break;
case 0x014b0001 : s = "Left" ; break;
case 0x20380001 : s = "LAlt" ; break;
case 0x21380001 : s = "RAlt" ; break;
case 0x001d0001 : s = "LControl"; break;
case 0x011d0001 : s = "RControl"; break;
case 0x002a0001 : s = "LShift" ; break;
case 0x00360001 : s = "RShift" ; break;
case 0x001c0001 : s = "Enter" ; break;
case 0x011c0001 : s = "PadEnter"; break;
}
MessageBox.Show(msg + "\r\n" + keyData + "\r\n" + s);
return base.ProcessCmdKey(ref msg, keyData);
} static void Main()
{
Application.Run(new Test());
}
}
// 在派生类中重写 ProcessCmdKey 方法时,控件应返回 true 以指示它已处理该键。
// 对于未由该控件处理的键,应返回调用基类的 ProcessCmdKey 方法的结果。using System.Windows.Forms;class Test : Form
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Apps : // 应用程序键
case Keys.RWin : // 右 Win 键
case Keys.Menu | Keys.Alt : // Alt 键
case Keys.F4 | Keys.Shift : // Shift-F4 键
MessageBox.Show("Key Press : " + keyData);
return true;
}
return base.ProcessCmdKey (ref msg, keyData);
} static void Main()
{
Application.Run(new Test());
}
}
太感谢了