我想知道我是否做錯了什么,或者這是否是 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 上開發。
uj5u.com熱心網友回復:
我無法使用以下修改后的代碼重現它。
#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 時,會生成以下快照。

uj5u.com熱心網友回復:
我找到了導致這種行為的原因 - 它與鍵盤布局有關。該錯誤發生在波蘭程式員的布局上,切換到 EN-US 布局后,它作業正常。好吧,我仍然需要解決這個問題,但為此我將創建一個單獨的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383677.html
下一篇:C#靜音其他應用程式
