我正在嘗試幫助一位朋友為他的滑鼠設定一個宏,但我一直在為一個錯誤而苦苦掙扎。
但是當我使用:
if(GetAsyncKeyState(VK_XBUTTON2)){
keybd_event(VK_LCONTROL, 0xA2, 0x0001, 0);
Sleep(50);
keybd_event(VK_LCONTROL, 0xA2, 0x0002, 0);
Sleep(50); }
除非我單擊控制臺并再次按 ctrl,否則我的 ctrl 仍然保持不變。
uj5u.com熱心網友回復:
不要在代碼中使用幻數,這會使閱讀和理解變得更加困難。請改用命名常量。在這種情況下,KEYEVENTF_EXTENDEDKEY
和KEYEVENTF_KEYUP
。然后你會注意到你KEYEVENTF_EXTENDEDKEY
在釋放密鑰時沒有指定標志。使用|
(按位或)運算子組合標志。
另外,不要對掃描碼進行硬編碼,因為它可能在不同的機器上有所不同。改為使用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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/469998.html