Hier mal dein Script leicht abgeänder und ich sehe das wie Mojo bzgl. beenden (Änderungen: Siehe Kommentare):
AutoIt
Opt('MustDeclareVars', 1)
#include <wd_helper.au3>
#include <wd_capabilities.au3>
#include <Date.au3>
;Hotkey eingebaut zum beenden des Programms, da aktuell keine Bedingung zum Beenden vorhanden ist.
HotKeySet("{ESC}", "beenden")
;Unbenötigte Variablen entfernt, anstatt auf 0 oder 1 zu prüfen, true und false genutzt, endtime als Name irreführend, daher umbenannt
Global $oSession, $iclick = False
Global Const $specialtime = '22:08:00', $itime_1 = '06', $itime_2 = '10', $itime_adl = 1800000
start() ;Auch wenn bei 30min warten unwahrscheinlich ist das PRobleme auftreten, sollte der WD gestartet werden bevor "Adlib_ansage" durch Adlibregister ausgfeührt werden könnte. Daher Reihenfolge getauscht
AdlibRegister('Adlib_ansage', $itime_adl)
While 1 ;die Prüfung auf $end machte keinen Sinn, die Funktion beenden() einfach dort aufrufen wo sie benötigt wird (aktuell nicht genutzt)
Sleep(50) ;einfach um die prozessorlast unten zu halten.
If not $iclick Then
If _NowTime() = $specialtime Then
Uhr_ansagen()
Sleep(10000);es dauert etwas bis die Ansage anläuft deshalb hier nochmal schlafen.
; Exitloop
ElseIf StringSplit(_NowTime(), ':')[2] = $itime_1 And StringSplit(_NowTime(), ':')[3] = '00' Then
Uhr_ansagen()
ConsoleWrite('ANSAGE : ' & _NowTime() & 'Uhr ELSEIF ! 1!' & @CRLF)
ElseIf StringSplit(_NowTime(), ':')[2] = $itime_2 And StringSplit(_NowTime(), ':')[3] = '00' Then
Uhr_ansagen()
ConsoleWrite('ANSAGE : ' & _NowTime() & 'Uhr ELSEIF ! 2!' & @CRLF)
EndIf
ElseIf $iclick Then
Sleep(1000) ;Schlaf ca. 1sec
$iclick = False
EndIf
WEnd
beenden()
;Variablen umsortiert (Deklarationen mittem im Code sind unschön) und eine Lokal gesetzt da außerhalb nicht genutzt
Func start()
Local Const $sLocalFilePath = @ScriptDir & '\talk.html'
Local Const $sLocalFileURL = "file:///" & StringReplace($sLocalFilePath, "\", "/")
Local $capsi = SetupEdge()
$oSession = _WD_CreateSession($capsi)
_WD_Navigate($oSession, $sLocalFileURL)
Uhr_ansagen()
ConsoleWrite('ANSAGE : ' & _NowTime() & 'Uhr PER START!!!!' & @CRLF)
EndFunc ;==>start
Func Adlib_ansage()
Uhr_ansagen()
ConsoleWrite('ANSAGE : ' & _NowTime() & 'Uhr PER ADLIB!!!!' & @CRLF)
EndFunc ;==>Adlib_ansage
Func Uhr_ansagen()
Local $element = _WD_FindElement($oSession, 'xpath', '//*[@id="clockID"]')
_WD_ElementAction($oSession, $element, 'Click')
$iclick = True
EndFunc ;==>Uhr_ansagen
Func beenden()
_WD_DeleteSession($oSession)
_WD_Shutdown()
ConsoleWrite('Script wurde Erfolgreich beendet.' & @CRLF)
Exit
EndFunc ;==>beenden
;Variablen umsortiert (Deklarationen mittem im Code sind unschön) und eine entfernt, da direkt über Return zurück gegeben werden kann
Func SetupEdge()
Local $hWnd
_WD_UpdateDriver("msedge", @ScriptDir)
_WD_Option('Driver', @ScriptDir & '\msedgedriver.exe')
_WD_Option('Port', 9515)
_WD_Startup()
; Startparameter sammeln
_WD_CapabilitiesStartup()
_WD_CapabilitiesAdd('alwaysMatch', 'msedge')
_WD_CapabilitiesAdd('excludeSwitches', 'enable-automation')
_WD_CapabilitiesAdd('args', 'guest')
_WD_CapabilitiesDump(@ScriptLineNumber)
_WD_CapabilitiesAdd('args', '--headless')
$hWnd = WinWait("[CLASS:ConsoleWindowClass]", "", 10)
WinSetState($hWnd, "", @SW_HIDE)
Return _WD_CapabilitiesGet()
EndFunc ;==>SetupEdge
Alles anzeigen