C#注册系统全局快捷键
时间:2014-03-26 20:22:43
收藏:0
阅读:532
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 |
int keyid = 10; Dictionary< int , HotKeyCallBackHanlder> keymap = new
Dictionary< int , HotKeyCallBackHanlder>(); public
delegate void HotKeyCallBackHanlder(); public
enum HotkeyModifiers { Alt = 1, Control = 2, Shift = 4, Win = 8 } [System.Runtime.InteropServices.DllImport( "user32.dll" )] static
extern bool RegisterHotKey(IntPtr hWnd, int
id, int
modifiers, System.Windows.Forms.Keys vk); [System.Runtime.InteropServices.DllImport( "user32.dll" )] static
extern bool UnregisterHotKey(IntPtr hWnd, int
id); /// <summary> /// 注册快捷键 /// </summary> /// <param name="hWnd">持有快捷键窗口的句柄</param> /// <param name="modifiers">组合键</param> /// <param name="vk">快捷键的虚拟键码</param> /// <param name="callBack">回调函数(按下快捷键时被调用的方法)</param> public
void Regist(IntPtr hWnd, int
modifiers, System.Windows.Forms.Keys vk, HotKeyCallBackHanlder callBack) { int
id = keyid++; if
(!RegisterHotKey(hWnd, id, modifiers, vk)) throw
new Exception( "注册失败!" ); keymap[id] = callBack; } /// <summary> /// 注销快捷键 /// </summary> /// <param name="hWnd">持有快捷键窗口的句柄</param> /// <param name="callBack">回调函数</param> public
void UnRegist(IntPtr hWnd, HotKeyCallBackHanlder callBack) { foreach
(KeyValuePair< int , HotKeyCallBackHanlder> var
in keymap) { if
( var .Value == callBack) UnregisterHotKey(hWnd, var .Key); } } /// <summary> /// 快捷键消息处理 /// </summary> public
void ProcessHotKey(System.Windows.Forms.Message m) { if
(m.Msg == 0x312) { int
id = m.WParam.ToInt32(); HotKeyCallBackHanlder callback; if
(keymap.TryGetValue(id, out
callback)) callback(); } } |
1 HotKeys hotKsys = new HotKeys(); 2 3 private void Form1_Load(object sender, EventArgs e) 4 { 5 hotKsys.Regist(this.Handle, (int)HotKeys.HotkeyModifiers.Control + (int)HotKeys.HotkeyModifiers.Alt, Keys.H, CallBack_Hide);//Ctrl+Alt+H 6 hotKsys.Regist(this.Handle, (int)HotKeys.HotkeyModifiers.Control, Keys.W, CallBack_Show);//Ctrl+W 7 } 8 9 void CallBack_Hide() 10 { 11 this.Hide(); 12 } 13 14 void CallBack_Show() 15 { 16 this.Show(); 17 } 18 19 protected override void WndProc(ref Message m) 20 { 21 hotKsys.ProcessHotKey(m); 22 base.WndProc(ref m); 23 } 24 25 private void Form1_FormClosing(object sender, FormClosingEventArgs e) 26 { 27 hotKsys.UnRegist(this.Handle, CallBack_Hide); 28 hotKsys.UnRegist(this.Handle, CallBack_Show); 29 }
原文:http://www.cnblogs.com/panpancn/p/3625984.html
评论(0)