#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Icon256-32.ico
#AutoIt3Wrapper_Outfile=MouseMove.exe
#AutoIt3Wrapper_Res_Comment=2017 (c) Bernhard Linz
#AutoIt3Wrapper_Res_Description=MouseMove.exe
#AutoIt3Wrapper_Res_Fileversion=1.0.0.7
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Timers.au3>
AutoItSetOption("MustDeclareVars",1)
Global $a_OriginalMousePosition = MouseGetPos()
Global $i_Movespeed = 5
Global $i_PixelToMove = 200

; Prüft ob die Maus sich auf einer unerwarteten Koordinate befindet. Wenn ja wird das Programm beendet
Func _CheckUnexpectedMouseMove($a_ExpectedMousePositionX, $a_ExpectedMousePositionY)
	Local $a_CurrentMousePosition = MouseGetPos()
	If $a_ExpectedMousePositionX <> $a_CurrentMousePosition[0] Or $a_ExpectedMousePositionY <> $a_CurrentMousePosition[1] Then
		Exit 1
	EndIf
EndFunc

; Prüfen ob uns Parameter zu Zeigergschwindigkeit per Commandline übergeben wurden
If $CmdLine[0] > 0 Then
	$i_Movespeed = Round($CmdLine[1],0)
EndIf
If $i_Movespeed > 100 Then
	$i_Movespeed = 100
EndIf
If $i_Movespeed < 0 Then
	$i_Movespeed = 0
EndIf

; Wenn die Geschwindigkeit mit 0 übergeben wird bewegen wir den Mauszeiger "unsichtar"
If $i_Movespeed = 0 Then
	MouseMove($a_OriginalMousePosition[0] + 1, $a_OriginalMousePosition[1] + 1, 0)
	MouseMove($a_OriginalMousePosition[0], $a_OriginalMousePosition[1], 0)
	Exit 0
EndIf

; Ok, wir sind bis hierher gekommen, also schön Sichtbar den Mauszeiger spazieren fahren:
For $i = 0 To $i_PixelToMove Step 1
	; 1. Mauszeiger um einen Pixel bewegen
	MouseMove($a_OriginalMousePosition[0], $a_OriginalMousePosition[1] + $i, 0)
	; 2. kurze Pause damit der Benutzer Zeit hat die Maus zu bewegen - und der Zeiger sich langsam bewegt
	Sleep($i_Movespeed)
	; 3. prüfen ob der Zeiger noch dort ist wo er sein sollte
	_CheckUnexpectedMouseMove($a_OriginalMousePosition[0], $a_OriginalMousePosition[1] + $i)
Next
For $i = 0 To $i_PixelToMove Step 1
	MouseMove($a_OriginalMousePosition[0] + $i, $a_OriginalMousePosition[1] + $i_PixelToMove, 0)
	Sleep($i_Movespeed)
	_CheckUnexpectedMouseMove($a_OriginalMousePosition[0] + $i, $a_OriginalMousePosition[1] + $i_PixelToMove)
Next
For $i = $i_PixelToMove To 0 Step -1
	MouseMove($a_OriginalMousePosition[0] + $i_PixelToMove, $a_OriginalMousePosition[1] + $i, 0)
	Sleep($i_Movespeed)
	_CheckUnexpectedMouseMove($a_OriginalMousePosition[0] + $i_PixelToMove, $a_OriginalMousePosition[1] + $i)
Next
For $i = $i_PixelToMove To 0 Step -1
	MouseMove($a_OriginalMousePosition[0] + $i, $a_OriginalMousePosition[1], 0)
	Sleep($i_Movespeed)
	_CheckUnexpectedMouseMove($a_OriginalMousePosition[0] + $i, $a_OriginalMousePosition[1])
Next
MouseMove($a_OriginalMousePosition[0], $a_OriginalMousePosition[1], 0)
Exit 0