2014-03-30 55 views
0

我正在寫一個應用程序,它接收來自讀取Wii Nunchuk的Arduino的數據。數據正在被正確接收和解析,但是當我使用MOUSEEVENTF_MOVE發送數據時,鼠標將只接收dx中的數據,而不是dy,意味着只有上下移動。我嘗試過使用靜態值(例如100)作爲dy,但仍然沒有成功。帶MOUSEEVENTF_MOVE的mouse_event無法在Y軸上移動

的DllImport代碼:

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _ 
Public Sub mouse_event(dwFlags As Long, dx As Long, dy As Long, dwData As Long, dwExtraInfo As Long) 
End Sub 

Private Const MOUSEEVENTF_MOVE As Integer = &H1 

代碼用於移動鼠標:

mouse_event(MOUSEEVENTF_MOVE, dx, dy, 0, 0) 

除非mouse_event子鋪了錯了,我不知道我做錯了。

+1

的mouse_event()函數WINAPI已經過時了*長*時間,由SendInput()取代。出於一個非常好的原因,mouse_event()被破壞了,因爲它沒有辦法告訴你函數失敗。與SendInput()不同,它返回* bool *。所以沒有辦法發現你的[DllImport]聲明是完全錯誤的,使用* Long *只適用於VB6。 http://pinvoke.net網站是一個體面的地方找到正確的。 –

+0

感謝漢斯,這絕對是我將爲未來的項目保留書籤的東西! :) – JohnHoulderUK

回答

1

從Microsoft約相對運動:

該系統適用兩個測試到指定的相對鼠標移動。如果沿x軸或y軸的指定距離大於第一個鼠標閾值,並且鼠標速度不爲零,則系統會將距離加倍。如果沿x軸或y軸的指定距離大於第二個鼠標閾值,並且鼠標速度等於2,則系統會將應用第一個閾值測試所產生的距離加倍。因此係統可以將指定的相對鼠標沿x或y軸的移動乘以四倍。

所以你最好使用

Cursor.Position() = New Point(X, Y) 

瓦爾特

+0

謝謝。這比沒有效果好 – JohnHoulderUK