winform注册快捷键



第一步:定义热键类

class HotKey
   {     
       //如果函数执行成功,返回值不为0。       
       //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
       
       [DllImport(“user32.dll”, SetLastError = true)]
       public static extern bool RegisterHotKey(
           IntPtr hWnd,                //要定义热键的窗口的句柄
            int id,                     //定义热键ID(不能与其它ID重复) 
           KeyModifiers fsModifiers,   //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
            Keys vk                     //定义热键的内容
            );
       [DllImport(“user32.dll”, SetLastError = true)]
       public static extern bool UnregisterHotKey(
           IntPtr hWnd,                //要取消热键的窗口的句柄
            int id                      //要取消热键的ID
            );
       //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
        [Flags()]
       public enum KeyModifiers
       {  
           None = 0,
           Alt = 1,
           Ctrl = 2,
           Shift = 4,
           WindowsKey = 8
       }
   }

 

第二步:注册热键:可以放在from的构造函数里面

HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Alt, Keys.D);
  HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.None, Keys.Escape);
  HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Ctrl, Keys.M);

第三步:通过重载定义快捷键方法:

protected override void WndProc(ref Message m)
       {
           const int WM_HOTKEY = 0x0312;
           //按快捷键  m_IsActive这个开关是我判断焦点是不是当前的Form
            switch (m.Msg)
           {               
               case WM_HOTKEY:
                   switch (m.WParam.ToInt32())
                   {
                       case 100://操作1 
                          MessageBox.show(“111111”);
                           break;
                       case 101://操作2
                           MessageBox.show(“22222”);
                           break;
                       case 102://操作3
                          MessageBox.show(“33333”);
                           break;       
                    }
                   break;               
           }
           base.WndProc(ref m);
       }

第四步 注销快捷键:

HotKey.UnregisterHotKey(Handle, 100);
 HotKey.UnregisterHotKey(Handle, 101);
 HotKey.UnregisterHotKey(Handle, 102);

************************************************************

注意事项:this.ShowInTaskbar = false; 的状态不能为false 否则快捷键无效。