在C中使用带sendInput的鼠标
我想使用C语言中的windows API以编程方式移动和单击鼠标。我在google上下搜索过,没有找到任何纯C语言的sendInput教程。我只能找到C#/C++。我对windows API几乎没有经验,我希望有一个涵盖sendInput的很棒的教程!谢谢与C++代码几乎相同,Hans Passant是正确的。以下是我最终得到的结果:在C中使用带sendInput的鼠标,c,winapi,C,Winapi,我想使用C语言中的windows API以编程方式移动和单击鼠标。我在google上下搜索过,没有找到任何纯C语言的sendInput教程。我只能找到C#/C++。我对windows API几乎没有经验,我希望有一个涵盖sendInput的很棒的教程!谢谢
INPUT input;
input.type = INPUT_MOUSE;
input.mi.mouseData = 0;
input.mi.dx = x * (65536 / GetSystemMetrics(SM_CXSCREEN)); //x being coord in pixels
input.mi.dy = y * (65536 / GetSystemMetrics(SM_CYSCREEN)); //y being coord in pixels
input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(input));
C++版本是合适的,这是不同的,因为Winapi是C的。你应该把它作为答案,这样我就可以把你标记为正确的!你可以接受你的回答,我认为汉斯不需要代表!需要注意的一件非常重要的事情是,您应该强制65536浮动,否则您的屏幕大小转换将关闭几个像素。65536.0f以获得更高的精度。@Error454您知道为什么dx和dy的绝对运动必须采用这种奇怪的格式吗?另一方面,相对移动需要dx和dy成为纯像素计数。@mini-me正是微软决定的方式。左上角的坐标系是(0,0),右下角的坐标系是(6553565535)。我们没有在代码中设置它(因此它是一个随机数),这导致显示器进入睡眠状态,因为显然随机数看起来像“这个鼠标事件是很久以前的事了”,所以从那以后就没有活动了,所以是时候进入睡眠状态了。@Error454,只要你钳制输入x,y坐标为sane值以避免整数溢出,乘以65536(AKA