我试图找出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函数要么使计算机进入休眠状态,要么至少关闭显示器,这肯定是不希望的!注释掉该行可以防止发生此问题,但是显然我需要它来执行任务。我究竟做错了什么?

最佳答案

MOUSEINPUT结构包含三个您不需要初始化的成员-dymouseDatatime。由于文档中没有提及默认值,因此我假设程序可以自由地使用所需的任何垃圾来填充这些成员。您应该显式设置值以避免这种情况。

#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;
}

10-04 13:18