C# 快捷键

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Runtime.InteropServices;
 4 using System.Windows.Forms;
 5 
 6 namespace TMouse
 7 {
 8     class HotKey
 9     {
10         //如果函数执行成功,返回值不为0。
11         //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
12         [DllImport("user32.dll", SetLastError = true)]
13         public static extern bool RegisterHotKey(
14             IntPtr hWnd,                  //要定义热键的窗口的句柄
15             int id,                       //定义热键ID(不能与其它ID重复)          
16             KeyModifiers fsModifiers,     //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
17             Keys vk                       //定义热键的内容
18             );
19 
20         [DllImport("user32.dll", SetLastError = true)]
21         public static extern bool UnregisterHotKey(
22             IntPtr hWnd,                  //要取消热键的窗口的句柄
23             int id                        //要取消热键的ID
24             );
25 
26         //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
27         [Flags()]
28         public enum KeyModifiers
29         {
30             None = 0,
31             Alt = 1,
32             Ctrl = 2,
33             Shift = 4,
34             WindowsKey = 8
35         }
36 
37 
38     }
39 }
40 
41 接着在Form1的构造函数中注册快捷键
42 
43 HotKey.RegisterHotKey(Handle, 100,HotKey.KeyModifiers.Ctrl, Keys.S);
44             HotKey.RegisterHotKey(Handle, 101,HotKey.KeyModifiers.Ctrl, Keys.X);
45 
46 
47 接着在Form1的关闭函数注销快捷键
48 
49 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
50         {
51             //注销快捷键
52             //注销Id号为100的热键设定
53             HotKey.UnregisterHotKey(Handle, 100);
54             //注销Id号为101的热键设定
55             HotKey.UnregisterHotKey(Handle, 101);
56             //注销Id号为102的热键设定
57             HotKey.UnregisterHotKey(Handle, 102);
58 
59         }
60 
61 接着重载WndProc方法,用于实现热键响应
62 
63 ///
64         /// 监视Windows消息
65         /// 重载WndProc方法,用于实现热键响应
66         ///
67         ///
68         protected override void WndProc(ref Message m)
69         {
70             const int WM_HOTKEY = 0x0312;
71             //按快捷键
72             switch (m.Msg)
73             {
74                 case WM_HOTKEY:
75                     switch (m.WParam.ToInt32())
76                     {
77                         case 100:      //按下的是Ctrl+S
78                             this.timer1.Start();
79                             break;
80                         case 101:      //按下的是Ctrl+X
81 
82                             //此处填写快捷键响应代码
83                             Application.Exit();
84                             break;
85                         case 102:      
86                             
87                             break;
88                     }
89                     break;
90             }
91             base.WndProc(ref m);
92         }
93 

posted on 2009-10-09 17:34    阅读(544)  评论(0编辑  收藏  举报

导航