#include <Misc.au3>
#include <Array.au3>
#include <WinApi.au3>
Global Const $SM_SWAPBUTTON = 23

$left=_WinAPI_GetSystemMetrics($SM_SWAPBUTTON)+1

Dim $pos[2],$lastlooppressed=False,$npos,$timer,$timeout=5000
While Not _IsPressed("1B")
	If _IsPressed($left) Then
		If $lastlooppressed=False Then
			$lastlooppressed=True
			$npos=MouseGetPos()
			$pos[0]=$npos[0]
			$pos[1]=$npos[1]
			$timer=TimerInit()
		Else
			If TimerDiff($timer)>$timeout Then
				$lastlooppressed=False
				ReDim $pos[2]
				MouseUp("primary")
			Else
				$npos=MouseGetPos()
				_ArrayAdd($pos,$npos[0])
				_ArrayAdd($pos,$npos[1])
			EndIf
		EndIf
	Else
		If $lastlooppressed=True Then
			$lastlooppressed=False
			$gesture=_FindGesture($pos)
			ReDim $pos[2]
			MsgBox(0,"","Gesture: "&$gesture)
		EndIf
	EndIf
	Sleep(10)
WEnd


Func _FindGesture($pos)
	Local $px=@DesktopWidth*0.1 ;10%
	Local $py=@DesktopHeight*0.1 ;10%
	If Abs($pos[0]-$pos[UBound($pos)-2])<$px And Abs($pos[1]-$pos[UBound($pos)-1])<$py Then Return "no"
	Local $richtungen[4]=[True,True,True,True],$richtungenstr[4]=["up","right","down","left"]
	Local $x

	Local $last[2]=[$pos[0],$pos[1]] ;up
	For $x=2 To UBound($pos)-1 Step 2
		If $pos[$x+1]>$last[1] Or $pos[$x]>$pos[0]+$px Or $pos[$x]<$pos[0]-$px Then
			$richtungen[0]=False
			ExitLoop
		EndIf
		$last[0]=$pos[$x]
		$last[1]=$pos[$x+1]
	Next
	Local $last[2]=[$pos[0],$pos[1]] ;right
	For $x=2 To UBound($pos)-1 Step 2
		If $pos[$x]<$last[0] Or $pos[$x+1]>$pos[1]+$py Or $pos[$x+1]<$pos[1]-$py Then
			$richtungen[1]=False
			ExitLoop
		EndIf
		$last[0]=$pos[$x]
		$last[1]=$pos[$x+1]
	Next
	Local $last[2]=[$pos[0],$pos[1]] ;down
	For $x=2 To UBound($pos)-1 Step 2
		If $pos[$x+1]<$last[1] Or $pos[$x]>$pos[0]+$px Or $pos[$x]<$pos[0]-$px Then
			$richtungen[2]=False
			ExitLoop
		EndIf
		$last[0]=$pos[$x]
		$last[1]=$pos[$x+1]
	Next
	Local $last[2]=[$pos[0],$pos[1]] ;left
	For $x=2 To UBound($pos)-1 Step 2
		If $pos[$x]>$last[0] Or $pos[$x+1]>$pos[1]+$py Or $pos[$x+1]<$pos[1]-$py Then
			$richtungen[3]=False
			ExitLoop
		EndIf
		$last[0]=$pos[$x]
		$last[1]=$pos[$x+1]
	Next

	For $x=0 To 3
		If $richtungen[$x] Then Return $richtungenstr[$x]
	Next
	Return "no"
EndFunc



