VC++鼠标、键盘的模拟操作

C++编程 专栏收录该内容
122 篇文章 0 订阅

一、鼠标事件模拟使用的函数是mouse_event()函数,对于鼠标事件我们应该确定两个问题:1.鼠标点击了哪个键:左键、中键、右键?  2.鼠标点击的位置。

mouse_event()函数常常配合SetCursorPos();函数来使用。

mouse_event():

1
2
3
4
5
6
7
VOID mouse_event(
DWORD dwFlags, // motion and click options
DWORD dx, // horizontal position or change
DWORD dy, // vertical position or change
DWORD dwData, // wheel movement
ULONG_PTR dwExtraInfo // application-defined information
);


参数1:告诉系统你的鼠标事件,一共有下面的几种鼠标事件可供选择:

MOUSEEVENTF_ABSOLUTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,那么dX和dY是相对于上一次鼠标的位置,例如上一次鼠标通过SetCursorPos(0,0将鼠标的位置设置为了(0,0),那么这个时候的dX和dY就是相对于(0,0)的偏移。

此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,还是需要下面的几个类型的参数的:

MOUSEEVENTF_MOVE:表明发生移动。

MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。

MOUSEEVENTF_LEFTUP:表明松开鼠标左键。

MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。

MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。

MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。

MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。

MOUSEEVENTF_WHEEL:如果鼠标有一个滚轮,表明鼠标轮被移动。移动的数量由dwData给出。

参数2:事件发生的x坐标,但也可能是偏移量

参数3:事件发生的y坐标,但也可能是偏移量

参数4:dwData:,如果dwFlags为MOUSEEVENTF_WHEEL,

      则dwData指定鼠标轮移动的数量。正值表明鼠

      标轮向前转动,即远离用户的方向;负值表明鼠

      标轮向后转动,即朝向用户。一个轮击定义为

      WHEEL_DELTA,即120。

参数5:指定与鼠标事件相关的附加32位值。应用程序

       调用函数GetMessageExtraInfo来获得此附

       加信息。

 

我们以鼠标双击(100,100)这个坐标为例子写一段代码片段吧,注意对于双击来说,其实就是短时间内左键按下然后左键弹起:

1
2
3
4
5
6
7
8
9
10
//首先直接鼠标位置设置为(100,100)
SetCursorPos(100,100);
//然后,完成一次点击,(按下弹起)
mouse_event(MOUSEEVENTF_LEFTDOWN ,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
//注意鼠标两次点击之间应当有一个时间间隔,否则可能不会出发双击的
Sleep(100);
//再来一次点击
mouse_event(MOUSEEVENTF_LEFTDOWN ,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

二、键盘事件模拟使用函数keybd_event()函数。

VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);

参数1:一个8位的按键虚拟码,注意是1~254之间的

参数2:定义该键的硬件扫描码:。

参数3:定义函数操作的各个方面的一个标志位集。应用程

        序可使用如下一些预定义常数的组合设置标志位。

      KEYEVENTF_EXTENDEDKEY:若指定该值,则扫描码前

         一个值为OXEO(224)的前缀字节。

      KEYEVENTF_KEYUP:若指定该值,该键将被释放;

      未指定该值,该键将被按下。

参数4:定义与击键相关的附加的32位值。

我们以暴风影音的播放按钮为例来模拟键盘事件:

1
1
通过模拟键盘事件,给暴风影音的播放按钮发送消息
HWND hFrmWnd=::FindWindow(_T("Baofeng_StormPlayer"),NULL);
	if (hFrmWnd!=NULL)
	{
		::ShowWindow(hFrmWnd,SW_SHOWNORMAL);
		::SetForegroundWindow(hFrmWnd);
		keybd_event(VK_SPACE,0,0,0);
		Sleep(200);
		keybd_event(VK_SPACE,0,KEYEVENTF_KEYUP,0);
	}

三、键盘  虚拟码表


VK_LBUTTON1鼠标左键
VK_RBUTTON2鼠标右键
VK_CANCEL3Cancel
VK_MBUTTON4鼠标中键
VK_XBUTTON15
VK_XBUTTON26
VK_BACK8Backspace
VK_TAB9Tab
VK_CLEAR12Clear
VK_RETURN13Enter
VK_SHIFT16Shift
VK_CONTROL17Ctrl
VK_MENU18Alt
VK_PAUSE19Pause
VK_CAPITAL20Caps Lock
VK_KANA21
VK_HANGUL21
VK_JUNJA23
VK_FINAL24
VK_HANJA25
VK_KANJI25*
VK_ESCAPE27Esc
VK_CONVERT28
VK_NONCONVERT29
VK_ACCEPT30
VK_MODECHANGE31
VK_SPACE32Space
VK_PRIOR33Page Up
VK_NEXT34Page Down
VK_END35End
VK_HOME36Home
VK_LEFT37Left Arrow
VK_UP38Up Arrow
VK_RIGHT39Right Arrow
VK_DOWN40Down Arrow
VK_SELECT41Select
VK_PRINT42Print
VK_EXECUTE43Execute
VK_SNAPSHOT44Snapshot
VK_INSERT45Insert
VK_DELETE46Delete
VK_HELP47Help

480

491

502

513

524

535

546

557

568

579

65A

66B

67C

68D

69E

70F

71G

72H

73I

74J

75K

76L

77M

78N

79O

80P

81Q

82R

83S

84T

85U

86V

87W

88X

89Y

90Z
VK_LWIN91
VK_RWIN92
VK_APPS93
VK_SLEEP95
VK_NUMPAD096小键盘 0
VK_NUMPAD197小键盘 1
VK_NUMPAD298小键盘 2
VK_NUMPAD399小键盘 3
VK_NUMPAD4100小键盘 4
VK_NUMPAD5101小键盘 5
VK_NUMPAD6102小键盘 6
VK_NUMPAD7103小键盘 7
VK_NUMPAD8104小键盘 8
VK_NUMPAD9105小键盘 9
VK_MULTIPLY106小键盘 *
VK_ADD107小键盘 +
VK_SEPARATOR108小键盘 Enter
VK_SUBTRACT109小键盘 -
VK_DECIMAL110小键盘 .
VK_DIVIDE111小键盘 /
VK_F1112F1
VK_F2113F2
VK_F3114F3
VK_F4115F4
VK_F5116F5
VK_F6117F6
VK_F7118F7
VK_F8119F8
VK_F9120F9
VK_F10121F10
VK_F11122F11
VK_F12123F12
VK_F13124
VK_F14125
VK_F15126
VK_F16127
VK_F17128
VK_F18129
VK_F19130
VK_F20131
VK_F21132
VK_F22133
VK_F23134
VK_F24135
VK_NUMLOCK144Num Lock
VK_SCROLL145Scroll
VK_LSHIFT160
VK_RSHIFT161
VK_LCONTROL162
VK_RCONTROL163
VK_LMENU164
VK_RMENU165
VK_BROWSER_BACK166
VK_BROWSER_FORWARD167
VK_BROWSER_REFRESH168
VK_BROWSER_STOP169
VK_BROWSER_SEARCH170
VK_BROWSER_FAVORITES171
VK_BROWSER_HOME172
VK_VOLUME_MUTE173VolumeMute
VK_VOLUME_DOWN174VolumeDown
VK_VOLUME_UP175VolumeUp
VK_MEDIA_NEXT_TRACK176
VK_MEDIA_PREV_TRACK177
VK_MEDIA_STOP178
VK_MEDIA_PLAY_PAUSE179
VK_LAUNCH_MAIL180
VK_LAUNCH_MEDIA_SELECT181
VK_LAUNCH_APP1182
VK_LAUNCH_APP2183
VK_OEM_1186; :
VK_OEM_PLUS187= +
VK_OEM_COMMA188
VK_OEM_MINUS189- _
VK_OEM_PERIOD190
VK_OEM_2191/ ?
VK_OEM_3192` ~
VK_OEM_4219[ {
VK_OEM_5220\ |
VK_OEM_6221] }
VK_OEM_7222' "
VK_OEM_8223
VK_OEM_102226
VK_PACKET231
VK_PROCESSKEY229
VK_ATTN246
VK_CRSEL247
VK_EXSEL248
VK_EREOF249
VK_PLAY250
VK_ZOOM251
VK_NONAME252
VK_PA1253
VK_OEM_CLEAR254

VK_LBUTTON1鼠标左键
VK_RBUTTON2鼠标右键
VK_CANCEL3Cancel
VK_MBUTTON4鼠标中键
VK_XBUTTON15 
VK_XBUTTON26 
VK_BACK8Backspace
VK_TAB9Tab
VK_CLEAR12Clear
VK_RETURN13Enter
VK_SHIFT16Shift
VK_CONTROL17Ctrl
VK_MENU18Alt
VK_PAUSE19Pause
VK_CAPITAL20Caps Lock
VK_KANA21 
VK_HANGUL21 
VK_JUNJA23 
VK_FINAL24 
VK_HANJA25 
VK_KANJI25* 
VK_ESCAPE27Esc
VK_CONVERT28 
VK_NONCONVERT29 
VK_ACCEPT30 
VK_MODECHANGE31 
VK_SPACE32Space
VK_PRIOR33Page Up
VK_NEXT34Page Down
VK_END35End
VK_HOME36Home
VK_LEFT37Left Arrow
VK_UP38Up Arrow
VK_RIGHT39Right Arrow
VK_DOWN40Down Arrow
VK_SELECT41Select
VK_PRINT42Print
VK_EXECUTE43Execute
VK_SNAPSHOT44Snapshot
VK_INSERT45Insert
VK_DELETE46Delete
VK_HELP47Help
 480
 491
 502
 513
 524
 535
 546
 557
 568
 579
 65A
 66B
 67C
 68D
 69E
 70F
 71G
 72H
 73I
 74J
 75K
 76L
 77M
 78N
 79O
 80P
 81Q
 82R
 83S
 84T
 85U
 86V
 87W
 88X
 89Y
 90Z
VK_LWIN91 
VK_RWIN92 
VK_APPS93 
VK_SLEEP95 
VK_NUMPAD096小键盘 0
VK_NUMPAD197小键盘 1
VK_NUMPAD298小键盘 2
VK_NUMPAD399小键盘 3
VK_NUMPAD4100小键盘 4
VK_NUMPAD5101小键盘 5
VK_NUMPAD6102小键盘 6
VK_NUMPAD7103小键盘 7
VK_NUMPAD8104小键盘 8
VK_NUMPAD9105小键盘 9
VK_MULTIPLY106小键盘 *
VK_ADD107小键盘 +
VK_SEPARATOR108小键盘 Enter
VK_SUBTRACT109小键盘 -
VK_DECIMAL110小键盘 .
VK_DIVIDE111小键盘 /
VK_F1112F1
VK_F2113F2
VK_F3114F3
VK_F4115F4
VK_F5116F5
VK_F6117F6
VK_F7118F7
VK_F8119F8
VK_F9120F9
VK_F10121F10
VK_F11122F11
VK_F12123F12
VK_F13124 
VK_F14125 
VK_F15126 
VK_F16127 
VK_F17128 
VK_F18129 
VK_F19130 
VK_F20131 
VK_F21132 
VK_F22133 
VK_F23134 
VK_F24135 
VK_NUMLOCK144Num Lock
VK_SCROLL145Scroll
VK_LSHIFT160 
VK_RSHIFT161 
VK_LCONTROL162 
VK_RCONTROL163 
VK_LMENU164 
VK_RMENU165 
VK_BROWSER_BACK166 
VK_BROWSER_FORWARD167 
VK_BROWSER_REFRESH168 
VK_BROWSER_STOP169 
VK_BROWSER_SEARCH170 
VK_BROWSER_FAVORITES171 
VK_BROWSER_HOME172 
VK_VOLUME_MUTE173VolumeMute
VK_VOLUME_DOWN174VolumeDown
VK_VOLUME_UP175VolumeUp
VK_MEDIA_NEXT_TRACK176 
VK_MEDIA_PREV_TRACK177 
VK_MEDIA_STOP178 
VK_MEDIA_PLAY_PAUSE179 
VK_LAUNCH_MAIL180 
VK_LAUNCH_MEDIA_SELECT181 
VK_LAUNCH_APP1182 
VK_LAUNCH_APP2183 
VK_OEM_1186; :
VK_OEM_PLUS187= +
VK_OEM_COMMA188 
VK_OEM_MINUS189- _
VK_OEM_PERIOD190 
VK_OEM_2191/ ?
VK_OEM_3192` ~
VK_OEM_4219[ {
VK_OEM_5220\ |
VK_OEM_6221] }
VK_OEM_7222' "
VK_OEM_8223 
VK_OEM_102226 
VK_PACKET231 
VK_PROCESSKEY229 
VK_ATTN246 
VK_CRSEL247 
VK_EXSEL248 
VK_EREOF249 
VK_PLAY250 
VK_ZOOM251 
VK_NONAME252 
VK_PA1253 
VK_OEM_CLEAR254
  • 1
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值