Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用带sendInput的鼠标_C_Winapi - Fatal编程技术网

在C中使用带sendInput的鼠标

在C中使用带sendInput的鼠标,c,winapi,C,Winapi,我想使用C语言中的windows API以编程方式移动和单击鼠标。我在google上下搜索过,没有找到任何纯C语言的sendInput教程。我只能找到C#/C++。我对windows API几乎没有经验,我希望有一个涵盖sendInput的很棒的教程!谢谢

我想使用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