如何做拍卖网站,线上交易商城平台开发,自己做网站卖,无锡网站营销公司简介相关函数解释
GetAsyncKeyState 是 Windows API 中的一个函数#xff0c;用于判断某个虚拟键是否被按下。GetAsyncKeyState(VK_ESCAPE) 专门用于检测 Esc 键的状态。下面为你详细介绍其用法#xff1a;
函数原型
cpp
SHORT GetAsyncKeyState( int vKey
);
参数
vKey用于判断某个虚拟键是否被按下。GetAsyncKeyState(VK_ESCAPE) 专门用于检测 Esc 键的状态。下面为你详细介绍其用法
函数原型
cpp
SHORT GetAsyncKeyState( int vKey
);
参数
vKey虚拟键码对于 Esc 键使用 VK_ESCAPE 作为参数。
返回值
返回一个 SHORT 类型的值其含义如下
最高位第 15 位为 1 时表示该键当前处于按下状态为 0 时表示该键当前处于释放状态。
最低位第 0 位为 1 时表示该键在最近一次调用 GetAsyncKeyState 之后被按下过为 0 时表示该键在最近一次调用之后没有被按下过。
示例代码
以下是一个简单的 C 示例展示了如何使用 GetAsyncKeyState(VK_ESCAPE) 来检测 Esc 键的状态
cpp
#include iostream
#include windows.h
int main() {std::cout Press the Esc key to exit... std::endl;while (true) {// 检测 Esc 键的状态SHORT state GetAsyncKeyState(VK_ESCAPE);// 检查最高位是否为 1即 Esc 键是否被按下if (state 0x8000) {std::cout Esc key is pressed. Exiting... std::endl;break;}// 可以在这里添加其他代码处理其他任务Sleep(10); // 短暂休眠减少 CPU 占用}return 0;}
代码解释
引入必要的头文件windows.h 包含了 GetAsyncKeyState 函数的声明iostream 用于输入输出操作。
进入循环在 while (true) 循环中不断检测 Esc 键的状态。
检测 Esc 键状态调用 GetAsyncKeyState(VK_ESCAPE) 函数获取 Esc 键的状态并将结果存储在 state 变量中。
检查最高位使用按位与运算符 检查 state 的最高位是否为 1。如果为 1则表示 Esc 键被按下输出提示信息并退出循环。
短暂休眠使用 Sleep(10) 函数让程序暂停 10 毫秒减少 CPU 占用。
注意事项
GetAsyncKeyState 是异步的它返回的是调用时键的状态而不是在某个特定消息处理过程中的状态。
由于该函数是异步的可能会出现按键抖动的问题。在实际应用中可以根据需要添加防抖处理。
虚拟键码 对应值 对应键
对应键值
VK_LBUTTON 1 鼠标左键VK_RBUTTON 2 鼠标右键VK_CANCEL 3 CancelVK_MBUTTON 4 鼠标中键VK_XBUTTON1 5VK_XBUTTON2 6VK_BACK 8 BackspaceVK_TAB 9 TabVK_CLEAR 12 Clear13 EnterVK_SHIFT 16 ShiftVK_CONTROL 17 CtrlVK_MENU 18 AltVK_PAUSE 19 PauseVK_CAPITAL 20 Caps LockVK_KANA 21 VK_HANGUL 21 VK_JUNJA 23 VK_FINAL 24 VK_HANJA 25 VK_KANJI 25*VK_ESCAPE 27 EscVK_CONVERT 28 VK_NONCONVERT 29 VK_ACCEPT 30 VK_MODECHANGE 31 VK_SPACE 32 SpaceVK_PRIOR 33 Page UpVK_NEXT 34 Page DownVK_END 35 EndVK_HOME 36 HomeVK_LEFT 37 Left ArrowVK_UP 38 Up ArrowVK_RIGHT 39 Right ArrowVK_DOWN 40 Down ArrowVK_SELECT 41 SelectVK_PRINT 42 PrintVK_EXECUTE 43 ExecuteVK_SNAPSHOT 44 SnapshotVK_INSERT 45 InsertVK_DELETE 46 DeleteVK_HELP 47 Help48 049 150 251 352 453 554 655 756 857 965 A66 B67 C68 D69 E70 F71 G72 H73 I74 J75 K76 L77 M78 N79 O80 P81 Q82 R83 S84 T85 U86 V87 W88 X89 Y90 ZVK_LWIN 91 VK_RWIN 92 VK_APPS 93 VK_SLEEP 95 VK_NUMPAD0 96 小键盘 0VK_NUMPAD1 97 小键盘 1VK_NUMPAD2 98 小键盘 2VK_NUMPAD3 99 小键盘 3VK_NUMPAD4 100 小键盘 4VK_NUMPAD5 101 小键盘 5VK_NUMPAD6 102 小键盘 6VK_NUMPAD7 103 小键盘 7VK_NUMPAD8 104 小键盘 8VK_NUMPAD9 105 小键盘 9VK_MULTIPLY 106 小键盘 *VK_ADD 107 小键盘 VK_SEPARATOR 108 小键盘 EnterVK_SUBTRACT 109 小键盘 -VK_DECIMAL 110 小键盘 .VK_DIVIDE 111 小键盘 /VK_F1 112 F1VK_F2 113 F2VK_F3 114 F3VK_F4 115 F4VK_F5 116 F5VK_F6 117 F6VK_F7 118 F7VK_F8 119 F8VK_F9 120 F9VK_F10 121 F10VK_F11 122 F11VK_F12 123 F12VK_F13 124VK_F14 125VK_F15 126VK_F16 127VK_F17 128VK_F18 129VK_F19 130VK_F20 131VK_F21 132VK_F22 133VK_F23 134VK_F24 135VK_NUMLOCK 144 Num LockVK_SCROLL 145 ScrollVK_LSHIFT 160VK_RSHIFT 161VK_LCONTROL 162VK_RCONTROL 163VK_LMENU 164VK_RMENU 165VK_BROWSER_BACK 166VK_BROWSER_FORWARD 167VK_BROWSER_REFRESH 168VK_BROWSER_STOP 169VK_BROWSER_SEARCH 170VK_BROWSER_FAVORITES 171VK_BROWSER_HOME 172VK_VOLUME_MUTE 173 VolumeMuteVK_VOLUME_DOWN 174 VolumeDownVK_VOLUME_UP 175 VolumeUpVK_MEDIA_NEXT_TRACK 176VK_MEDIA_PREV_TRACK 177VK_MEDIA_STOP 178VK_MEDIA_PLAY_PAUSE 179VK_LAUNCH_MAIL 180VK_LAUNCH_MEDIA_SELECT 181VK_LAUNCH_APP1 182VK_LAUNCH_APP2 183VK_OEM_1 186 ; :VK_OEM_PLUS 187 VK_OEM_COMMA 188VK_OEM_MINUS 189 - _VK_OEM_PERIOD 190VK_OEM_2 191 / ?VK_OEM_3 192 ~VK_OEM_4 219 [ {VK_OEM_5 220 \VK_OEM_6 221 ] }VK_OEM_7 222 引号VK_OEM_8 223VK_OEM_102 226VK_PACKET 231VK_PROCESSKEY 229VK_ATTN 246VK_CRSEL 247VK_EXSEL 248VK_EREOF 249VK_PLAY 250VK_ZOOM 251VK_NONAME 252VK_PA1 253VK_OEM_CLEAR 254
代码块
模拟按键而实际使用模拟按键只需按下和放下有时需要在这两个操作之中放入延时#includestdio.h;#includewindows.hkeybd_event(122, 0, 0, 0);keybd_event(122, 0, KEYEVENTF_KEYUP, 0);组合键keybd_event(VK_LWIN, 0, 0 ,0);keybd_event(R, 0, 0 ,0);keybd_event(R, 0, KEYEVENTF_KEYUP ,0);keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);以及上述这四行用于win 各种键的组合键 鼠标操作 POINT p; SetCursorPos(1577, 346); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 鼠标滑动操作
#include windows.h#include stdio.h#includeunistd.h#includeconio.h#include math.hint zx(int x1,int y1,int x2,int y2){POINT p;int x;SetConsoleTitle(5082.txt);usleep(200000);SetCursorPos(x1, y1);mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);usleep(200000);SetCursorPos(x2,y2);mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);}int main(){zx(1577,346,1125,685);zx(1135,304,1557,801);return 0}
若keybd_event函数已被系统弃用则使用SendInput函数 SendInput 函数是 Windows API 中的一个重要函数用于模拟用户输入事件包括键盘和鼠标操作。它比旧的 keybd_event 和 mouse_event 函数更强大、更可靠并且在现代 Windows 系统中被推荐使用。下面将对 SendInput 函数进行详细介绍。
函数原型
c
UINT SendInput( UINT cInputs, LPINPUT pInputs, int cbSize
);
参数说明
cInputs
类型UINT
描述pInputs 数组中 INPUT 结构体的数量即要模拟的输入事件的数量。
pInputs
类型LPINPUT指向 INPUT 结构体数组的指针
描述一个指向 INPUT 结构体数组的指针每个 INPUT 结构体代表一个输入事件如键盘按键、鼠标移动或鼠标点击等。
cbSize
类型int
描述INPUT 结构体的大小通常使用 sizeof(INPUT) 来获取。
返回值
类型UINT
描述函数返回实际插入到输入队列中的输入事件的数量。如果返回值与 cInputs 不相等则表示出现了错误。可以使用 GetLastError 函数来获取具体的错误代码。
INPUT 结构体
INPUT 结构体用于描述一个输入事件其定义如下
c
typedef struct tagINPUT { DWORD type; union { MOUSEINPUT mi; KEYBDINPUT ki; HARDWAREINPUT hi; };
} INPUT, *PINPUT, *LPINPUT;
type指定输入事件的类型可以是以下值之一
INPUT_MOUSE表示鼠标事件。
INPUT_KEYBOARD表示键盘事件。
INPUT_HARDWARE表示硬件事件通常很少使用。
联合部分根据 type 的值使用不同的结构体来描述具体的输入事件。
MOUSEINPUT用于描述鼠标事件如鼠标移动、鼠标点击等。
KEYBDINPUT用于描述键盘事件如按键按下、按键释放等。
HARDWAREINPUT用于描述硬件事件。
示例代码
模拟键盘按键
c
#include windows.h
#include stdio.h
重点就在于这两个函数的使用
// 模拟按键按下
// 模拟按键按下
void pressKey(WORD keyCode) {INPUT input {0};input.type INPUT_KEYBOARD;input.ki.wVk keyCode;SendInput(1, input, sizeof(INPUT));}// 模拟按键释放void releaseKey(WORD keyCode) {INPUT input {0};input.type INPUT_KEYBOARD;input.ki.wVk keyCode;input.ki.dwFlags KEYEVENTF_KEYUP;SendInput(1, input, sizeof(INPUT));}int main() {// 按下 A 键pressKey(A);// 等待一段时间Sleep(500);// 释放 A 键releaseKey(A);return 0;}模拟鼠标点击c#include windows.h#include stdio.hint main() {INPUT input {0};input.type INPUT_MOUSE;input.mi.dwFlags MOUSEEVENTF_LEFTDOWN;// 按下鼠标左键SendInput(1, input, sizeof(INPUT));Sleep(500);input.mi.dwFlags MOUSEEVENTF_LEFTUP;// 释放鼠标左键SendInput(1, input, sizeof(INPUT));return 0;}
注意事项
权限问题在某些情况下模拟输入事件可能需要管理员权限特别是在系统受保护的区域或应用程序中。
兼容性SendInput 函数在现代 Windows 系统中具有良好的兼容性但在一些特殊环境或虚拟机中可能会受到限制。
错误处理在使用 SendInput 函数时建议检查返回值并使用 GetLastError 函数来处理可能的错误。