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
}
http://cache.baidu.com/c?m=9d78d513d99256af59fa940f484d8b304411df347d9683402895870fd33a541b0120a1ac26510d19899e6b6776ff1a07bcb7217240527de886cf83499aa6c27672dd3a6f364bd95c11d61fae9b1075c226c750ebf819e0bff23893afd0d3d85144ca245f3cdfae&p=882a9643929d12a059abc86d5c54&user=baidu
更多参见:http://www.diybl.com/course/3_program/c++/cppjs/2007925/73636.html
怎样截取windows的热键,例如: 左右win键,Alt + Tab,Ctrl + Alt + Del,
Ctrl + Esc,Ctrl + Shift + Esc.....等等等等。
楼主,谢谢你了。
// 在派生类中重写 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());
}
}