Удерживая windows.h SendInput () c ++

Я пытаюсь создать очень простой скрипт, который удерживает клавиши нажатыми в течение x раз, имитируя вход реального человека. Однако, используя sendInput, я не могу удерживать клавишу нажатой, и что «aaaaaaa» напечатано на ноутбуке, а не «a», кто-то знает, как заставить клавишу оставаться нажатой, пока не будет отправлено событие KEYEVENTF_KEYUP?

спасибо, с уважением.


#include <windows.h>
#include <iostream>

using namespace std;

// 0x57 w
// 0x20 space
// 0x41 a

int main()
{
    INPUT input;
    input.type = INPUT_KEYBOARD;
    int x;

    while (1)
    {
        x = rand() % 3;
        switch (x)
        {
        case 0:
            input.ki.wVk = 0x41;
            break;
        case 1:
            input.ki.wVk = 0x20;
            break;
        case 2:
            input.ki.wVk = 0x57;               
        }

        HWND hwnd = FindWindowA("NotePAD", 0);
        HWND hwnd2 = GetForegroundWindow();

        if (hwnd)
            SetForegroundWindow(hwnd);
        else
            std::cout << "no se encuentra el programa!\n";

        //boton hacia abajo
        input.ki.dwFlags = 0;
        SendInput(1, &input, sizeof(INPUT));
        Sleep((double)rand() / (RAND_MAX + 1) *3000);

        //boton hacia arriba
        input.ki.dwFlags = KEYEVENTF_KEYUP;
        SendInput(1, &input, sizeof(INPUT));

        //volvemos a nuestra pantalla y esperamos un tiempo
        SetForegroundWindow(hwnd2);
        Sleep((double)rand() / (RAND_MAX + 1) * 10000); 
    }
1
задан 30.11.2019, 12:54
1 ответ

Поддерживать нажатые клавиши - одна caracterГ-stica драйвера клавиатуры, не Windows , меня dirГ, - в который mГЎs выполнимый состоит в том, чтобы использовать это один timer.

Например:

MSG msg;

SetTimer(NULL,
         0,
         300,
         (TIMERPROC)&keypress);
while(GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

Она funciГіn keypress - что-то вроде следующее:

void CALLBACK keypress(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime)
{
}
1
ответ дан 01.12.2019, 10:33

Теги

Похожие вопросы