GetAsyncKeyState() returns 按住右 alt 时 VK_LCONTROL 参数的错误值
GetAsyncKeyState() returns wrong value for VK_LCONTROL parameter when right alt is held down
我想知道我是否做错了什么,或者这是一个 Windows 错误。这是我的代码:
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
bool quit = false;
while (!quit)
{
bool rightAltMod = GetAsyncKeyState(VK_RMENU);
bool leftControlMod = GetAsyncKeyState(VK_LCONTROL);
//press and hold right alt to see the bug
cout << "rAlt pressed " << rightAltMod << ", lCtrl pressed " << leftControlMod << "\n";
quit = GetAsyncKeyState(VK_ESCAPE);
}
return 0;
}
错误(?)是当我按住 Right-Alt 时,GetAsyncKeyState()
也将其检测为 Left-Ctrl.
如果这是一个错误,是否有任何解决方法?
除了使用汇编程序直接访问键盘缓冲区外,我没有其他想法。
我正在 Windows 10 x64 21H1 上开发。
我无法使用以下修改后的代码重现它。
#include <iostream>
#include <bitset>
#include <Windows.h>
using namespace std;
int main()
{
bool quit = false;
while (!quit)
{
SHORT rightAltMod = GetAsyncKeyState(VK_RMENU);
SHORT leftControlMod = GetAsyncKeyState(VK_LCONTROL);
//press and hold right alt to see the bug
if (rightAltMod != 0)
{
std::bitset<16> y(rightAltMod);
cout << "rAlt pressed " << y;
}
if (leftControlMod != 0)
{
std::bitset<16> z(leftControlMod);
cout << "lCtrl pressed " << z;
}
if (rightAltMod || leftControlMod)
{
cout << "\n";
}
quit = GetAsyncKeyState(VK_ESCAPE);
}
return 0;
}
并且当我按住 Right-Alt 时,会生成以下快照。
我找到了导致该行为的原因 - 它与键盘布局有关。该错误发生在波兰程序员布局上,切换到 EN-US 布局后它工作正常。
好吧,我仍然需要解决这个问题,但为此我会创建一个单独的问题。
我想知道我是否做错了什么,或者这是一个 Windows 错误。这是我的代码:
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
bool quit = false;
while (!quit)
{
bool rightAltMod = GetAsyncKeyState(VK_RMENU);
bool leftControlMod = GetAsyncKeyState(VK_LCONTROL);
//press and hold right alt to see the bug
cout << "rAlt pressed " << rightAltMod << ", lCtrl pressed " << leftControlMod << "\n";
quit = GetAsyncKeyState(VK_ESCAPE);
}
return 0;
}
错误(?)是当我按住 Right-Alt 时,GetAsyncKeyState()
也将其检测为 Left-Ctrl.
如果这是一个错误,是否有任何解决方法?
除了使用汇编程序直接访问键盘缓冲区外,我没有其他想法。
我正在 Windows 10 x64 21H1 上开发。
我无法使用以下修改后的代码重现它。
#include <iostream>
#include <bitset>
#include <Windows.h>
using namespace std;
int main()
{
bool quit = false;
while (!quit)
{
SHORT rightAltMod = GetAsyncKeyState(VK_RMENU);
SHORT leftControlMod = GetAsyncKeyState(VK_LCONTROL);
//press and hold right alt to see the bug
if (rightAltMod != 0)
{
std::bitset<16> y(rightAltMod);
cout << "rAlt pressed " << y;
}
if (leftControlMod != 0)
{
std::bitset<16> z(leftControlMod);
cout << "lCtrl pressed " << z;
}
if (rightAltMod || leftControlMod)
{
cout << "\n";
}
quit = GetAsyncKeyState(VK_ESCAPE);
}
return 0;
}
并且当我按住 Right-Alt 时,会生成以下快照。
我找到了导致该行为的原因 - 它与键盘布局有关。该错误发生在波兰程序员布局上,切换到 EN-US 布局后它工作正常。 好吧,我仍然需要解决这个问题,但为此我会创建一个单独的问题。