Hallo,
in den letzten Wochen versuche ich, etwas mit AutoIt warm zu werden (Danke übrigens für die deutsche Hilfe-Datei).
Jetzt möchte ich mal mein erstes größeres Script vorstellen, welches auch etwas Sinn macht.
Ultra-Mega-Giga Hörtest
- Dieser Hörtest ersetzt keinen Arztbesuch! Es ist aber möglich zu prüfen, wer aus dem Bekanntenkreis besser hören kann.
- Um vergleichbare Ergebnisse zu erzielen, sollte immer die selbe Lautstärke und der gleiche Computer verwendet werden.
- Für den Test sind Kopfhörer, mit einer möglichst leisen Soundeinstellung, empfohlen.
- Mit dem Knopf "Test starten" beginnt der Hörtest und es dauert ca. 15 Minuten.
- Nacheinander werden langsam ansteigende Töne abgespielt. Drücke die "Leertaste", sobald du einen Ton wahrnimmst.
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <ListviewConstants.au3>
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$GUI = GUICreate("Ultra-Mega-Giga Hörtest", 800, 250)
$LabTitel = GUICtrlCreateLabel("Ultra-Mega-Giga Hörtest", 220, 5, 790, 40)
GUICtrlSetFont($LabTitel, 25)
GUICtrlCreatePic(@ScriptDir & "\Data\UltraMegaGigaHoertestLogo.jpg", 32, 45, 100, 100)
$LabTon = GUICtrlCreateLabel('Frequenz: 0 von 34', 35, 150, 100, 20)
$LabBeschreibung1 = GUICtrlCreateLabel('- Dieser Hörtest ersetzt keinen Arztbesuch! Es ist aber möglich zu prüfen, wer aus dem Bekanntenkreis besser hören kann.', 170, 60, 790, 20)
$LabBeschreibung2 = GUICtrlCreateLabel('- Um vergleichbare Ergebnisse zu erzielen, sollte immer die selbe Lautstärke und der gleiche Computer verwendet werden.', 170, 75, 790, 20)
$LabBeschreibung3 = GUICtrlCreateLabel('- Für den Test sind Kopfhörer, mit einer möglichst leisen Soundeinstellung, empfohlen.', 170, 90, 790, 20)
$LabBeschreibung4 = GUICtrlCreateLabel('- Mit dem Knopf "Test starten" beginnt der Hörtest und es dauert ca. 15 Minuten.', 170, 110, 790, 20)
$LabBeschreibung5 = GUICtrlCreateLabel('- Nacheinander werden langsam ansteigende Töne abgespielt. Drücke die "Leertaste", sobald du einen Ton wahrnimmst.', 170, 125, 790, 20)
$LabBeschreibung6 = GUICtrlCreateLabel('- Gib vor dem Start deinen Namen ein, damit die Hörwerte für einen späteren Vergleich gespeichert werden können.', 170, 140, 790, 20)
$LabName = GUICtrlCreateLabel('Name:', 280, 170, 35, 20)
$InpName = GUICtrlCreateInput("", 320, 167, 200)
$ButStart = GUICtrlCreateButton("Test starten", 10, 200, 780, 40)
GUICtrlSetState($InpName, $GUI_FOCUS)
GUICtrlSetOnEvent($ButStart, "START")
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE",$GUI)
$GUI2 = GUICreate("Name's Hörwerte:", 400, 505, -1, -1, -1, -1, $GUI)
$GUI2List = GUICtrlCreateListView("Frequenz (Hz):|Zeit (Sekunden):", 0, 0, 240, 505, -1, BitOr($LVS_EX_FULLROWSELECT,$LVS_EX_GRIDLINES))
$LabStatistik = GUICtrlCreateLabel("Statistik:", 250, 5, 150)
GUICtrlSetFont($LabStatistik, 10, 600)
GUICtrlCreateLabel("Linkes Ohr:", 250, 30, 150)
$LabStatistikLinks = GUICtrlCreateLabel("0", 250, 45, 150)
GUICtrlCreateLabel("Rechtes Ohr:", 250, 65, 150)
$LabStatistikRechts = GUICtrlCreateLabel("0", 250, 80, 150)
GUICtrlCreateLabel("Gesammt:", 250, 100, 150)
$LabStatistikGesammt = GUICtrlCreateLabel("0", 250, 115, 150)
GUICtrlCreateLabel("Auswertung:", 250, 140, 150)
$LabStatistikProz = GUICtrlCreateLabel("Dein linkes Ohr ist 00% schlechter als dein Rechtes", 250, 155, 150, 100)
GUISwitch($GUI)
GUISetState(@SW_SHOW, $GUI)
Global $Timer, $Timeout, $Timeout2, $Date, $Started, $Fortsetzen, $Random, $ZufallsFrequenz, $BenutzteFrequenzen, $Name, $StatistikLinks, $StatistikRechts, $StatistikGesammt, $Date, $TXTName, $SchummelTimer = 1, $FrequenzCounter, $FrequenzenZeiten[34], $GUI2ListItems[34]
Global $Frequenzen[34] = ["50L","50R","100L","100R","150L","150R","300L","300R","500L","500R","700L","700R","1000L","1000R","2000L","2000R","3000L","3000R","5000L","5000R","7000L","7000R","9000L","9000R","10000L","10000R","11000L","11000R","12000L","12000R","13000L","13000R","14000L","14000R"]
While 1
Sleep(1000)
WEnd
Func START()
[/autoit] [autoit][/autoit] [autoit]$Started = 1
[/autoit] [autoit][/autoit] [autoit]$Name = GUICtrlRead($InpName)
If $Name = "" Then
MsgBox(48,"Fehler!","Bitte einen Namen eintragen.")
Return
EndIf
$Date = @YEAR & "-" & @MON & "-" & @MDAY & " # " & @HOUR & "-" & @MIN
$TXTName = @ScriptDir & "/" & $Name & " # " & $Date & ".txt"
GUICtrlSetState($InpName, $GUI_DISABLE)
GUICtrlSetState($ButStart, $GUI_DISABLE)
GUICtrlSetData($ButStart, "Hörtest wurde gestartet...")
HOERTEST()
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit]Func HOERTEST()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]$Fortsetzen = 0
$SchummelTimer = TimerInit() ;~ prüft ob jemand schummelt und absichtlich zu früh drückt
$Random = Random(0, 33, 1) ;~ wählt eine zufällige frequenz
$ZufallsFrequenz = $Frequenzen[$Random]
If StringInStr($BenutzteFrequenzen, '"' & $ZufallsFrequenz & '"') = 0 Then ;~ prüft ob die frequenz schon abgespielt wurde.
$BenutzteFrequenzen &= '"' & $ZufallsFrequenz & '",'
$FrequenzCounter += 1
ElseIf StringInStr($BenutzteFrequenzen, '"' & $ZufallsFrequenz & '"') > 0 Then
ContinueLoop
EndIf
GUICtrlSetData($LabTon, "Frequenz: " & $FrequenzCounter & " von 34")
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{SPACE}", "TONERKANNT")
Sleep(Random(5000,20000)) ;~ zufällige wartezeit für den schummeltimer
$SchummelTimer = 0
$Timer = TimerInit()
$Timeout = TimerInit()
SoundPlay(@ScriptDir & "\Data\" & $ZufallsFrequenz & ".mp3")
While 1
If $Started = 0 Then ;~ beendet die offene funktion
Return
ElseIf $Fortsetzen = 1 Then ;~ führt die schleife fort
HotKeySet("{SPACE}")
SoundPlay("")
$Fortsetzen = 0
ContinueLoop 2
ElseIf TimerDiff($Timeout) > 180000 Then ;~ frequenz wurde seit 3 minuten nicht erkannt
$Timeout2 = 1
TONERKANNT()
EndIf
Sleep(10)
WEnd
WEnd
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func TONERKANNT()
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{SPACE}")
SoundPlay("")
$Fortsetzen = 1
If $SchummelTimer <> 0 Then ;~ es wurde vor der frequenz gedrückt.. evtl. absichtlich geschummelt
GUICtrlSetData($LabTon, "Bitte warten...")
$FrequenzenZeiten[$Random] = "vorzeitig gedrückt (+180)"
ElseIf $Timeout2 = 1 Then ;~ frequenz wurde seit 3 minuten nicht erkannt
$Timeout2 = 0
$FrequenzenZeiten[$Random] = "Zeit abgelaufen (+180)"
Else
$GemesseneZeit = Round((TimerDiff($Timer) / 1000), 3)
$FrequenzenZeiten[$Random] = $GemesseneZeit
EndIf
If $FrequenzCounter = 34 Then ;~ alle 34 frequenzen wurden abgespielt
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($LabTon, "Frequenz: " & $FrequenzCounter & " von 34")
[/autoit] [autoit][/autoit] [autoit]$Started = 0
$FrequenzCounter = 0
$BenutzteFrequenzen = 0
$StatistikLinks = 0
$StatistikRechts = 0
$StatistikGesammt = 0
GUICtrlSetState($InpName, $GUI_ENABLE)
GUICtrlSetState($ButStart, $GUI_ENABLE)
GUICtrlSetData($ButStart, "Test starten")
HotKeySet("{SPACE}")
$TXTFile = FileOpen($TXTName, 1) ;~ speichert die hörwerte für einen späteren vergleich
If $TXTFile = -1 Then
MsgBox(48, "Fehler!", "Die Hörtwerte können nicht gespeichert werden.")
Else
For $i = 0 To 33
FileWrite($TXTFile, $Frequenzen[$i] & " Hz: " & $FrequenzenZeiten[$i] & " Sekunden" & @CRLF)
Next
FileClose($TXTFile)
EndIf
For $i = 0 To 33 Step 2 ;~ addiert die zeiten
If $FrequenzenZeiten[$i] = "Zeit abgelaufen (+180)" Or $FrequenzenZeiten[$i] = "vorzeitig gedrückt (+180)" Then
$StatistikLinks += 180
Else
$StatistikLinks += $FrequenzenZeiten[$i]
EndIf
Next
For $i = 1 To 33 Step 2
If $FrequenzenZeiten[$i] = "Zeit abgelaufen (+180)" Or $FrequenzenZeiten[$i] = "vorzeitig gedrückt (+180)" Then
$StatistikRechts += 180
Else
$StatistikRechts += $FrequenzenZeiten[$i]
EndIf
Next
$StatistikGesammt = $StatistikLinks + $StatistikRechts
GUICtrlSetData($LabStatistikLinks, $StatistikLinks & " Sekunden")
GUICtrlSetData($LabStatistikRechts, $StatistikRechts & " Sekunden")
GUICtrlSetData($LabStatistikGesammt, $StatistikGesammt & " Sekunden")
If $StatistikLinks > $StatistikRechts Then ;~ berechnet prozent und das schlechtere ohr
$StatistikLinksProz = $StatistikRechts / ($StatistikLinks / 100) ;~ rechtes ohr schlechter als linkes
;~ $StatistikRechtsProz = $StatistikLinks / ($StatistikRechts / 100) ;~ linkes ohr besser als rechtes
GUICtrlSetData($LabStatistikProz, "Dein linkes Ohr ist " & Round($StatistikLinksProz, 2) & "% schlechter als dein Rechtes.")
ElseIf $StatistikRechts > $StatistikLinks Then
$StatistikRechtsProz = $StatistikLinks / ($StatistikRechts / 100) ;~ linkes ohr schlechter als rechtes
;~ $StatistikLinksProz = $StatistikRechts / ($StatistikLinks / 100) ;~ rechtes ohr besser als linkes
GUICtrlSetData($LabStatistikProz, "Dein rechtes Ohr ist " & Round($StatistikRechtsProz, 2) & "% schlechter als dein Linkes.")
Else ;~ $StatistikLinks = $StatistikRechts
GUICtrlSetData($LabStatistikProz, 'Dein beiden Ohren sind gleich gut oder "gleich schlecht" ;-)')
EndIf
For $i = 0 To 33 ;~ erneuert die listview-tabelle
GUICtrlDelete($GUI2ListItems[$i])
$GUI2ListItems[$i] = GUICtrlCreateListViewItem($Frequenzen[$i] & "|" & $FrequenzenZeiten[$i], $GUI2List)
Next
GUISwitch($GUI2)
WinSetTitle($GUI2, "", $Name & "'s Hörwerte:")
GUISetState(@SW_SHOW, $GUI2)
Opt('GUIOnEventMode', 0)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE, $GUI2)
GUISwitch($GUI)
Opt('GUIOnEventMode', 1)
Return
EndSwitch
Sleep(10)
WEnd
EndIf
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit]Func CLOSE()
Exit
EndFunc
Hier ist noch der komplette Download, mit den MP3-Files:
Download: UltraMegaGigaHoertest.zip (250 MB)