Hallo Zusammen,
ich versuche folgendes Projekt zu realisieren und bin auf ein Problem gestoßen.
Gegeben:
Eine PowerPoint Präsentation (*.PPSX) läuft auf einem Touchscreen in Dauerschleife. Die Präsentation (auf´s wesentliche reduziert) ist unten im Anhang "Dojo1.zip", um den Fehler nachstellen zu können.
Da die User aus der Master-Präsentation auch andere Präsentationen aufrufen und sogar die Master-Präsentation beenden können müssen, soll folgendes umgesetzt werden.
Aufgabe:
Das Skript (hängt im Autostart) soll nach einer Leerlaufzeit von X Minuten die Master-Präsentation in den Vordergrund holen.
Hat ein User die Master-Präsentation beendet, soll das Skript dies erkennen und die Master-Präsentation starten.
Damit soll sicher gestellt werden, dass immer die Master-Präsentation auf dem Bildschirm läuft.
Aktuell sind 10 Minuten Leerlaufzeit angedacht.
=>Diese Vorgaben erfüllt das bestehende Skript ohne Probleme zu machen.
Umsetzung:
#include <Timers.au3>
;Werte aus der Config.ini
$PPSX_path = IniRead(@ScriptDir & "\config.ini", "PPSX_path", "PPSX_path1", "")
$PPSX_name = IniRead(@ScriptDir & "\config.ini", "PPSX_name", "PPSX_name1", "")
$PPSX_IdleTime = IniRead(@ScriptDir & "\config.ini", "IdleTime", "IdleTime1", "600")
;Leerlaufzeit
$time=$PPSX_IdleTime
While 1
If _Timer_GetIdleTime() >= 1 * $time * 1000 Then
;Prüft ob das Fenster der Master-Präsentation aktiv ist (muss nicht unbedingt im Vodergrund sein)
;WinGetState = 0 wenn das Fenster nicht gefunden wurde
$pState = WinGetState ("PowerPoint-Bildschirmpräsentation - "& "[" &$PPSX_name& "[Schreibgeschützt]]")
;Wenn das Fenster der Master-Präsenstation noch aktiv ist wird es in den Vordergrung geholt
if $pState > 0 Then
WinActivate("PowerPoint-Bildschirmpräsentation - "& "[" &$PPSX_name& "[Schreibgeschützt]]")
;Falls das Fenster nicht mehr aktiv ist, wird die PPSX-Datei mit maximiertem Fenster gestartet.
Else
ShellExecute($PPSX_path&$PPSX_name,"",Default,Default, @SW_MAXIMIZE)
EndIf
EndIf
WEnd
Alles anzeigen
[PPSX_path]
PPSX_path1 = [PFAD]
[PPSX_name]
PPSX_name1 = DATEI.ppsx
[IdleTime]
IdleTime1 = 600
Ich prüfe den Fenster-Titel ob dieser vorhanden ist, falls nicht, starte ich die Master-Präsentation.
Das funktioniert auch gut, weil jede Präsentation einen anderen Titel hat.
Problem:
Wenn das Skript die Master-Präsentation einmal gestartet und/oder in den Vordergrund geholt hat, kann diese nicht mehr über ESC beendet werden.
Beendet man die Master-Präsentation über ESC wird Sie 1 Sekunde später sofort wieder gestartet und läuft erneut los.
Das Problem tritt auch auf, wenn das AutoIT-Skript vorher komplett beendet worden ist und man dann erst versucht die Präsentation mit ESC zu beenden.
Es hilft nur, die Master-Präsentation über den TaskManager oder die Taskleiste zu beenden.
=>TaskManager/Taskleiste ist keine Option, da der User auch über den Touchscreen die Präsentation beenden können muss.
=>Starte ich die Präsentation ohne das Skript, kann ich Sie ohne Probleme mit ESC beenden.
Getestet:
Auf folgenden Systemen habe ich das Skript getestet immer mit dem selben Ergebnis/Problem.
-Windows 7 Enterprise x64 und Office 2010
-Windows 10 Enterprise x64 und Office 2016
An der Master-Präsentation scheint es nicht zu liegen, um das auszuschließen habe ich die Datei mehrfach von Grund auf neu erstellt.
Ziel:
Der User soll die Master-Präsentation mit ESC beenden können, da Sie ja eh nach x Minuten Leerlauf von alleine wieder neu startet.
Das Skript hängt im Autostart und läuft den ganzen Tag mit.
Zum Testen habe ich in dem Dojo1.zip die Präsentation angehängt.
Tipps und Lösungsvorschläge sind willkommen