C# 调用win32 API,实现热键注册的简单调用,模拟键盘输入

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
class HotKey
{
//如果函数执行成功,返回值不为0。
//如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //要定义热键的窗口的句柄
int id, //定义热键ID(不能与其它ID重复)
KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
Keys vk //定义热键的内容
);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, //要取消热键的窗口的句柄
int id //要取消热键的ID
);

[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);

//定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
[Flags()]
public enum KeyModifiers
{
None = 0,
Alt = 1,
Ctrl = 2,
Shift = 4,
WindowsKey = 8
}
}
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
public Form1()
{
InitializeComponent();
}

//注册热键
private void Form1_Activated(object sender, EventArgs e)
{
HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Ctrl, Keys.D1);
HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.D2);
HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Ctrl, Keys.D3);
HotKey.RegisterHotKey(Handle, 103, HotKey.KeyModifiers.Ctrl, Keys.D4);
HotKey.RegisterHotKey(Handle, 104, HotKey.KeyModifiers.Ctrl, Keys.D5);
HotKey.RegisterHotKey(Handle, 105, HotKey.KeyModifiers.Ctrl, Keys.D6);
HotKey.RegisterHotKey(Handle, 106, HotKey.KeyModifiers.Ctrl, Keys.D7);
HotKey.RegisterHotKey(Handle, 107, HotKey.KeyModifiers.Ctrl, Keys.D8);
HotKey.RegisterHotKey(Handle, 108, HotKey.KeyModifiers.Ctrl, Keys.D9);
HotKey.RegisterHotKey(Handle, 109, HotKey.KeyModifiers.Ctrl, Keys.D0);
}

//根据ID注销热键设定
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
HotKey.UnregisterHotKey(Handle, 100);
HotKey.UnregisterHotKey(Handle, 101);
HotKey.UnregisterHotKey(Handle, 102);
HotKey.UnregisterHotKey(Handle, 103);
HotKey.UnregisterHotKey(Handle, 104);
HotKey.UnregisterHotKey(Handle, 105);
HotKey.UnregisterHotKey(Handle, 106);
HotKey.UnregisterHotKey(Handle, 107);
HotKey.UnregisterHotKey(Handle, 108);
HotKey.UnregisterHotKey(Handle, 109);
}

// 监视Windows消息 重载WndProc方法,用于实现热键响应
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
//按快捷键
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt32())
{
case 100:
                //do something..
Thread.Sleep(400); //防止程序太快 误操作
SendKeys.Send(KeyList[0]);
break;
case 101:
Thread.Sleep(400);
SendKeys.Send(KeyList[1]);
break;
case 102:
Thread.Sleep(400);
SendKeys.Send(KeyList[2]);
break;
case 103:
Thread.Sleep(400);
SendKeys.Send(KeyList[3]);
break;
case 104:
Thread.Sleep(400);
SendKeys.Send(KeyList[4]);
break;
case 105:
Thread.Sleep(400);
SendKeys.Send(KeyList[5]);
break;
case 106:
Thread.Sleep(400);
SendKeys.Send(KeyList[6]);
break;
case 107:
Thread.Sleep(400);
SendKeys.Send(KeyList[7]);
break;
case 108:
Thread.Sleep(400);
SendKeys.Send(KeyList[8]);
break;
case 109:
Thread.Sleep(400);
SendKeys.Send(KeyList[9]);
break;
}
break;
}
base.WndProc(ref m);
}

private List<string> KeyList = new List<string>()
{
"PROFESSIONALTOOLS",
"NUTTERTOOLS",
"THUGSTOOLS",
"aspirine",
"preciousprotection",
"leavemealone",
"bigbang",
"onearmedbandit",
"onspeed",
"alovelyday"
};

整理电脑,发现好几年前的东西,发到这存一下,就可以把电脑上的删掉啦~~


是以前玩侠盗飞车的时候 那会儿用命令调出各种武器之类的,但是每次输入比较麻烦还容易输错,就想着做个小工具,直接按快捷键就可以自动模拟键盘输入的动作了。所以上面的例子里就是实现ctrl-(0-9) 快捷键模拟键盘输入下面那些小命令。


发出来仅以存档、纪念。