MFC中热键&模拟键盘&模拟鼠标的使用
来源:互联网 发布:淘宝已买到的宝贝 编辑:程序博客网 时间:2024/05/22 11:55
本文转载自http://my.oschina.net/871120/blog/288145
1. 热键的使用
热键不用了的话一定要卸载,否则下次启动时会被占用。
函数原型
注册函数
BOOL RegisterHotKey(HWND hWnd, // handle to windowint id, // hot key identifierUINT fsModifiers, // key-modifier optionsUINT vk // virtual-key code);
hWnd------窗口句柄;
id------热键的标识;(如果是exe 这个标识的范围就在0-49151之间,如果是DLL 的话,就在49151-65535之间)
fsModifiers-------热键附加选项。(如要设定热键Alt+F5,则Alt在该参数中设置,F5在下面的参数vk中设置)该参数对应四个值:MOD_ALT(Alt键),MOD_CONTROL(Ctrl键),MOD_SHIFT(Shift键),MOD_WIN(Win键)。四个参数可自由组合,如:Alt+Ctrl,可设置为:MOD_ALT|MOD_CONTROL。
vk------虚拟键码。如:F5对应值为VK_F5,Home对应值为VK_HOME。
鼠标和键盘虚拟键码值如下:
Symbolic constant name
Value(hexadeclmal)
Mouse or keyboard equivalent
VK_LBUTTON
01
Left mouse button
VK_RBUTTON
02
Right mouse button
VK_CANCEL
03
Control-break processing
VK_MBUTTON
04
Middle mouse button (three-button mouse)
VK_XBUTTON1
05
Windows 2000: X1 mouse button
VK_XBUTTON2
06
Windows 2000: X2 mouse button
VK_BACK
8
BACKSPACE key
VK_TAB
9
TAB key
VK_CLEAR
0C
CLEAR key
VK_RETURN
0D
ENTER key
VK_SHIFT
10
SHIFT key
VK_CONTROL
11
CTRL key
VK_MENU
12
ALT key
VK_PAUSE
13
PAUSE key
VK_CAPITAL
14
CAPS LOCK key
VK_KANA
15
IME Kana mode
VK_HANGUEL
15
IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
VK_HANGUL
15
IME Hangul mode
—
16
Undefined
VK_JUNJA
17
IME Junja mode
VK_FINAL
18
IME final mode
VK_HANJA
19
IME Hanja mode
VK_KANJI
19
IME Kanji mode
—
1A
Undefined
VK_ESCAPE
1B
ESC key
VK_CONVERT
1C
IME convert
VK_NONCONVERT
1D
IME nonconvert
VK_ACCEPT
1E
IME accept
VK_MODECHANGE
1F
IME mode change request
VK_SPACE
20
SPACEBAR
VK_PRIOR
21
PAGE UP key
VK_NEXT
22
PAGE DOWN key
VK_END
23
END key
VK_HOME
24
HOME key
VK_LEFT
25
LEFT ARROW key
VK_UP
26
UP ARROW key
VK_RIGHT
27
RIGHT ARROW key
VK_DOWN
28
DOWN ARROW key
VK_SELECT
29
SELECT key
VK_PRINT
2A
PRINT key
VK_EXECUTE
2B
EXECUTE key
VK_SNAPSHOT
2C
PRINT SCREEN key
VK_INSERT
2D
INS key
VK_DELETE
2E
DEL key
VK_HELP
2F
HELP key
VK_LWIN
5B
Left Windows key (Microsoft® Natural® keyboard)
VK_RWIN
5C
Right Windows key (Natural keyboard)
VK_APPS
5D
Applications key (Natural keyboard)
—
5E
Reserved
VK_SLEEP
5F
Computer Sleep key
VK_NUMPAD0
60
Numeric keypad 0 key
VK_NUMPAD1
61
Numeric keypad 1 key
VK_NUMPAD2
62
Numeric keypad 2 key
VK_NUMPAD3
63
Numeric keypad 3 key
VK_NUMPAD4
64
Numeric keypad 4 key
VK_NUMPAD5
65
Numeric keypad 5 key
VK_NUMPAD6
66
Numeric keypad 6 key
VK_NUMPAD7
67
Numeric keypad 7 key
VK_NUMPAD8
68
Numeric keypad 8 key
VK_NUMPAD9
69
Numeric keypad 9 key
VK_MULTIPLY
6A
Multiply key
VK_ADD
6B
Add key
VK_SEPARATOR
6C
Separator key
VK_SUBTRACT
6D
Subtract key
VK_DECIMAL
6E
Decimal key
VK_DIVIDE
6F
Divide key
VK_F1
70
F1 key
VK_F2
71
F2 key
VK_F3
72
F3 key
VK_F4
73
F4 key
VK_F5
74
F5 key
VK_F6
75
F6 key
VK_F7
76
F7 key
VK_F8
77
F8 key
VK_F9
78
F9 key
VK_F10
79
F10 key
VK_F11
7A
F11 key
VK_F12
7B
F12 key
VK_F13
7C
F13 key
VK_F14
7D
F14 key
VK_F15
7E
F15 key
VK_F16
7F
F16 key
VK_F17
80H
F17 key
VK_F18
81H
F18 key
VK_F19
82H
F19 key
VK_F20
83H
F20 key
VK_F21
84H
F21 key
VK_F22
85H
F22 key
VK_F23
86H
F23 key
VK_F24
87H
F24 key
—
88–8F
Unassigned
VK_NUMLOCK
90
NUM LOCK key
VK_SCROLL
91
SCROLL LOCK key
92–96
OEM specific
—
97–9F
Unassigned
VK_LSHIFT
A0
Left SHIFT key
VK_RSHIFT
A1
Right SHIFT key
VK_LCONTROL
A2
Left CONTROL key
VK_RCONTROL
A3
Right CONTROL key
VK_LMENU
A4
Left MENU key
VK_RMENU
A5
Right MENU key
卸载函数
BOOL UnregisterHotKey(HWND hWnd, // handle to windowint id // hot key identifier);
应用实例:
1. 新建MFC工程,创建一个对话框,并添加两个按钮,分别设置Caption为:RegisterHotKey和UnRegisterHotKey;
2. 双击[RegisterHotKey]按钮,添加回调函数;
void CMfcDialogDlg::OnBnClickedBntRegister(){ RegisterHotKey(this->m_hWnd,100,MOD_CONTROL,VK_HOME); //注册热键,设置热键为:Ctrl+Home}
3. 双击[UnRegisterHotKey] 按钮,添加回调函数;
void CMfcDialogDlg::OnBnClickedBntUnregister(){ UnregisterHotKey(this->m_hWnd,100); //卸载热键}
4. 响应对话框WM_HOTKEY消息;
void CMfcDialogDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2){ AfxMessageBox("HotKey:Ctrl+Home"); CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);}
5. 运行程序,点击[RegisterHotKey]注册热键,然后按下热键:Ctrl+Home,即可弹出提示对话框。
6. 点击[UnRegisterHotKey]卸载热键。
2. 模拟键盘
Windows提供了一个模拟键盘的函数:Keybd_event,该函数产生一个键盘事件发送给当前获得输入焦点的程序。
注:该函数产生的键盘事件只对应用程序有效,不针对系统,如:模拟Ctrl+Alt+Del来调用任务管理器是无效的。
函数原型
VOID keybd_event(BYTE bVk, //虚拟键码,见上面“鼠标和键盘虚拟键码值表”BYTE bScan, // 硬件扫描码。一般不用DWORD dwFlags, // 函数选项标识ULONG_PTR dwExtraInfo //一般不用);
dwFlag------ 代表键盘的两种状态“按下”和“弹起”。
应用实例
1. 在OnOk函数中添加函数。
void CMfcDialogDlg::OnBnClickedOk(){ keybd_event(VK_LWIN,0,0,0); //按下Win键 keybd_event('F',0,0,0); //按下F键 keybd_event(VK_LWIN,0,2,0); //松开Win键 keybd_event('F',0,2,0); //松开F键}
2. 运行程序,点击[确定]按钮,运行结果如下,弹出“搜索”界面。
3. 模拟鼠标
通用Windows也提供了模拟鼠标函数:mouse_event。
函数原型
VOID mouse_event(DWORD dwFlags, // 鼠标的单击和移动选项DWORD dx, // 横坐标DWORD dy, // 纵坐标DWORD dwData, // 齿轮的滚动ULONG_PTR dwExtraInfo // 应用程序定义信息);
dwFlags------ 选项标识。 鼠标单击和移动选项对应表
Value
Meaning
MOUSEEVENTF_ABSOLUTE
当指定这个值时,dx 和dy 将表示屏幕坐标点绝对坐标的映射。
MOUSEEVENTF_MOVE
表示鼠标移动
MOUSEEVENTF_LEFTDOWN
表示鼠标左键按下
MOUSEEVENTF_LEFTUP
表示鼠标左键弹起
MOUSEEVENTF_RIGHTDOWN
表示鼠标右键按下
MOUSEEVENTF_RIGHTUP
表示鼠标右键弹起
MOUSEEVENTF_MIDDLEDOWN
表示鼠标中间按键按下
MOUSEEVENTF_MIDDLEUP
表示鼠标中间按键弹起
应用实例
1. 在OnOk函数中添加函数。
void CMfcDialogDlg::OnBnClickedOk(){ SetCursorPos(44,752); //将鼠标移动到“开始”按钮上 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP ,0,0,0,0); //模拟单击左键}
2. 运行程序,点击[确定]按钮,运行结果如下,弹出“开始”界面。
- MFC中热键&模拟键盘&模拟鼠标的使用
- 键盘鼠标的模拟
- QT中键盘模拟鼠标的新方法
- 鼠标模拟和键盘模拟的原型
- 键盘,鼠标的模拟API
- 模拟鼠标和模拟键盘
- keybd_event,mouse_event 模拟产生键盘事件、鼠标事件的使用
- .net中模拟键盘和鼠标操作
- .net中模拟键盘和鼠标操作
- .net中模拟键盘和鼠标操作
- java中模拟鼠标和键盘操作
- 使用SendInput模拟键盘和鼠标动作
- 使用SWT模拟鼠标键盘事件
- 使用SWT模拟鼠标键盘事件
- 使用UInput模拟系统键盘鼠标动作
- 使用Actions对象模拟鼠标键盘操作
- 使用UInput模拟系统键盘鼠标动作
- 使用UInput模拟系统键盘鼠标动作
- 重要函数
- 生成验证码的java类(未测试)
- ccnu_2016_暑期模拟赛(2)---bfs
- potplay皮肤装扮
- F - True Liars POJ 1417(并查集)(DFS)
- MFC中热键&模拟键盘&模拟鼠标的使用
- HDOJ 1009之FatMouse' Trade
- Poj1190 生日蛋糕 DFS
- JAVA 发送下载文件(未测试)
- Testing OpenStack NUMA (by quqi99)
- 使用双重指针实现链表结点的插入与删除
- Rsync同步不需要密码的绝对可行版本!
- android 6.0系统扫不到Ble蓝牙问题
- 【转载】CSS魔法堂:你真的理解z-index吗?