C++ 用GetAsyncKeyState() 获取所有按键码

本文介绍了一种将虚拟键码表存储为数组的方法,并通过C++实现了一个简单的程序来读取并显示按下键的键码及其对应的键名。程序利用Windows API获取按键状态,适用于Windows平台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无聊地把整张虚拟键码表放进一个数组^_^

#include <iostream>
#include <iomanip>
#include <windows.h>
#include <array>
using namespace std;

void gotoXY(short x, short y)
{
    COORD position = {x, y};
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hConsole, position);
}

array<string,256> VKCode={
"",
/*001-*/"LBUTTON","RBUTTON","CANCEL","MBUTTON","XBUTTON1","XBUTTON2","","BACK","TAB","",
/*011-*/"","CLEAR","RETURN","","","SHIFT","CONTROL","MENU","PAUSE","CAPITAL",
/*021-*/"","","","","","","ESCAPE","","","",
/*031-*/"","SPACE","PRIOR","NEXT","END","HOME","LEFT","UP","RIGHT","DOWN",
/*041-*/"SELECT","PRINT","EXECUTE","SNAPSHOT","INSERT","DELETE","HELP","0","1","2",
/*051-*/"3","4","5","6","7","8","9","","","",
/*061-*/"","","","","A","B","C","D","E","F",
/*071-*/"G","H","I","J","K","L","M","N","O","P",
/*081-*/"Q","R","S","T","U","V","W","X","Y","Z",
/*091-*/"LWIN","RWIN","APPS","","SLEEP",
/*096-*/"NUMPAD0","NUMPAD1","NUMPAD2","NUMPAD3","NUMPAD4",
/*101-*/"NUMPAD5","NUMPAD6","NUMPAD7","NUMPAD8","NUMPAD9",
/*106-*/"MULTIPLY","ADD","SEPARATOR","SUBTRACT","DECIMAL",
/*111-*/"DIVIDE","F1","F2","F3","F4","F5","F6","F7","F8","F9",
/*121-*/"F10","F11","F12","F13","F14","F15","F16","F17","F18","F19",
/*131-*/"F20","F21","F22","F23","F24","","","","","",
/*141-*/"","","","NUMLOCK","SCROLL","","","","","",
/*151-*/"","","","","","","","","","LSHIFT",
/*161-*/"RSHIFT","LCONTROL","RCONTROL","LMENU","RMENU",
/*166-*/"BROWSER_BACK","BROWSER_FORWARD","BROWSER_REFRESH","BROWSER_STOP","BROWSER_SEARCH",
/*171-*/"BROWSER_FAVORITES","BROWSER_HOME","VOLUME_MUTE","VOLUME_DOWN","VOLUME_UP",
/*176-*/"MEDIA_NEXT_TRACK","MEDIA_PREV_TRACK","MEDIA_STOP","MEDIA_PLAY_PAUSE","LAUNCH_MAIL",
/*181-*/"LAUNCH_MEDIA_SELECT","LAUNCH_APP1","LAUNCH_APP2","","",
/*186-*/"OEM_1","OEM_PLUS","OEM_COMMA","OEM_MINUS","OEM_PERIOD",
/*191-*/"OEM_2","OEM_3","","","","","","","","",
/*201-*/"","","","","","","","","","",
/*211-*/"","","","","","","","","OEM_4","OEM_5",
/*221-*/"OEM_6","OEM_7","OEM_8",
/*
186【;:】VK_OEM_1
187【=+】VK_OEM_PLUS
188【,<】VK_OEM_COMMA
189【-_】VK_OEM_MINUS
190【.>】VK_OEM_PERIOD
191【/?】VK_OEM_2
192【`~】VK_OEM_3
219【[{】VK_OEM_4
220【\|】VK_OEM_5
221【]}】VK_OEM_6
222【'"】VK_OEM_7
空值为未定义值或非标准键盘的Key 
*/
};

int main()
{
	gotoXY(15,8);
	cout<<"请按键:"; 
	while(1){
		for (int i=1;i<=255;i++){
    		if (GetAsyncKeyState(i)&1){
    			gotoXY(24,8);
        		cout<<"\t\t\t\t\b\b\b\b"<<dec<<i<<"(10)"<<hex<<i<<"(16):VK_"<<VKCode.at(i);
    		}
		}
	}

	return 0; 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hann Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值