C#WinForm系統熱鍵的注冊與解除

1.API申明

         // 註冊系統熱鍵
        [DllImport( " user32.dll " , SetLastError  =   true )]
        
public   static   extern   bool  RegisterHotKey(IntPtr hWnd,  //  handle to window    
             int  id,  //  hot key identifier    
            KeyModifiers fsModifiers,   //  key-modifier options    
            Keys vk             //  virtual-key code    
            );
        
// 解除註冊熱鍵
        [DllImport( " user32.dll " , SetLastError  =   true )]
        
public   static   extern   bool  UnregisterHotKey(IntPtr hWnd,  //  handle to window    
             int  id       //  hot key identifier    
            );

2.定義並注冊熱鍵

        [Flags()]
        
public   enum  KeyModifiers
        {   
// 這是熱鍵的定義  alt+crtl是3  直接相加就可以了
            None  =   0 ,
            Alt 
=   1 ,
            Control 
=   2 ,
            Shift 
=   4 ,
            Windows 
=   8
        }
 
private   void  MainForm_Load( object  sender, System.EventArgs e)
        {
   
// handle:這個窗體的handle   100:這個熱鍵的標誌id    3:crtl+alt鍵   H: h鍵
                 bool  success  =  RegisterHotKey(Handle,  100 , KeyModifiers.Control  |  

KeyModifiers.Alt, Keys.H);
         }

3.解除注冊熱鍵

  private   void  MainForm_Closing( object  sender, System.ComponentModel.CancelEventArgs e)
        {
            
// handle:這個窗體的handle   100:上面那個熱鍵的標誌id  
            UnregisterHotKey(Handle,  100 );
        }

4.根據熱鍵處理消息

         protected   override   void  WndProc( ref  Message m)
        {
            
const   int  WM_HOTKEY  =   0x0312 ; // 這個是window消息定義的   註冊的熱鍵消息

            
if  (m.Msg  ==  WM_HOTKEY)
            {
                
if  (m.WParam.ToString().Equals( " 100 " ))   // 如果是我們註冊的那個熱鍵
                {
                    
// 這裡寫按下自寶義熱鍵後的代碼
                }
            }

            
base .WndProc( ref  m);
        }

你可能感兴趣的:(C#WinForm系統熱鍵的注冊與解除)