我正在试图弄清楚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功能要么让我的电脑进入睡眠状态,要么至少关闭我的显示器,这当然是一种不必要的效果!评论该行可以防止问题发生,但显然我需要它来执行任务。我究竟做错了什么?
答案 0 :(得分:8)
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;
}