根据microsoft's documentation,GetAsyncKeyState()据说是
确定在调用函数时键是向上还是向下
我一直在构建一个UI自动化库,问题归结为此
#include <Windows.h>
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
bool IsKeydownAsync(int key) {
return GetAsyncKeyState(key) & 0x8000;
}
int main(){
while (1) {
if (IsKeydownAsync('A')) {
cout << "triggered" << endl;
}
this_thread::sleep_for(chrono::milliseconds(10));
}
}
所以我的理解是,无论我的应用程序是否处于焦点状态都无关紧要,GetAsyncKeyState()应始终返回物理键在被调用时是向上还是向下。
我已经在各种应用程序中对此进行了测试,并且大多数时候它的行为与描述的一样。但是,在某些游戏中,此行为会中断,并且不再报告该键是启用还是关闭。
。当密钥被保持时,cout << "triggered" << endl
不会被调用。
有什么我忽略的吗?
答案 0 :(得分:1)
自从我使用Windows中的本机输入以来已经有一段时间了,但根据经验,Windows API函数仅报告使用同步Windows API功能报告的关键状态,也就是说正常的应用程序消息/事件输入。
一些较旧的游戏使用以前版本的DirectX以及捕获输入的其他方式,例如使用自Windows 8.1 / 10以来已弃用的名为XInput(2)的库。虽然支持polling和events / msgs,但使用DirectX线程捕获输入,并且与Windows API相比,处理完全不同。其主要原因是操作系统试图满足所有制造商的需求,而DirectX API并没有具体解决输入问题。