我在下面使用这些代码,它们一直按住左右键,直到我自己按下这些键才松开它们。
我可以运行左键代码并继续按右键.. 它会一直按左键.. 直到我自己按下左键才会停止。
当我运行右键代码时,右键也会发生同样的事情,它一直按右我可以按左键,它仍然会一直按右键,直到我自己按右键。
我使用 SendInput 的原因是因为 keybd_event 不可靠.. 如果你不在 DOWN/UP 之间放置一个 Sleep(Milliseconds) 它甚至不会做任何事情,并且使用 Sleep() 会抛出这个程序的意图它必须尽可能快地点击它,按住键任何时间都可能导致错误的答案(这就像一个瞄准程序)
这个是用来敲右键的
INPUT ip[1];
ip[0].type = INPUT_KEYBOARD;
ip[0].ki.wScan = 0;
ip[0].ki.time = 0;
ip[0].ki.dwExtraInfo = 0;
ip[0].ki.wVk = VK_RIGHT;
ip[0].ki.dwFlags = 0;
ip[1].type = INPUT_KEYBOARD;
ip[1].ki.wScan = 0;
ip[1].ki.time = 0;
ip[1].ki.dwExtraInfo = 0;
ip[1].ki.wVk = VK_RIGHT;
ip[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(2, ip, sizeof(INPUT));
这个是用来敲左键的
INPUT ip[1];
ip[0].type = INPUT_KEYBOARD;
ip[0].ki.wScan = 0;
ip[0].ki.time = 0;
ip[0].ki.dwExtraInfo = 0;
ip[0].ki.wVk = VK_LEFT;
ip[0].ki.dwFlags = 0;
ip[1].type = INPUT_KEYBOARD;
ip[1].ki.wScan = 0;
ip[1].ki.time = 0;
ip[1].ki.dwExtraInfo = 0;
ip[1].ki.wVk = VK_LEFT;
ip[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(2, ip, sizeof(INPUT));
编辑:新代码看起来像这样,错误不喜欢这种风格。
INPUT ip[1] = {0};
ip[0].type = ip[1].type = INPUT_KEYBOARD;
ip[0].ki.wScan = ip[1].ki.wScan = 0;
ip[0].ki.time = ip[1].ki.time = 0;
ip[0].ki.dwExtraInfo = ip[1].ki.dwExtraInfo = 0;
ip[0].ki.wVk = ip[1].ki.wVk = VK_LEFT;
ip[0].ki.dwFlags = 0;
ip[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(2, ip, sizeof(INPUT));
再次编辑:(也不起作用)我试图欺骗它先发送 KEYUP。
int intRetValue = -1;
INPUT ip[2] = {0};
ip[0].type = INPUT_KEYBOARD;
ip[0].ki.wScan = 0;
ip[0].ki.time = 0;
ip[0].ki.dwExtraInfo = GetMessageExtraInfo();
ip[0].ki.wVk = VK_RIGHT;
ip[0].ki.dwFlags = KEYEVENTF_KEYUP;
ZeroMemory(&ip[1], sizeof(INPUT));
ip[1].type = INPUT_KEYBOARD;
ip[1].ki.wScan = 0;
ip[1].ki.time = 0;
ip[1].ki.dwExtraInfo = GetMessageExtraInfo();
ip[1].ki.wVk = VK_RIGHT;
ip[1].ki.dwFlags = 0;
ZeroMemory(&ip[2], sizeof(INPUT));
ip[2].type = INPUT_KEYBOARD;
ip[2].ki.wScan = 0;
ip[2].ki.time = 0;
ip[2].ki.dwExtraInfo = GetMessageExtraInfo();
ip[2].ki.wVk = VK_RIGHT;
ip[2].ki.dwFlags = KEYEVENTF_KEYUP;
intRetValue = SendInput(3, ip, sizeof(INPUT));
printf("retValue = %d\n", intRetValue);