#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$iDeskDiag = IniRead("Data.ini", "Const", "DeskDiagInch", "Error")
If $iDeskDiag = "Error" Then
    $iDeskDiag = InputBox("Bildschirmdiagonale", "Länge der Bildschirmdiagonale in Zoll: ", "17")
	If StringReplace($iDeskDiag, " ", "") = "" Then Exit
	IniWrite("Data.ini", "Const", "DeskDiagInch", $iDeskDiag)
EndIf

$PPI = Sqrt(@DesktopWidth ^ 2 + @DesktopHeight ^ 2) / $iDeskDiag
$PPCm = Sqrt(@DesktopWidth ^ 2 + @DesktopHeight ^ 2) / ($iDeskDiag * 2.54)

$hWnd = GUICreate("MouseMeter", 165, 275)
$Label1 = GUICtrlCreateLabel("Zurückgelegte Strecke:", 10, 10, 155)
GUICtrlSetFont($Label1, 10)
$Label2 = GUICtrlCreateLabel("Zentimeter:", 10, 40)
$Label3 = GUICtrlCreateLabel("0", 10, 55, 70)
$Label4 = GUICtrlCreateLabel("Meter:", 10, 75)
$Label5 = GUICtrlCreateLabel("0", 10, 90, 70)
$Label6 = GUICtrlCreateLabel("Inch:", 10, 110)
$Label7 = GUICtrlCreateLabel("0", 10, 125, 70)
$Label8 = GUICtrlCreateLabel("Pixel:", 10, 145)
$Label9 = GUICtrlCreateLabel("0", 10, 160, 70)
$Label10 = GUICtrlCreateLabel("Geschwindigkeit:", 10, 180, 155)
GUICtrlSetFont($Label10, 10)
$Label11 = GUICtrlCreateLabel("Meter/Sekunde:", 10, 205)
$Label12 = GUICtrlCreateLabel("0", 10, 220, 70)
$Label13 = GUICtrlCreateLabel("Meter/Sekunde (Durchschnitt):", 10, 235)
$Label14 = GUICtrlCreateLabel("0", 10, 250, 70)
$Reset = GUICtrlCreateButton("Zurücksetzen", 90, 75, 70, 25)
$Exit = GUICtrlCreateButton("Beenden", 90, 105, 70, 25)
GUISetState()

$aPosOld = MouseGetPos()
$iDistance = 0

$iTime = TimerInit()
AdlibRegister("_Update", 30)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE, $Exit
			Exit
		Case $Reset
			$iTime = TimerInit()
			$iDistance = 0
			_Update()
	EndSwitch
WEnd

Func _Update()
	$iTime2 = TimerInit()
	$aPosNew = MouseGetPos()
	$iDiff = _GetPointsDistance($aPosOld[0], $aPosOld[1], $aPosNew[0], $aPosNew[1])
	$iDistance += $iDiff
	GUICtrlSetData($Label3, Floor($iDistance / $PPCm))
	GUICtrlSetData($Label5, Round($iDistance / $PPCm / 100, 2))
	GUICtrlSetData($Label7, Round($iDistance / $PPI, 1))
	GUICtrlSetData($Label9, Floor($iDistance))
	GUICtrlSetData($Label12, Floor(($iDiff / $PPCm / 100) / (TimerDiff($iTime2) / 1000)))
	GUICtrlSetData($Label14, Round(($iDistance / $PPCm / 100) / (TimerDiff($iTime) / 1000), 2))
	$aPosOld[0] = $aPosNew[0]
	$aPosOld[1] = $aPosNew[1]
EndFunc   ;==>_Update

Func _GetPointsDistance($iPointX1, $iPointY1, $iPointX2, $iPointY2)
	Return Sqrt(($iPointX1 - $iPointX2) ^ 2 + ($iPointY1 - $iPointY2) ^ 2)
EndFunc   ;==>_GetPointsDistance
