C# c如何模拟鼠标输入?

C# c如何模拟鼠标输入?,c#,input,mouse,sendinput,C#,Input,Mouse,Sendinput,我试图制作一个程序,为鼠标编程一些功能,我试图模拟鼠标输入移动。目前我正在尝试使用SendInput: INPUT mouseMoveInput = new INPUT(); mouseMoveInput.type = SendInputEventType.InputMouse; mouseMoveInput.mkhi.mi.dx = ((x * 65536) / GetSystemMetrics(SystemMetric.SM_CXSCREEN)

我试图制作一个程序,为鼠标编程一些功能,我试图模拟鼠标输入移动。目前我正在尝试使用SendInput:

       INPUT mouseMoveInput = new INPUT();
        mouseMoveInput.type = SendInputEventType.InputMouse;
        mouseMoveInput.mkhi.mi.dx = ((x * 65536) / GetSystemMetrics(SystemMetric.SM_CXSCREEN) -1);
        mouseMoveInput.mkhi.mi.dy = ((y * 65536) / GetSystemMetrics(SystemMetric.SM_CYSCREEN) -1);
        mouseMoveInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_MOVE | MouseEventFlags.MOUSEEVENTF_VIRTUALDESK | MouseEventFlags.MOUSEEVENTF_ABSOLUTE;
        SendInput(1, ref mouseMoveInput, Marshal.SizeOf(new INPUT()));

问题是,对我来说,这不是模拟实际的输入,它只是移动鼠标。例如,在有360度鼠标移动的程序中,例如在3D游戏中,鼠标只会移动直到光标到达屏幕底部1920*1080。我试图弄清楚如何模拟和实际输入,比如鼠标软件在上面编程宏时所做的。在不创建自己的驱动程序的情况下,是否有可能做到这一点?感谢所有愿意帮忙的人!:D

我想这一行可能是你的问题:

mouseMoveInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_MOVE | MouseEventFlags.MOUSEEVENTF_VIRTUALDESK | MouseEventFlags.MOUSEEVENTF_ABSOLUTE;
通过删除VIRTUALDESK和ABSOLUTE标志,尝试使用相对鼠标运动

_ 从MSDN: 如果鼠标已移动(由MOUSEEVENTF_MOVE指示),则DX和dy指定有关该移动的信息。信息被指定为绝对或相对整数值

如果指定了MOUSEEVENTF_绝对值,则dx和dy包含0到65535之间的标准化绝对坐标。事件过程将这些坐标映射到显示曲面上。坐标0,0映射到显示曲面的左上角;坐标6553565535映射到右下角。在多监视器系统中,坐标映射到主监视器

如果指定了MOUSEEVENTF_VIRTUALDESK,则坐标将映射到整个虚拟桌面

如果未指定MOUSEEVENTF_绝对值,DX和dy将指定相对于上一个鼠标事件的移动,即最后报告的位置。正值表示鼠标向右或向下移动;负值表示鼠标向左或向上移动

相对鼠标运动受鼠标速度和两个鼠标阈值的影响。用户使用控制面板鼠标属性表的指针速度滑块设置这三个值。您可以使用SystemParametersInfo函数获取和设置这些值

系统对指定的鼠标相对移动应用两个测试。如果沿x轴或y轴的指定距离大于第一个鼠标阈值,且鼠标速度不为零,则系统会将距离加倍。如果沿x轴或y轴的指定距离大于第二个鼠标阈值,且鼠标速度等于2,则系统将使应用第一个阈值测试所产生的距离加倍。因此,系统可以将指定的鼠标沿x或y轴的相对移动乘以最多四倍