11

我试图弄清楚 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 函数要么让我的计算机进入睡眠状态,要么至少关闭我的显示器,这肯定是一种不良影响!注释掉该行可以防止问题发生,但显然我需要它来执行任务。我究竟做错了什么?

4

1 回答 1

8

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;
}
于 2012-12-05T13:19:14.313 回答