110,533
社区成员
发帖
与我相关
我的任务
分享
protected override void WndProc(ref Message m)//监视Windows消息
{
const int WM_HOTKEY = XXX;//XXX这里按下键盘(按下没放开时)发送的消息对应的值是什么
System.Console.WriteLine(m.Msg);
switch (m.Msg)
{
case WM_HOTKEY:
//System.Console.WriteLine(m.Msg);
break;
}
base.WndProc(ref m); //将系统消息传递自父类的WndProc
}
// 命令键是始终比常规输入键具有优先权的键。命令键的示例包括快捷键和菜单快捷方式。
// 在派生类中重写 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());
}
}
// 可以用 msg.LParam 来区分左右 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 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());
}
}