supi freut mich
du kannst dein Thema oben als erledigt markieren.
supi freut mich
du kannst dein Thema oben als erledigt markieren.
Da hast du recht und darauf habe ich selber nicht geprüft bzw. weiter Gedanken zu gemacht , sondern nur einzelne Stellen in dem Script von Raleigh bearbeitet (#16). Ich würde den adlib Part auch raus lassen!
Ich würde den adlib Part auch raus lassen!
stört der den ?
Da Webdriver läuft sollte es doch kein Problem sein weil dieser ja eine eigene schleife hat und nur befehle von autoit annimmt, sollte es deswegen auch nicht zu Problemen kommen oder?
Oder sehe ich das komplett falsch ?
Wenn ich falsch liege, was könnten den für Probleme auftreten ?
Im schlimmsten Fall wird die Ansage doppelt getriggert (die Schleife läuft auf den Wert + Adlib hat seine 30min. erreicht), aber generell ist es eine "Dopplung" und macht das adlib eigentlich unnötig. Teste doch mal was passeirt wenn du es auskommentierst ob es noch so läuft wie erwartet.
Moombas oke da hast du schon recht, ich hatte es ja getestet und muss sagen wenn er nur 1x mal zu viel clickt fängt er das erste garnicht anzusagen aber das zweite.
Nur als er beim testen mal sehr oft (geklickt hat) wurde Garnichts mehr angesagt. Und das war auch der Grund für $iclick = 0 in deinem Beispiel mit False.
Deswegen hätte man das auch leicht in der Funktion Adlib_ansage abfangen können.
Es gibt bzgl. $iClick keinen Unterschied zwischen deiner und meiner Variante.
Nur das du fest auf 0 oder eins geschaut hast und exakt darauf prüfen musst, ich dies aber durch false und true ersetzt habe wodurch man dann bei einer abfrage einfach If $iClick then bzw. if not $iClick then nutzen kann. Da du nur 2 Zustände brauchst, bietet sich hier bool an.
Welchen Einfluss hat nun der Einwand von Velted auf das Skript? Ich bin überfordert und verwirrt.
Nachdem ich mal den Code von Velted getestet habe, kam in Zeile 35 eine Fehlremeldung. Wer weiß ob ich da den Code richtig getauscht habe.
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")
Global Const $sMin1 = "28", $sMin2 = "58", $sMin3 = "43", $sStd3 = "15"
Global $sStd, $sMin
start()
; AdlibRegister('Adlib_ansage', $itime_adl) <<<<< wird nicht gebraucht
While True
$sMin = @MIN ; für den sehr unwahrscheinlichen Fall, dass sich die Werte während der folgenden Abfrage ändern
$sStd = @HOUR ; für den sehr unwahrscheinlichen Fall, dass sich die Werte während der folgenden Abfrage ändern
If ($sMin = $sMin1) Or ($sMin = $sMin2) Or (($sStd = $sStd3) And ($sMin = $sMin3)) Then
Uhr_ansagen()
ConsoleWrite("ANSAGE : " & $sStd & ":" & $sMin & " Uhr!" &@CRLF) ; wenn gewollt
While (@MIN = $sMin)
Sleep(1000) ; bis zur nächsten Minute schlafen
WEnd
Else
Sleep(1000) ; um die Prozessorlast unten zu halten
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
Oder doch noch leichte Anpassungen im aktuellen Script aus #18?
Ändere mal Zeile 10:
Global $sStd, $sMin, $oSession, $iclick = False
Korrektur:
Global $sStd, $sMin, $oSession
UND entferne Zeile 49
$iClick wird nicht benötigt soweit ich es sehe
Das Script aus Beitrag #18 ist doch das letzte was als Basis genommen wurde?! Zeile 10 sieht bei mir so aus: "Global $oSession, $iclick = False" die ich jetzt mit "Global $sStd, $sMin, $oSession" geändert habe. Zeile 49 sieht bei mir so aus: "Func Adlib_ansage()".
Zeile 57 ist bei mir: "$iclick = True". Die ich jetzt gelöscht habe. Dann kommt die Fehlermeldung:
Raleigh : Das kann so nicht hin hauen. Ich habe meine oben angesprochene Korrektur auf deinen Beitrag #29 bezogen.
Dort kommt $iClick NUR in Zeile 49 vor und wird somit nicht benötigt.
Auch fehlt dort die Globale deklaration von $oSession, weshalb dein vorheriger angesprochener Fehler (Zeile 35) her rührt und mit meiner oben angepsrochenen Korrektur (Zeile 10) behoben wird.
Wie soll man dir helfen, wenn du zwischen unterschiedlichen Codes hin und her springst?...
Moin,
ich habe Dein Skript aus Beitrag #29 überarbeitet:
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")
Global Const $sMin1 = "28", $sMin2 = "58", $sMin3 = "43", $sStd3 = "15"
Global $sStd, $sMin
Global $oSession
start()
; AdlibRegister('Adlib_ansage', $itime_adl) <<<<< wird nicht gebraucht
While True
$sMin = @MIN
$sStd = @HOUR
If ($sMin = $sMin1) Or ($sMin = $sMin2) Or (($sStd = $sStd3) And ($sMin = $sMin3)) Then
Uhr_ansagen()
ConsoleWrite("ANSAGE : " & $sStd & ":" & $sMin & " Uhr!" &@CRLF) ; wenn gewollt
While (@MIN = $sMin)
Sleep(1000) ; bis zur nächsten Minute schlafen
WEnd
Else
Sleep(1000) ; um die Prozessorlast unten zu halten
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
Zeile 4 auskommentiert.
Zeile 11 eingefügt.
Zeilen 42 - 45 auskommentiert.
Zeile 50 auskommentiert.
Versuch mal, ob das fehlerfrei läuft.
Viel Glück,
Velted
Du kannst das auch ohne Browserzugriff lösen. Schau dir mal diese Variante der Sprachausgabe an:
Mit den internen Sprachmodulen von Windows 10 erhalte ich keine zufriedenstellende Ergebnisse. Sie klingen mir einfach zu roboterhaft.
Also Susi klingt schon sehr angenehm.
Zitat von MoombasRaleigh : Das kann so nicht hin hauen. Ich habe meine oben angesprochene Korrektur auf deinen Beitrag #29 bezogen.
Dort kommt $iClick NUR in Zeile 49 vor und wird somit nicht benötigt.
Auch fehlt dort die Globale deklaration von $oSession, weshalb dein vorheriger angesprochener Fehler (Zeile 35) her rührt und mit meiner oben angepsrochenen Korrektur (Zeile 10) behoben wird.
Wie soll man dir helfen, wenn du zwischen unterschiedlichen Codes hin und her springst?...
Ja, Sorry. Ich bin selbst schon ganz verwirrt. Jetzt die Änderungen nochmal bei dem Script aus Beitrag #29 vorgenommen und läuft wie es soll.
Somit kann man das Thema jetzt wirklich beenden.
So, hier dann das Endergebnis:
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")
Global Const $sMin1 = "28", $sMin2 = "58", $sMin3 = "43", $sStd3 = "15"
Global $sStd, $sMin, $oSession
start()
; AdlibRegister('Adlib_ansage', $itime_adl) <<<<< wird nicht gebraucht
While True
$sMin = @MIN ; für den sehr unwahrscheinlichen Fall, dass sich die Werte während der folgenden Abfrage ändern
$sStd = @HOUR ; für den sehr unwahrscheinlichen Fall, dass sich die Werte während der folgenden Abfrage ändern
If ($sMin = $sMin1) Or ($sMin = $sMin2) Or (($sStd = $sStd3) And ($sMin = $sMin3)) Then
Uhr_ansagen()
ConsoleWrite("ANSAGE : " & $sStd & ":" & $sMin & " Uhr!" &@CRLF) ; wenn gewollt
While (@MIN = $sMin)
Sleep(1000) ; bis zur nächsten Minute schlafen
WEnd
Else
Sleep(1000) ; um die Prozessorlast unten zu halten
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')
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
Ich hatte dein Script auch nochmal getestet. Da kam dann Fehler in Zeile 39... Es spielt jetzt ja keine Rolle mehr. Da das Script jetzt reibungslos funktioniert. An alle nochmal vielen Dank für die Hilfsbereitschaft.
Zitat von BugFix
Du kannst das auch ohne Browserzugriff lösen. Schau dir mal diese Variante der Sprachausgabe an:
Damit hatte ich als erstes experimentiert. Wie gesagt, für mich kein zufriedenstellendes Ergebniss bekommen.
Zitat von BugFix
Also Susi klingt schon sehr angenehm.
Bei mir ist keine Susi installiert, unter Windows 10 Enterprise. Obwohl ich alle deutschen Sprachpakete installiert habe, sind bei mir
Stefan, David, Katja, Zira, Mark, Steffie(DE/EN).
Viele Grüße
Raleigh