C#中定义热键

80酷酷网    80kuku.com

  

 以一个Form程序为例

public class Form1 : Form

{
            private void Form1_Load(object sender, System.EventArgs e)
            {
                        SetHotKey(false, false, false, true, Keys.Right, 100); // 设置多个热键
                        SetHotKey(false, false, false, true, Keys.Space, 101);
                        SetHotKey(false, false, false, true, Keys.Up, 102);
                        SetHotKey(false, false, false, true, Keys.Down, 103);
            }
            
            private bool key_Ctrl = false;
            private bool key_Shift = false;
            private bool key_Alt = false;
            private bool key_Windows = false;
            private Keys   key_other;

            public void SetHotKey(bool bCtrl,bool bShift,bool bAlt,bool  bWindows,Keys nowKey,int keyId)
            {
                  try
                  {
                        this.key_Alt = bAlt;
                        this.key_Ctrl = bCtrl;
                        this.key_Shift = bShift;
                        this.key_Windows = bWindows;
                        this.key_other = nowKey;
           
                        WinHotKey.KeyModifiers modifier = WinHotKey.KeyModifiers.None;
           
                        if( this.key_Ctrl )
                              modifier |= WinHotKey.KeyModifiers.Control;
                        if(this.key_Alt )
                              modifier |= WinHotKey.KeyModifiers.Alt;
                        if(this.key_Shift)
                              modifier |= WinHotKey.KeyModifiers.Shift;
                        if(this.key_Windows)
                              modifier |= WinHotKey.KeyModifiers.Windows;
           
                        WinHotKey.RegisterHotKey(Handle,keyId,modifier,nowKey);
                  }
                  catch
                  {
                        MessageBox.Show ("快捷键定义错误!");
                  }
            }
           
            protected override void WndProc(ref Message msg )
            {
                  const int WM_HOTKEY =  0x0312; // 热键消息

                  if (msg.Msg != WM_HOTKEY)
                  {
                        base.WndProc(ref msg);
                  }
                  else
                  {
                                  //激活热键,在此可以添加处理程序
                                  if (100 == (int)msg.WParam)
                                  {
                                              //Dosomething
                                  }
                                  else if (101 == (int)msg.WParam)
                                  {
                                              //Dosomething
                                  }
                                  else if (102 == (int)msg.WParam)
                                  {
                                              //Dosomething
                                  }
                                  else
                                  {
                                              //Dosomething
                                  }
                  }
           }

            private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
            {
                WinHotKey.UnregisterHotKey(Handle, 100);      // 注销热键
                WinHotKey.UnregisterHotKey(Handle, 101);      // 注销热键
                WinHotKey.UnregisterHotKey(Handle, 102);      // 注销热键
                WinHotKey.UnregisterHotKey(Handle, 103);      // 注销热键
            }

public class WinHotKey
{
            public WinHotKey()
            {
           
            }

            [DllImport("user32.dll",SetLastError=true)]
            public static extern bool RegisterHotKey(
                  IntPtr hWnd,
                  int id,
                  KeyModifiers fsModifiers,
                  Keys vk
                  );

            [DllImport("user32.dll",SetLastError=true)]
            public static extern bool UnregisterHotKey(
                  IntPtr hWnd,
                  int id
                  );

            [Flags()]
            public enum KeyModifiers
            {
                  None = 0,
                  Alt = 1,
                  Control =2,
                  Shift = 4,
                  Windows = 8
            }

}

这样就完成了热键的定义


分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: