1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Runtime.InteropServices;
7 using System.Text;
8 using System.Threading;
9 using System.Windows.Forms;
10
11 namespace WindowsFormsApp
12 {
13 public partial class FormS : Form
14 {
15 public FormS()
16 {
17 InitializeComponent();
18 Control.CheckForIllegalCrossThreadCalls = false;
19 }
20 public bool KeyState { get; set; }
21 public Thread TD { get; set; }
22 private void FormS_Load(object sender, EventArgs e)
23 {
24 KeyState = false;
25 HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Alt, Keys.F);
26 #region 注册按键
27 //注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
28 //HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);
29 //注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
30 //HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
31 //注册热键Ctrl+Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。
32 //HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt | HotKey.KeyModifiers.Ctrl, Keys.D);
33 //注册热键F5,Id号为103。
34 //HotKey.RegisterHotKey(Handle, 103, HotKey.KeyModifiers.None, Keys.F5);
35 #endregion
36 }
37 protected override void WndProc(ref Message m)
38 {
39 const int WM_HOTKEY = 0x0312;
40 //按快捷键
41 switch (m.Msg)
42 {
43 case WM_HOTKEY:
44 switch (m.WParam.ToInt32())
45 {
46 case 101:
47 //MessageBox.Show("C++"); return;
48 switch (KeyState)
49 {
50 case true:
51 TD.Abort();
52 KeyState = false;
53 break;
54 case false:
55 TD = new Thread(KeyStart);
56 TD.IsBackground = true;
57 TD.Start();
58 KeyState = true;
59 break;
60 default:
61 break;
62 }
63 break;
64 default:
65 break;
66 #region 注册按键
67 //case 100://按下的是Shift+S
68 // this.Text = "按下的是Shift+S";
69 // break;
70 //case 101://按下的是Ctrl+B
71 // //此处填写快捷键响应代码
72 // this.Text = "按下的是Ctrl+B";
73 // break;
74 //case 102://按下的是Alt+D
75 // //此处填写快捷键响应代码
76 // this.Text = "按下的是Ctrl+Alt+D";
77 // break;
78 //case 103:
79 // this.Text = "F5";
80 // break;
81 #endregion
82 }
83 break;
84 }
85 base.WndProc(ref m);
86 }
87 private void FormS_KeyUp(object sender, KeyEventArgs e)
88 {
89 //try
90 //{
91 // if (e.Modifiers.CompareTo(Keys.Alt) == 0 && e.KeyCode == Keys.F)
92 // {
93 // MessageBox.Show("C#"); return;
94 // switch (KeyState)
95 // {
96 // case true:
97 // TD.Abort();
98 // KeyState = false;
99 // break;
100 // case false:
101 // TD = new Thread(KeyStart);
102 // TD.IsBackground = true;
103 // TD.Start();
104 // KeyState = true;
105 // break;
106 // default:
107 // break;
108 // }
109 // }
110 //}
111 //catch (Exception er)
112 //{
113 // MessageBox.Show(er.ToString());
114 //}
115 }
116 public void KeyStart()
117 {
118 while (true)
119 {
120 try
121 {
122 SendKeys.SendWait("{F}");
123 }
124 catch (Exception) { }
125 Thread.Sleep(500 + new Random().Next(0, 500));
126 }
127 }
128 }
129 public class HotKey
130 {
131 //如果函数执行成功,返回值不为0。
132 //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
133 [DllImport("user32.dll", SetLastError = true)]
134 public static extern bool RegisterHotKey(IntPtr hWnd, int id, KeyModifiers fsModifiers, Keys vk);
135 //要定义热键的窗口的句柄
136 //定义热键ID(不能与其它ID重复)
137 //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
138 //定义热键的内容
139
140 [DllImport("user32.dll", SetLastError = true)]
141 public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
142 //要取消热键的窗口的句柄
143 //要取消热键的ID
144
145 //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
146 [Flags()]
147 public enum KeyModifiers
148 {
149 None = 0,
150 Alt = 1,
151 Ctrl = 2,
152 Shift = 4,
153 WindowsKey = 8
154 }
155 }
156 }