2011-01-10 65 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); 
    }