与ReadConsoleInput的区别
ReadConsoleInput
是非常难的,所以我找到了跟好的的函数GetAsyncKeyState
构造
SHORT GetAsyncKeyState(int vKey);
vKey
:一个指定虚拟键的虚拟键码(后面看详细)- 通常是使用常量如
VK_UP
、VK_DOWN
等来表示不同的按键。 - 或者是一个
char
类型,例如:'A'
,'B'
- 通常是使用常量如
- 返回值是一个
SHORT
类型的值。如果该虚拟键当前处于按下状态,返回值的高位为 1;如果该虚拟键处于未按下状态,返回值的高位为 0。返回值的低位为 1,表示该键在调用GetAsyncKeyState
时曾经被按下。
示例
一个简单的示例可以是监测用户是否按下了“W”键:
#include <windows.h>
#include <stdio.h>
int main() {
while (1) {
if (GetAsyncKeyState(0x57) & 0x8000) { // 检测W键
printf("W key is pressed!\n");
}
Sleep(100); // 减少CPU使用率
}
return 0;
}
虚拟键码
GetAsyncKeyState
函数的第一个参数是vKey
,其值代表要检测的虚拟键码(Virtual Key Code)。虚拟键码是一个整数,用于标识键盘上的具体按键或鼠标按钮等输入设备的按键。这些虚拟键码是由Windows系统定义的,可以在Windows SDK的winuser.h
头文件中找到详细的列表。
以下是一些常见的虚拟键码示例及其含义:
常量名 | 对应按键 | 取值 |
---|---|---|
VK_LBUTTON | 鼠标左键 | 0x01 |
VK_RBUTTON | 鼠标右键 | 0x02 |
VK_CANCEL | Ctrl + Break | 0x03 |
VK_MBUTTON | 鼠标中键 | 0x04 |
VK_BACK | Backspace 键 | 0x08 |
VK_TAB | Tab 键 | 0x09 |
VK_RETURN | 回车键 | 0x0D |
VK_SHIFT | Shift 键 | 0x10 |
VK_CONTROL | Ctrl 键 | 0x11 |
VK_MENU | Alt 键 | 0x12 |
VK_PAUSE | Pause 键 | 0x13 |
VK_CAPITAL | Caps Lock 键 | 0x14 |
VK_ESCAPE | Esc 键 | 0x1B |
VK_SPACE | 空格键 | 0x20 |
VK_PRIOR | Page Up 键 | 0x21 |
VK_NEXT | Page Down 键 | 0x22 |
VK_END | End 键 | 0x23 |
VK_HOME | Home 键 | 0x24 |
VK_LEFT | 左箭头键 | 0x25 |
VK_UP | 上箭头键 | 0x26 |
VK_RIGHT | 右箭头键 | 0x27 |
VK_DOWN | 下箭头键 | 0x28 |
VK_SNAPSHOT | Print Screen 键 | 0x2C |
VK_Insert | Insert 键 | 0x2D |
VK_Delete | Delete 键 | 0x2E |
‘0’ – ‘9’ | 数字 0 - 9 | 0x30 - 0x39 |
‘A’ – ‘Z’ | 字母 A - Z | 0x41 - 0x5A |
VK_LWIN | 左WinKey(104键盘才有) | 0x5B |
VK_RWIN | 右WinKey(104键盘才有) | 0x5C |
VK_APPS | AppsKey(104键盘才有) | 0x5D |
VK_NUMPAD0 | 小键盘 0 键 | 0x60 |
VK_NUMPAD1 | 小键盘 1 键 | 0x61 |
VK_NUMPAD2 | 小键盘 2 键 | 0x62 |
VK_NUMPAD3 | 小键盘 3 键 | 0x63 |
VK_NUMPAD4 | 小键盘 4 键 | 0x64 |
VK_NUMPAD5 | 小键盘 5 键 | 0x65 |
VK_NUMPAD6 | 小键盘 6 键 | 0x66 |
VK_NUMPAD7 | 小键盘 7 键 | 0x67 |
VK_NUMPAD8 | 小键盘 8 键 | 0x68 |
VK_NUMPAD9 | 小键盘 9 键 | 0x69 |
VK_F1 - VK_F24 | 功能键F1 – F24 | 0x70 - 0x87 |
VK_NUMLOCK | Num Lock 键 | 0x90 |
VK_SCROLL | Scroll Lock 键 | 0x91 |