SendInput переводит систему в режим сна

Я пытаюсь выяснить правильное использование функции SendInput, чтобы я мог напрямую манипулировать курсором на экране, поэтому для базового теста, чтобы увидеть, как все работает, я сделал этот короткий фрагмент, который должен перемещать курсор 10 пикселей вправо. Теоретически.

#include <windows.h>
#include <winable.h>

int main()
{
    INPUT joyInput;
    joyInput.type = INPUT_MOUSE;
    joyInput.mi.dx = 10;
    joyInput.mi.dwFlags = MOUSEEVENTF_MOVE;
    SendInput(1, &joyInput, sizeof(INPUT));
    return 0;
}

Однако на практике функция SendInput либо заставляет мой компьютер спать, либо, по крайней мере, отключает мои мониторы, что, безусловно, является нежелательным эффектом! Комментируя эту строку, эта проблема предотвращает возникновение проблемы, но, очевидно, мне это нужно для выполнения задачи. Что я делаю не так?

Ответ 1

Структура MOUSEINPUT содержит три члена, которые вы не инициализируете - dy, mouseData и time. Поскольку в документации не указаны значения по умолчанию, я предполагаю, что программа может бесплатно заполнить эти элементы любым нежелательным файлом, который он хочет. Вы должны явно установить значения, чтобы избежать этого.

#include <windows.h>
#include <winable.h>

int main()
{
    INPUT joyInput;
    joyInput.type = INPUT_MOUSE;
    joyInput.mi.dx = 10;
    joyInput.mi.dwFlags = MOUSEEVENTF_MOVE;

    joyInput.mi.dy = 0;
    joyInput.mi.mouseData = 0;
    joyInput.mi.time = 0;

    SendInput(1, &joyInput, sizeof(INPUT));
    return 0;
}