在游戏开发或编些程序的时候,有时会需要监听键盘,来完成某一项操作,
最常用的就是 getch()
和 GetAsyncKeyState()
,
getch()
有一定的输入延迟,跟输入文本一样的机制,但它只能返回最后按下的键;
GetAsyncKeyState()
无延迟,可以单独获取某一按键的状态;
但GetAsyncKeyState()
有个问题:
GetAsyncKeyState()
是全盘监听,即使它在窗口后端,也会监听。
想想,你写个文档、输个密码,发现游戏角色在跟着移动,就很恐怖,
所以可以加一个当前窗口是否在最前端的判断,代码如下:
头文件
#include<windows.h>
函数
bool window_up(){
return GetConsoleWindow()==GetForegroundWindow();
}//GetConsoleWindow()当前窗口句柄,GetForegroundWindow()最前面的窗口句柄
然后就能快快乐乐的在后面加个&&window_up()
就行了
例如:
if((GetAsyncKeyState(0x41)&0x8000)&&window_up()){//按下了a键
……
}
(不要问哪来的,问就是AI,找的资料都不靠谱,要么给一半不给了,要么太复杂还用不了)