程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c#中設置快捷鍵

c#中設置快捷鍵

編輯:關於C語言
最近找了一些資料,是講在C#中設置快捷鍵運行方法或程序的 

要設置快捷鍵必須使用user32.dll下面的兩個方法。 

BOOL RegisterHotKey( 
 HWND hWnd, 
 int id, 
 UINT fsModifIErs, 
 UINT vk 
);  

  和 

BOOL UnregisterHotKey( 
 HWND hWnd, 
 int id 
);  
轉換成C#代碼,那麼首先就要引用命名空間System.Runtime.InteropServices;來加載非托管類user32.dll。於是有了: 

[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  
); 


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

  這是注冊和卸載全局快捷鍵的方法,那麼我們只需要在Form_Load的時候加上注冊快捷鍵的語句,在FormClosing的時候卸載全局快捷鍵。同時,為了保證剪貼板的內容不受到其他程序調用剪貼板的干擾,在Form_Load的時候,我先將剪貼板裡面的內容清空。 

  於是有了: 

private void Form1_Load(object sender, System.EventArgs e) 

 label2.AutoSize = true; 

 Clipboard.Clear();//先清空剪貼板防止剪貼板裡面先復制了其他內容 
 RegisterHotKey(Handle, 100, 0, Keys.F10); 


private void Form1_FormClosing(object sender, FormClosingEventArgs e) 

 UnregisterHotKey(Handle, 100);//卸載快捷鍵 
}  

  那麼我們在別的窗口,怎麼讓按了快捷鍵以後調用我的主過程ProcessHotkey()呢? 

  那麼我們就必須重寫WndProc()方法,通過監視系統消息,來調用過程: 

protected override void WndProc(ref Message m)//監視Windows消息 

 const int WM_HOTKEY = 0x0312;//按快捷鍵 
 switch (m.Msg) 
 { 
  case WM_HOTKEY: 
   ProcessHotkey();//調用主處理程序 
   break; 
 } 
 base.WndProc(ref m); 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved