2010-11-17 190 views
4

我正在將鼠標單擊發送到屏幕上的特定位置,而不會影響鼠標光標的位置。發送鼠標單擊特定位置而不移動鼠標

我已經沖刷,並試圖用mouse_event一切在陽光下(這是應該這樣做)

mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0); 

然而這最終只發​​送鼠標點擊到哪裏鼠標的位置。所以我最終不得不移動鼠標才能使它工作。

Cursor.Position = new Point(X, Y); 

任何人都有任何想法,我可以做到這一點,而不必移動鼠標?我也嘗試下面的代碼塊,但沒有成功,因爲它仍然只是點擊鼠標光標位置被真正地扔我一個循環,我估計這會工作...提前

 Cursor.Position = new Point(X, Y); 
     mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0); 
     Cursor.Position = new Point(oldX, oldY); 

謝謝任何幫助!

回答

0

您可能將鼠標單擊到錯誤的位置。如文檔here中所述,mouse_event以mickeys中的X和Y值取值。

嘗試用東西將你的位置是這樣的:

private static Point ScreenLocationToMickeyLocation(Point mouseLocation) 
{ 
    Rectangle virtualScreen = SystemInformation.VirtualScreen; 

    return new Point(
     ((mouseLocation.X - virtualScreen.X) * 65535)/virtualScreen.Width, 
     ((mouseLocation.Y - virtualScreen.Y) * 65535)/virtualScreen.Height); 
} 
+0

這會不會幫我點擊不移動鼠標??? – Jet 2013-07-31 09:49:31

1

您不包括MOUSEEVENTF_MOVE標誌,所以光標不會移動。

我會建議做3個不同的調用(移動,向下,向上),同時做所有事情都是如此。但可能會奏效,如果你真的想削減這個問題,那就試試吧。順便說一句,SendInput是SDK建議您使用的。

0

您可能想要嘗試捕獲鼠標的當前位置,將鼠標移動到您希望它點擊的位置,單擊該位置,然後讓鼠標移回。如果這樣做足夠快,看起來像鼠標沒有移動。

+0

您是否有示例代碼來演示如何快速移動鼠標 - 甚至可以使用臨時隱藏的鼠標指針? – surfmuggle 2012-11-05 11:27:03

+0

這不起作用,因爲使用win API的'點擊'有一定的延遲,不要指望這種方法。永遠。 – Stavm 2015-05-30 17:01:40

0

的Visual Basic 2015年社區申報

進口System.Runtime.InteropServices

<Flags()> 
Public Enum MouseEventFlags As UInteger 
    MOUSEEVENTF_ABSOLUTE = &H8000 
    MOUSEEVENTF_LEFTDOWN = &H2 
    MOUSEEVENTF_LEFTUP = &H4 
    MOUSEEVENTF_MIDDLEDOWN = &H20 
    MOUSEEVENTF_MIDDLEUP = &H40 
    MOUSEEVENTF_MOVE = &H1 
    MOUSEEVENTF_RIGHTDOWN = &H8 
    MOUSEEVENTF_RIGHTUP = &H10 
    MOUSEEVENTF_XDOWN = &H80 
    MOUSEEVENTF_XUP = &H100 
    MOUSEEVENTF_WHEEL = &H800 
    MOUSEEVENTF_HWHEEL = &H1000 
End Enum 

Dim pntapi As POINTAPI 
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (ByRef lpPoint As POINTAPI) As Integer 
Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal X As Integer, ByVal Y As Integer) As Integer 
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal dwData As Integer, ByVal dwExtraInfo As Integer)