#include $LIBRARY 'These were translated from an old AutoIt source FUNCTION MouseDown OPTIONAL(szButton AS STRING = "LEFT") LOCAL vEvent AS DWORD LOCAL sIsSwapped[4] AS CHAR IF (szButton[0] = 0 || StrCmpI(szButton, "LEFT") = 0) THEN vEvent = MOUSEEVENTF_LEFTDOWN ELSEIF (StrCmpI(szButton,"RIGHT") = 0) THEN vEvent = MOUSEEVENTF_RIGHTDOWN ELSEIF (StrCmpI(szButton,"MIDDLE") = 0) THEN vEvent = MOUSEEVENTF_MIDDLEDOWN ELSE IF (REGSTRING$(HKEY_CURRENT_USER, "Control Panel\Mouse", "SwapMouseButtons") = "1") THEN IF (StrCmpI(szButton,"MAIN")= 0 || StrCmpI(szButton, "PRIMARY")) THEN vEvent = MOUSEEVENTF_RIGHTDOWN ELSEIF (StrCmpI(szButton,"MAIN")= 0 || StrCmpI(szButton, "SECONDARY")) THEN vEvent = MOUSEEVENTF_LEFTDOWN ENDIF ELSE IF (StrCmpI(szButton,"MAIN")= 0 || StrCmpI(szButton, "PRIMARY")) THEN vEvent = MOUSEEVENTF_LEFTDOWN ELSEIF (StrCmpI(szButton,"MAIN")= 0 || StrCmpI(szButton, "SECONDARY")) THEN vEvent = MOUSEEVENTF_RIGHTDOWN ENDIF ENDIF ENDIF IF vEvent <> 0 THEN mouse_event(vEvent, 0, 0, 0, 0) FUNCTION = 1 ENDIF FUNCTION = 0 END FUNCTION FUNCTION MouseUp OPTIONAL(szButton AS STRING = "LEFT") LOCAL vEvent AS DWORD LOCAL sIsSwapped[4] AS CHAR IF (szButton[0] = 0 || StrCmpI(szButton, "LEFT") = 0) THEN vEvent = MOUSEEVENTF_LEFTUP ELSEIF (StrCmpI(szButton,"RIGHT") = 0) THEN vEvent = MOUSEEVENTF_RIGHTUP ELSEIF (StrCmpI(szButton,"MIDDLE") = 0) THEN vEvent = MOUSEEVENTF_MIDDLEUP ELSE IF (REGSTRING$(HKEY_CURRENT_USER, "Control Panel\Mouse", "SwapMouseButtons") = "1") THEN IF (StrCmpI(szButton,"MAIN")= 0 || StrCmpI(szButton, "PRIMARY")) THEN vEvent = MOUSEEVENTF_RIGHTUP ELSEIF (StrCmpI(szButton,"MAIN")= 0 || StrCmpI(szButton, "SECONDARY")) THEN vEvent = MOUSEEVENTF_LEFTUP ENDIF ELSE IF (StrCmpI(szButton,"MAIN")= 0 || StrCmpI(szButton, "PRIMARY")) THEN vEvent = MOUSEEVENTF_LEFTUP ELSEIF (StrCmpI(szButton,"MAIN")= 0 || StrCmpI(szButton, "SECONDARY")) THEN vEvent = MOUSEEVENTF_RIGHTUP ENDIF ENDIF ENDIF IF vEvent <> 0 THEN mouse_event(vEvent, 0, 0, 0, 0) FUNCTION = 1 ENDIF FUNCTION = 0 END FUNCTION FUNCTION MouseMove OPTIONAL(x, y, nSpeed = 5, nCoordMode = 0) MouseMoveExecute(x, y, nSpeed, nCoordMode) FUNCTION = 1 END FUNCTION 'nCoordMode: 0 = Active Window : 1 = Screen : 2 = Active Client FUNCTION MouseMoveExecute OPTIONAL(x, y, nSpeed, nCoordMode = 0) LOCAL ptCur AS POINT LOCAL ptOrigin AS POINT LOCAL rect AS RECT LOCAL xCur, yCur, delta LOCAL nMinSpeed nMinSpeed = 32 'Convert coords to screen/active window/client ConvertCoords(nCoordMode, &ptOrigin) x += ptOrigin.x y += ptOrigin.y 'Get size of desktop GetWindowRect(GetDesktopWindow(), &rect) 'Convert our coords to mouse_event coords x = ((65535 * x) / (rect.right-1)) + 1 y = ((65535 * y) / (rect.bottom-1)) + 1 'Are we slowly moving or insta-moving? IF (nSpeed = 0) THEN mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0) SLEEP(5) FUNCTION = 1 ENDIF 'Sanity check for speed IF (nSpeed < 0 || nSpeed > 100) THEN nSpeed = 5 'Default speed 5 'So, it's a more gradual speed that is needed :) GetCursorPos(&ptCur) xCur = ((ptCur.x * 65535) / (rect.right-1)) + 1 yCur = ((ptCur.y * 65535) / (rect.bottom-1)) + 1 WHILE (xCur <> x || yCur <> y) IF (xCur < x) THEN delta = (x - xCur) / nSpeed IF (delta = 0 || delta < nMinSpeed) THEN delta = nMinSpeed IF ((xCur + delta) > x) THEN xCur = x ELSE xCur += delta ENDIF ELSE IF (xCur > x) THEN delta = (xCur - x) / nSpeed IF (delta = 0 || delta < nMinSpeed) THEN delta = nMinSpeed IF ((xCur - delta) < x) THEN xCur = x ELSE xCur -= delta ENDIF ENDIF ENDIF IF (yCur < y) THEN delta = (y - yCur) / nSpeed IF (delta = 0 || delta < nMinSpeed) THEN delta = nMinSpeed IF ((yCur + delta) > y) THEN yCur = y ELSE yCur += delta ENDIF ENDIF ELSE IF (yCur > y) THEN delta = (yCur - y) / nSpeed IF (delta = 0 || delta < nMinSpeed) THEN delta = nMinSpeed IF ((yCur + delta) > y) THEN yCur = y ELSE yCur += delta ENDIF ENDIF ENDIF mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, xCur, yCur, 0, 0) SLEEP(nSpeed) WEND FUNCTION = 1 END FUNCTION 'HAVE TO PASS A POINT FOR X AND Y (NO ARRAY) FUNCTION MouseGetPos OPTIONAL(BYREF pt AS POINT, nCoordMode = 0) LOCAL ptOrigin AS POINT GetCursorPos(&pt) 'Convert coords to screen/active window/client ConvertCoords(nCoordMode, &ptOrigin) pt.x += ptOrigin.x pt.y += ptOrigin.y FUNCTION = 1 END FUNCTION FUNCTION MouseClick OPTIONAL(szButton$ = "PRIMARY", nX = -1, nY = -1, nClicks = 1, nSpeed = 0) IF nX < -1 || nY < -1 THEN FUNCTION = 0 IF nX > -1 || nY > -1 THEN MouseMoveExecute(nX, nY, nSpeed) FOR INTEGER i = 1 TO nClicks IF MouseDown(szButton) = 0 THEN FUNCTION = 0 IF MouseUp(szButton) = 0 THEN FUNCTION = 0 NEXT FUNCTION = 1 END FUNCTION FUNCTION MouseClickDrag OPTIONAL(szButton$, nX1, nY1, nX2, nY2, nSpeed = 2) IF nSpeed < 2 THEN nSpeed = 2 MouseMoveExecute(nX1, nY1, nSpeed) IF MouseDown(szButton) = 0 THEN FUNCTION = 0 MouseMoveExecute(nX2, nY2, nSpeed) IF MouseUp(szButton) = 0 THEN FUNCTION = 0 FUNCTION = 1 END FUNCTION FUNCTION MouseWheel(szDirection AS STRING) IF StrCmpI(szDirection, "UP") = 0 THEN mouse_event(MOUSEEVENTF_WHEEL, 0, 0, +120, 0) ELSEIF StrCmpI(szDirection, "DOWN") = 0 THEN mouse_event(MOUSEEVENTF_WHEEL, 0, 0, (DWORD)-120, 0) ELSE FUNCTION = 0 ENDIF FUNCTION = 1 END FUNCTION FUNCTION ConvertCoords(nCoordMode,BYREF pt AS POINT) AS VOID LOCAL hFore AS HWND hFore = GetForegroundWindow() LOCAL rect AS RECT IF (nCoordMode = 1) THEN GetWindowRect(hFore, &rect) pt.x = rect.left pt.y = rect.top ELSEIF (nCoordMode = 2) THEN pt.x = 0 pt.y = 0 ClientToScreen(hFore, &pt) ELSE 'Screen mode pt.x = 0 pt.y = 0 ENDIF END FUNCTION