Почему мой второй sendinput на самом деле не отправляет ввод? - PullRequest
0 голосов
/ 04 мая 2020

Таким образом, проблема связана со строкой 46, sendinput клавиатуры в операторе if, cout будет выполняться в операторе if, однако sendinput никогда не работает. Клавиатура sendinput будет работать сама по себе, как и мышь sendinput, и обе будут работать в этой программе, если их положение поменяется местами, т.е. клавиатура sendinput активируется каждую 1 секунду, пока мышь sendinput каждые 10, однако они не будут работать в указанном порядке.

#include <Windows.h>
#include <iostream>
#include <thread>
#include <chrono>

bool on = true;
//numpad1 for off
void onoff() {
    if (GetAsyncKeyState(VK_NUMPAD1)) {

            on = !on;

    }
}
int main() {

    INPUT keyB;
    keyB.type = INPUT_KEYBOARD;
    keyB.ki.wVk = VK_F1;
    keyB.ki.dwFlags = 0;
    keyB.ki.time = 0;
    keyB.ki.wScan = 0;
    keyB.ki.dwExtraInfo = 0;

    INPUT input;
    input.type = INPUT_MOUSE;
    input.mi.dx = 0;
    input.mi.dy = 0;
    input.mi.dwFlags = (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP);
    input.mi.mouseData = 0;
    input.mi.dwExtraInfo = NULL;
    input.mi.time = 0;

    std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();

    while (1) {
        if (on) {
            SendInput(1, &input, sizeof(INPUT));
              std::cout << "ON";

              std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();

            if (std::chrono::duration_cast<std::chrono::seconds>(end - begin).count() >= 10) {
                SendInput(1, &keyB, sizeof(INPUT));
                std::cout << "f1";
                begin = std::chrono::steady_clock::now();
            }
            Sleep(1000);
            onoff();
        }
        else {

            std::cout << "OFF";
            Sleep(1000);
            onoff();
            begin = std::chrono::steady_clock::now();
        }
    }
}

edit: согласно предложению в комментариях, возвращаемое значение SendInput равно 1, а GetLastError() возвращает 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...