Code:
#include <windows.h> #include <tchar.h> #include <iostream> BOOL flag = TRUE; DWORD WINAPI ThreadProc2(LPVOID lpParameter) { INPUT input[2]; ZeroMemory(&input, sizeof(input)); input[0].ki.wVk = input[1].ki.wVk = 0x45; input[0].type = input[1].type = INPUT_KEYBOARD; while (true) { if (GetAsyncKeyState(VK_NUMPAD0) & 0x8000) { flag = TRUE; SetForegroundWindow(HWND(0x00060A3E)); //HWND is used for testing input[1].ki.dwFlags = 0; input[0].ki.dwFlags = KEYEVENTF_KEYUP; SendInput(2, input, sizeof(INPUT)); Sleep(500); while (flag) { input[1].ki.dwFlags = 0; input[0].ki.dwFlags = KEYEVENTF_KEYUP; SendInput(2, input, sizeof(INPUT)); Sleep(10); } } } } DWORD WINAPI ThreadProc1(LPVOID lpParameter) { while (true) { if (GetAsyncKeyState(VK_NUMPAD0) & 0x8000) { Sleep(2000); flag = FALSE; } else if (GetAsyncKeyState(VK_END) & 0x8000) { exit(1); } } } int main() { DWORD tid1 = 0; DWORD tid2 = 0; HANDLE hThread1 = CreateThread(NULL, 0, ThreadProc1, NULL, 0, &tid1); HANDLE hThread2 = CreateThread(NULL, 0, ThreadProc2, NULL, 0, &tid2); getchar(); return 0; }
使用了两个线程,一个用于重复发送SendInput,一个用于计时