Ctrl 仍然按下 keyb_event()
Ctrl still pressed with keyb_event()
我正试图帮助一个朋友为他的鼠标创建一个宏,但我一直在为一个错误而苦苦挣扎。
但是当我使用 :
if(GetAsyncKeyState(VK_XBUTTON2)){
keybd_event(VK_LCONTROL, 0xA2, 0x0001, 0);
Sleep(50);
keybd_event(VK_LCONTROL, 0xA2, 0x0002, 0);
Sleep(50); }
除非我在我的控制台中单击并再次按下 ctrl,否则我的 ctrl 仍然保持不变。
不要在您的代码中使用 magic numbers,这会增加阅读和理解的难度。请改用命名常量。在这种情况下,KEYEVENTF_EXTENDEDKEY
和 KEYEVENTF_KEYUP
。然后你会注意到你在释放密钥时没有指定 KEYEVENTF_EXTENDEDKEY
标志。使用 |
(按位或)运算符组合标志。
另外,不要hard-code扫描代码,因为它可能在不同的机器上有所不同。请改用 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);
}
我正试图帮助一个朋友为他的鼠标创建一个宏,但我一直在为一个错误而苦苦挣扎。
但是当我使用 :
if(GetAsyncKeyState(VK_XBUTTON2)){
keybd_event(VK_LCONTROL, 0xA2, 0x0001, 0);
Sleep(50);
keybd_event(VK_LCONTROL, 0xA2, 0x0002, 0);
Sleep(50); }
除非我在我的控制台中单击并再次按下 ctrl,否则我的 ctrl 仍然保持不变。
不要在您的代码中使用 magic numbers,这会增加阅读和理解的难度。请改用命名常量。在这种情况下,KEYEVENTF_EXTENDEDKEY
和 KEYEVENTF_KEYUP
。然后你会注意到你在释放密钥时没有指定 KEYEVENTF_EXTENDEDKEY
标志。使用 |
(按位或)运算符组合标志。
另外,不要hard-code扫描代码,因为它可能在不同的机器上有所不同。请改用 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);
}