Hey,
ich bastle mir gerade einen Sleeptimer für den DVB Viewer (gibts zwar schon einen - der ist aber "komisch" )
vorab mal mein Skript
Spoiler anzeigen
Global $iCounter
Global $dummy = 0
If $CmdLine[0] = 0 Then Exit ;eigentlich unnötig - ich wollt lieber mit Parameter starten und naja wie gesagt ..
Global $DVBViewer = ObjGet("", "DVBViewerServer.DVBViewer") ;Verbindung zum DVBViewer herstellen
If $DVBViewer = 0 Then
MsgBox(1, "", "Keine Verbindung zum DVBViewer möglich")
Exit
EndIf
If $CmdLine[0] > 0 And $CmdLine[1] = "-state" And $iCounter <> "" Then _STOPTimer() ;daran hängts irgendwie
Switch $dummy
Case 0
$test = $DVBViewer.OSD.showpopup("Sleeptimer", "30min, 60min, 90min, 120min, 180min, Zurück", True) ;OSD um abzufragen wie lange der Sleeptimer laufen soll
Switch $test
Case 0
$iCounter = 30 ;30sek zum testen
_Timer()
Case 1
$iCounter = 60 ;60sek usw.
_Timer()
Case 2
$iCounter = 90
_Timer()
Case 3
$iCounter = 120
_Timer()
Case 4
$iCounter = 180
_Timer()
Case 5
$DVBViewer.SendCommand(82) ;osd zurück
Exit
EndSwitch
EndSwitch
Func _STOPTimer()
$test = $DVBViewer.OSD.showyesno("Sleeptimer", "Restlaufzeit:" & $iCounter, "Countdown abbrechen?", "", True) ;OSD Fenster mit der verbleibenden Zeit wird und einer Abfrage wird angezeigt
Switch $test
Case True
Exit ;Countdown abbrechen
Case False
$dummy = 1 ;blöder Versuch von mir das Problem zu lösen bei $dummy = 1 soll er eben nicht das Auswahlfenster zeigen.
EndSwitch
EndFunc ;==>_STOPTimer
Func _Timer() ; Die Timerfunktion
AdlibEnable('_Countdown', 1000)
While True
If $iCounter <= 0 Then
AdlibDisable()
_Beenden()
Exit
EndIf
WEnd
EndFunc ;==>_Timer
Func _Countdown()
$iCounter -= 1
EndFunc ;==>_Countdown
Func _Beenden() ; kommt noch - tut auch nichts zur Sache
EndFunc ;==>_Beenden
Das Skirpt wird vom DVBViewer aus gestartet, danach fängt der Timer mit der ausgewählten Zeit an zu laufen.
Jetzt kommt der knifflige Teil. Ich möchte das Skript erneut aufrufen (mit dem gleichen Parameter) und nun abfragen wie lange der Timer noch läuft und ob er abgebrochen werden soll.
Es gelingt mir aber nicht in die entsprechende Funktion zu kommen. D.h. es wird erneut abgefragt mit wieviel Zeiteinheiten der Timer anlaufen soll, obwohl er ja schon läuft.
Jemand dazu eine gute Idee?
Gruß nuts
Edit \ Mit _Singleton würde da was gehen nur dann läuft das Skript 2 mal -> wie kille ich ggf. beide Instanzen auf einmal?
_Singleton Version - wenn ich noch raus kriege wie man die beiden gleichzeitig beenden kann hab ichs!
Spoiler anzeigen
#include <Misc.au3>
Global $iCounter
If $CmdLine[0] = 0 Then Exit ;eigentlich unnötig - ich wollt lieber mit Parameter starten und naja wie gesagt ..
Global $DVBViewer = ObjGet("", "DVBViewerServer.DVBViewer") ;Verbindung zum DVBViewer herstellen
If $DVBViewer = 0 Then
MsgBox(1, "", "Keine Verbindung zum DVBViewer möglich")
Exit
EndIf
Global $sTitle = 'Sleeptimer'
If _Singleton($sTitle, 1) = 0 Then _STOPTimer()
$test = $DVBViewer.OSD.showpopup("Sleeptimer", "30min, 60min, 90min, 120min, 180min, Zurück", True) ;OSD um abzufragen wie lange der Sleeptimer laufen soll
Switch $test
Case 0
$iCounter = 30
_Timer()
Case 1
$iCounter = 60
_Timer()
Case 2
$iCounter = 90
_Timer()
Case 3
$iCounter = 120
_Timer()
Case 4
$iCounter = 180
_Timer()
Case 5
$DVBViewer.SendCommand(82) ;osd zurück
Exit
EndSwitch
Func _STOPTimer()
$test = $DVBViewer.OSD.showyesno("Sleeptimer", "Restlaufzeit:" & $iCounter, "Countdown abbrechen?", "", True) ;OSD Fenster mit der verbleibenden Zeit wird und einer Abfrage wird angezeigt
Switch $test
Case True
Exit
EndSwitch
EndFunc ;==>_STOPTimer
Func _Timer() ; Die Timerfunktion
AdlibEnable('_Countdown', 1000)
While True
If $iCounter <= 0 Then
AdlibDisable()
_Beenden()
Exit
EndIf
WEnd
EndFunc ;==>_Timer
Func _Countdown()
$iCounter -= 1
EndFunc ;==>_Countdown
Func _Beenden() ; kommt noch - tut auch nichts zur Sache
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Beenden
[/autoit]edit2 \
So hab gerade gemerkt, dass meine eingeschlagenen Lösungswege ziemlich ins leere laufen
Das Skript 2 mal starten geht nicht, da sonst keine Restlaufzeit angezeigt werden kann.
Die Abfrage ob abgebrochen werden soll muss irgendwie anders aufgerufen werden -> Ich versuchs jetzt mal mit _ISPressed
Hab ich das Problem halbwegs klar dargestellt?
Der Sleeptimer soll per Fernbedienung gestartet werden und zwar mit nur einem Knopf. Dieser Knopf kann logischerweise nur eine Aktion aufrufen.
Gewünscht ist eine unterscheidung zwischen "läuft schon -> Abfrage ob abgebrochen werden soll und die Anzeige der Restlaufzeit" und "läuft nicht -> Einstellen des Countdowns und los gehts".
Schwierig schwierig ..