使用C#在Windows 7中模拟鼠标单击和鼠标移动

时间:2011-01-10 19:16:38

标签: c# .net winforms

我已经编写了一段代码来模拟鼠标点击,这在我的Vista中运行良好。但是当我在Windows 7中测试它时,它没有生成click事件。有人可以帮忙吗?我正在添加下面的代码段。 谢谢, Nikil

[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();

3 个答案:

答案 0 :(得分:9)

我的水晶球说你不只是升级到Win7,你也得到了64位版本。以前你有32位版本的Vista。你的mouse_event()声明是错误的。最后一个参数是IntPtr,而不是int。

球怎么做?

答案 1 :(得分:0)

不确定这是否会对您有所帮助,但您是否看过UI自动化? link text

答案 2 :(得分:0)

对我有用的技巧是在mouse_event调用之前使用SetCursorPos和相同的坐标。我还刚刚验证了以下工作(在winforms上):

    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);
    }