不要使用
magic numbers
在你的代码中,这会使阅读和理解变得更加困难。改用命名常量。在这种情况下,
KEYEVENTF_EXTENDEDKEY
和
KEYEVENTF_KEYUP
。然后您会注意到您没有指定
KEYEVENTF_扩展键
释放钥匙时标记。使用
|
(按位或)运算符来组合标志。
此外,不要硬编码扫描代码,因为它可能在不同的机器上有所不同。使用
MapVirtualKey()
相反
试试这个:
const BYTE scanCode = MapVirtualKey(VK_LCONTROL, MAPVK_VK_TO_VSC);
...
if (GetAsyncKeyState(VK_XBUTTON2)){
keybd_event(VK_LCONTROL, scanCode, KEYEVENTF_EXTENDEDKEY, 0);
Sleep(50);
keybd_event(VK_LCONTROL, scanCode, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
Sleep(50);
}
也就是说,
keybd_event()
已弃用,请使用
SendInput()
相反:
INPUT input = {};
input.type = INPUT_KEYBOARD;
input.ki.wVk = VK_LCONTROL;
input.ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
...
if (GetAsyncKeyState(VK_XBUTTON2)){
input.ki.dwFlags &= ~KEYEVENTF_KEYUP;
SendInput(1, &input, sizeof(INPUT));
Sleep(50);
input.ki.dwFlags |= KEYEVENTF_KEYUP;
SendInput(1, &input, sizeof(INPUT));
Sleep(50);
}