Таким образом, проблема связана со строкой 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