c++ GetAsyncKeyState实时监看控制台事件


与ReadConsoleInput的区别

ReadConsoleInput是非常难的,所以我找到了跟好的的函数GetAsyncKeyState

构造

SHORT GetAsyncKeyState(int vKey);
  • vKey:一个指定虚拟键的虚拟键码(后面看详细)
    • 通常是使用常量如 VK_UPVK_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_CANCELCtrl + Break0x03
VK_MBUTTON鼠标中键0x04
VK_BACKBackspace 键0x08
VK_TABTab 键0x09
VK_RETURN回车键0x0D
VK_SHIFTShift 键0x10
VK_CONTROLCtrl 键0x11
VK_MENUAlt 键0x12
VK_PAUSEPause 键0x13
VK_CAPITALCaps Lock 键0x14
VK_ESCAPEEsc 键0x1B
VK_SPACE空格键0x20
VK_PRIORPage Up 键0x21
VK_NEXTPage Down 键0x22
VK_ENDEnd 键0x23
VK_HOMEHome 键0x24
VK_LEFT左箭头键0x25
VK_UP上箭头键0x26
VK_RIGHT右箭头键0x27
VK_DOWN下箭头键0x28
VK_SNAPSHOTPrint Screen 键0x2C
VK_InsertInsert 键0x2D
VK_DeleteDelete 键0x2E
‘0’ – ‘9’数字 0 - 90x30 - 0x39
‘A’ – ‘Z’字母 A - Z0x41 - 0x5A
VK_LWIN左WinKey(104键盘才有)0x5B
VK_RWIN右WinKey(104键盘才有)0x5C
VK_APPSAppsKey(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 – F240x70 - 0x87
VK_NUMLOCKNum Lock 键0x90
VK_SCROLLScroll Lock 键0x91
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值