Hallo zusammen,
so langsam bastele ich mich durch mein/meinen Schüler-Menü / Startbildschirm / "Pseudo Desktop" ...
Da sind noch einige Dinge zu optimieren, aber was mich gerade am meisten interessiert ist die Reaktionsgeschwindigkeit.
Bislang hatte ich in eine Switch-Geschichte 2 GUIGetMsg() abzuarbeiten.
(Firfox starten / Programm beenden)
Das ging soweit ganz gut.
Jetzt habe ich das auf (vorwiegend) auf eine For-Schleife umgestellt, da ich die anzuzeigenden Programm-Icons mit GUICtrlCreatePic() aus einer INI-Datei hole.
Nun ist es auf einmal so, dass die Programme nicht beim ersten Mausklick starten.
Auch der Beenden-Button muss manchmal mehrfach gedrückt werden.
Dabei habe ich gerade erst 2 Programme in der INI definiert. (Es sollen nicht mehr als 6 - MAX 12 werden ...)
Wieso ist diese Vorgehensweis so langsam?
Ich habe hier mal nur die While-Schleife hinkopiert.
Aus der Funktion, die die INI ausliest kommen:
$aProgName[] - Da stehen die Programmnamen / Fensternamen drin
$aProgPicID[] - wird von GUICtrlCreatePic() übergeben
$aProgPath[] - halt der Pfadname+Programmname
Opt('WINTITLEMATCHMODE', 2) ;==> Fuzzysuche bei Programmnamen für Fenster für WinExists() und WinActivate()
While 1
If GUIGetMsg() = $bEnd Then
Exit; ==> Bleibt in der Form noch drin, bis alles funktioniert
EndIf
For $i = 1 TO UBound($aProgPicID)-1 ;==> ich arbeite mit _arrayAdd() und kann [0] nicht füllen - bin ich zu doof für
If GUIGetMsg() = $aProgPicID[$i] Then ;==> In der INI stehen aktuell nur 2 Programme - Schleife muss max 2x durch ...
If WinExists($aProgName[$i]) = 0 Then
WinSetOnTop($hGui, '', 0)
ShellExecute($aProgPath[$i])
ExitLoop
Else
WinActivate($aProgName[$i]) ;==> aktiviert aber nur die letzte aktive Instanz ...
ExitLoop
EndIf
EndIf
Next
WEnd