2011-01-10 100 views
1

我已经写了一段代码来模拟鼠标点击,这在我的Vista中工作正常。但是,当我在Windows 7中测试它不会生成单击事件。有人可以帮忙吗?我正在添加下面的代码片段。 谢谢, Nikil模拟鼠标单击和鼠标移动在Windows 7中使用C#

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

mouse_event已被SendInput完全取代。如果更新到SendInput,您的代码是否工作? – Michael 2011-01-10 19:29:40

+0

@Michael:你能否提供一个例子或链接来使用C#中的发送输入? – Nikil 2011-01-10 22:10:08

回答

9

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

球是怎么做的?

0

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

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