註冊系統熱鍵(c#)

來源:互聯網
上載者:User

引用命名空間

using System.Runtime.InteropServices;

在類中引用方法

         [DllImport("user32.dll",SetLastError=true)]  

        public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);

private void Form2_Load1(object sender, System.EventArgs e)
{      
       RegisterHotKey(this.Handle,888,2,Keys.S);
 //handle:這個窗體的handle   888:這個熱鍵的標誌id    2:crtl鍵   S: s鍵 

   }

private void Form2_Load1(object sender, System.EventArgs e)
{
             UnregisterHotKey(this.Handle,888);    
            //handle:這個窗體的handle   888:上面那個熱鍵的標誌id  
}

protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0312:    //這個是window訊息定義的   註冊的熱鍵訊息
                    if(m.WParam.ToString().Equals("888"))  //如果是我們註冊的那個熱鍵
                        MessageBox.Show("你按了ctrl+a");
                    break;
            }            
            base.WndProc (ref m);
        }
這是熱鍵的定義  alt+crtl是3  直接相加就可以了

如果用sendmessagea這個api  就是

SendMessage(this.Handle,WM_SETHOTKEY,0x45a, 0)

//WM_SETHOTKEY 是 0x32
//0x45a    高字節是contrl鍵  低字節是a b c d   所以5a是z的ascii   4是alt  也就是alt+z

Demo
http://files.cnblogs.com/5tao/工作日誌.rar

參考:

你在程式中需要自己註冊全域熱鍵,  
  用到API  
  RegisterHotKey  
  UnregisterHotKey  
   
   
  首先,建立一個WinHotKey類,如下  
  public   class   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  
          }  
   
          public   WinHotKey()  
          {  
  //  
  //   TODO:   在此處添加建構函式邏輯  
  //  
          }  
  }  
   
  然後,在程式中這樣調用  
  //快速鍵定義  
  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)  
  {  
  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,100,modifier,nowKey);  
  }  
  catch  
  {  
  //login.ShowMessage("快速鍵定義錯誤!");  
  }  
  }  
   
  //啟用熱鍵  
  protected   override   void   WndProc(ref   Message   m   )  
  {  
  const   int   WM_HOTKEY   =   0x0312;    
   
  switch(m.Msg)  
  {  
  case   WM_HOTKEY:  
  {  
  //如果有新訊息,彈出訊息  
  if(   ReceiveNewMessage   ==   true)  
  {  
  for(int   i=0;i  {  
  ManInfor   searchMan   =   (ManInfor)this.manInforList[i];  
  if(   searchMan.manInforID.Equals(   getFriendID))  
  {  
  searchMan.Clicked   =   true;  
  searchMan.P2PShow();  
  break;  
  }  
  }  
  }  
  else  
  {  
  this.Show();  
  this.TopMost   =   true;  
  this.panel_Main.Refresh();  
  this.WindowState   =   System.Windows.Forms.FormWindowState.Normal;  
  }  
  }  
  break;  
  }    
  base.WndProc(ref   m   );  
  }  
   
  自己研究吧
void regallkey(HWND winhand)
{
 RegisterHotKey(winhand, 96, MOD_ALT, 96);//0
 RegisterHotKey(winhand, 97, MOD_ALT, 97);//1
 RegisterHotKey(winhand, 98, MOD_ALT, 98);//2
 RegisterHotKey(winhand, 99, MOD_ALT, 99);//3
 RegisterHotKey(winhand, 100, MOD_ALT, 100);//4
 RegisterHotKey(winhand, 101, MOD_ALT, 101);//5
 RegisterHotKey(winhand, 102, MOD_ALT, 102);//6
 RegisterHotKey(winhand, 103, MOD_ALT, 103);//7
 RegisterHotKey(winhand, 104, MOD_ALT, 104);//8
 RegisterHotKey(winhand, 105, MOD_ALT, 105);//9
 RegisterHotKey(winhand, 106, MOD_ALT, 107);//密碼
 RegisterHotKey(winhand, 107, MOD_ALT, 109);//查詢
 RegisterHotKey(winhand, 108, MOD_ALT, 106);//返回
 RegisterHotKey(winhand, 109, MOD_ALT, 111);//確認
 RegisterHotKey(winhand, 110, MOD_SHIFT, 111);//左
 RegisterHotKey(winhand, 111, MOD_SHIFT, 106);//右

 RegisterHotKey(winhand, 960,    MOD_ALT, 45);//0
 RegisterHotKey(winhand, 970, MOD_ALT, 35);//1
 RegisterHotKey(winhand, 980, MOD_ALT, 40);//2
 RegisterHotKey(winhand, 990, MOD_ALT, 34);//3
 RegisterHotKey(winhand, 1000, MOD_ALT, 37);//4
 RegisterHotKey(winhand, 1010, MOD_ALT, 12);//5
 RegisterHotKey(winhand, 1020, MOD_ALT, 39);//6
 RegisterHotKey(winhand, 1030, MOD_ALT, 36);//7
 RegisterHotKey(winhand, 1040, MOD_ALT, 38);//8
 RegisterHotKey(winhand, 1050, MOD_ALT, 33);//9
}

void unregallkey(HWND winhand)
{
 for(int i=96;i<122;i++)
  UnregisterHotKey(winhand, i);//0
 for(i=96;i<106;i++)
  UnregisterHotKey(winhand, i*10);//0
}

數字鍵是  alt+NUM0~NUM9的組合 
密碼鍵是  alt+小鍵盤的加號
查詢鍵是  alt+小鍵
返回鍵是  alt+小鍵盤星號 
確認鍵是  alt+小鍵盤/號 
左方向鍵是 shift+小鍵盤/號
右方向鍵是 shift+小鍵盤星號

視窗移動:

using System.Runtime.InteropServices;
[DllImport("user32.dll")]

public static extern int MoveWindow(IntPtr hWnd,int x,int y,int m,int n,bool repaint);
+MoveWindow(myfrmShowLogin.Handle,1024,0,392,240,true);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.