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
        }

解决方案 »

  1.   

    这个东西我不是很懂,给你个地址,你看一下:
    http://cache.baidu.com/c?m=9d78d513d99256af59fa940f484d8b304411df347d9683402895870fd33a541b0120a1ac26510d19899e6b6776ff1a07bcb7217240527de886cf83499aa6c27672dd3a6f364bd95c11d61fae9b1075c226c750ebf819e0bff23893afd0d3d85144ca245f3cdfae&p=882a9643929d12a059abc86d5c54&user=baidu
      

  2.   

    以前做过C++的开发,在C#中没有WindowMessage的枚举,这个值应该是可以自己定义的,也就是说自己定义一个WindowMessage的枚举,在枚举中创建WM_HOTKEY对应的16进制的值,然后在判断就可以了。
      

  3.   

    查看下 windows 消息机制
      

  4.   

    http://www.cnblogs.com/hanbing008/archive/2008/10/13/865544.html
      

  5.   

    是KeyDown事件时吧,是0x0100
    更多参见:http://www.diybl.com/course/3_program/c++/cppjs/2007925/73636.html
      

  6.   

    楼主,你问这个问题我以前也问过类似的,一直没有解决,你可能能帮我。
    怎样截取windows的热键,例如: 左右win键,Alt + Tab,Ctrl + Alt + Del,
    Ctrl + Esc,Ctrl + Shift + Esc.....等等等等。
    楼主,谢谢你了。
      

  7.   

    // 命令键是始终比常规输入键具有优先权的键。命令键的示例包括快捷键和菜单快捷方式。
    // 在派生类中重写 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());
      }
    }