C# 使用C在Windows7中模拟鼠标点击和移动#

C# 使用C在Windows7中模拟鼠标点击和移动#,c#,.net,winforms,C#,.net,Winforms,我已经编写了一段代码来模拟鼠标点击,这在我的Vista中运行良好。但当我在Windows7中测试时,它并没有生成点击事件。能找个人帮忙吗?我在下面添加代码片段。 谢谢 尼基尔 我的水晶球说你不仅仅升级到Win7,你还得到了64位版本。以前您使用的是32位版本的Vista。您的鼠标事件()声明错误。最后一个参数是IntPtr,而不是int 球怎么样了?我的水晶球说你不仅升级到了Win7,还升级到了64位版本。以前您使用的是32位版本的Vista。您的鼠标事件()声明错误。最后一个参数是IntPtr

我已经编写了一段代码来模拟鼠标点击,这在我的Vista中运行良好。但当我在Windows7中测试时,它并没有生成点击事件。能找个人帮忙吗?我在下面添加代码片段。 谢谢 尼基尔


我的水晶球说你不仅仅升级到Win7,你还得到了64位版本。以前您使用的是32位版本的Vista。您的鼠标事件()声明错误。最后一个参数是IntPtr,而不是int


球怎么样了?

我的水晶球说你不仅升级到了Win7,还升级到了64位版本。以前您使用的是32位版本的Vista。您的鼠标事件()声明错误。最后一个参数是IntPtr,而不是int


球打得怎么样?

不确定这是否对你有帮助,但你看过UI自动化吗?

不确定这是否会对您有所帮助,但您是否研究过UI自动化?
一个对我有效的技巧是在
鼠标事件
调用之前使用相同的坐标。我还刚刚验证了以下各项是否有效(在winforms上):

publicstaticvoidleftclick(intx,inty)
{

Cursor.Position=new System.Drawing.Point(x,y);//在调用
mouse_事件之前,一个对我有效的技巧正在使用相同的坐标。我刚刚验证了以下方法是否有效(在winforms上):

publicstaticvoidleftclick(intx,inty)
{

Cursor.Position=新系统图点(x,y);//鼠标事件已被SendInput完全取代。如果更新为SendInput,您的代码是否有效?@Michael:HI能否请您提供一个在c#中使用send input的示例或链接?鼠标事件已被SendInput完全取代。如果更新为SendInput,您的代码是否有效?@Michael:HI能否请您提供一个示例或链接o在c#中使用send input?这很奇怪,他使用的完全相同的sig对我很有效:@ohadsc-pinvoke.net链接到处都是,同时使用IntPtr和int。你的声明只能在32位版本的Windows或Windows Mobile上使用。后者将其记录为int。这没关系,它永远不会有64位版本。也许有一个很好的原因,这个函数被弃用:)这个线程中的标记答案是惊人的错误。没有人能继续这样做,不管他们使用什么操作系统。也许他们传递了很多零。是的,我已经从32位移到了64位。我想这就是问题所在。你能告诉我如何为64位版本重写上面的一个吗。还有我已经检查了你提到的错误,但是我发现有两种方法可以帮我做,你能帮我吗?拍球,干得好。正如我说的,在调用中将dwextranfo参数的类型从int改为IntPtr.Pass IntPtr.Zero。这很奇怪,他使用的完全相同的信号对我很有效:@ohadsc-pinvoke.net链接到处都是,using IntPtr和int。您的声明只能在32位版本的Windows或Windows Mobile上工作。后者将其记录为int。这没关系,它永远不会有64位版本。可能有一个很好的原因使此函数被弃用:)该线程中的标记答案错误得惊人。没有人能理解它g、 不管他们使用什么操作系统。也许他们传递了很多零。是的,我已经从32位转移到64位。我想这就是问题所在。你能告诉我如何将上面的一个重写为64位版本吗。我也检查了你提到的错误,但我在这里找到了两种方法。你能帮忙吗?拍球,干得好。正如我所说的,将dwExtraInfo参数的类型从int更改为IntPtr.Pass IntPtr.Zero。
[DllImport("user32.dll")]
        static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);


[Flags]
        public enum MouseEventFlags
        {
            LEFTDOWN = 0x00000002,
            LEFTUP = 0x00000004,
            MIDDLEDOWN = 0x00000020,
            MIDDLEUP = 0x00000040,
            MOVE = 0x00000001,
            ABSOLUTE = 0x00008000,
            RIGHTDOWN = 0x00000008,
            RIGHTUP = 0x00000010
        }

System.Windows.Forms.Cursor.Hide();
System.Windows.Forms.Cursor.Position = new System.Drawing.Point(xinc + rct.Left, yinc + rct.Top);

int X = System.Windows.Forms.Cursor.Position.X;
int y = System.Windows.Forms.Cursor.Position.Y;

mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);


System.Windows.Forms.Cursor.Position = new System.Drawing.Point(0, 0);
System.Windows.Forms.Cursor.Show();
    public static void LeftClick(int x, int y)
    {
        Cursor.Position = new System.Drawing.Point(x, y); //<= fails without this
        mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
        mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
    }