Tüftler Posted March 2, 2009 Share Posted March 2, 2009 (edited) Hallo User, kennt jemand eine Möglichkeit den aktuellen Zustand für Playstate abzufragen und ihn Zwecks Auswertung an eine Variable zu übergeben? Es gibt ja laut Com Hilfe dafür onPlaystateChange TPlaystate (glaube nicht mehr wirklich unterstützt?), nur weiss ich nicht wie man dies umsetzt. IsPlaying gibt über Pause leider nichts her, oder? Gedacht ist dies dafür, bei Pause ein bestimmtes Kommando zu senden, wenn diese Aktiv ist. Danke schon mal. Edited March 2, 2009 by Tüftler Quote Link to comment
Tjod Posted March 2, 2009 Share Posted March 2, 2009 Also wenn ich in DVBViewer Spy gucke scheint onPlaystateChange zu funktionieren. Quote Link to comment
dbraner Posted March 2, 2009 Share Posted March 2, 2009 Also wenn ich in DVBViewer Spy gucke scheint onPlaystateChange zu funktionieren. Ich glaube was Tüftler meint ist: Wie kann man den PlayState in der Command.vbs abfragen. Griga hatte mal eine Lösung für DVBViewer GE gepostet: Renderer.PlayState. Das scheint in DVBViewer aber nicht zu funktionieren. Jedenfalls führten meine Versuche in Command.vbs zu einem Fehler. @Tüftler: Richtig verstanden? Quote Link to comment
Tjod Posted March 2, 2009 Share Posted March 2, 2009 Irgend wie finde ich onPlaystateChange Grade DVBViewer COM Interface. In welchem Bereich ist das da? Quote Link to comment
Tüftler Posted March 2, 2009 Author Share Posted March 2, 2009 (edited) @dbraner Ja, genau richtig verstanden. @Tjod ComInterface, ->Registrierkarte(Suchfeld) Index "OnPlaystatechange" daraufhin gibt es: procedure OnPlaystatechange(RendererType: TRendererTyp; State: TPlaystates); The event gets fired whenever the internal playstate changes. Parameters RendererType Type of renderer causing the event. State state changed into. Edited March 2, 2009 by Tüftler Quote Link to comment
Tüftler Posted March 2, 2009 Author Share Posted March 2, 2009 Ich glaube was Tüftler meint ist: Wie kann man den PlayState in der Command.vbs abfragen. Griga hatte mal eine Lösung für DVBViewer GE gepostet: Renderer.PlayState. Das scheint in DVBViewer aber nicht zu funktionieren. Jedenfalls führten meine Versuche in Command.vbs zu einem Fehler. @Tüftler: Richtig verstanden? Meintest bestimmt diesen post, aber auch bei mir führte dies zu keinem Erfolg, selbst mit Anpassungen laut Com Hilfe. Quote Link to comment
Tjod Posted March 3, 2009 Share Posted March 3, 2009 OK hatte in einer veralteten Version (2005) der DVBViewer COM Interface.chm geguckt kein wunder das ich da nichts gefunden habe. Habe aber leider keine Ahnung wie man das nutzen kann, da ich selber keine wirkliche Ahnung von VB Scripten habe. Bin mir z.B. nicht sicher was vor .OnPlaystatechange stehen muss. Quote Link to comment
dbraner Posted March 3, 2009 Share Posted March 3, 2009 OK hatte in einer veralteten Version (2005) der DVBViewer COM Interface.chm geguckt kein wunder das ich da nichts gefunden habe. Habe aber leider keine Ahnung wie man das nutzen kann, da ich selber keine wirkliche Ahnung von VB Scripten habe. Bin mir z.B. nicht sicher was vor .OnPlaystatechange stehen muss. Also ich glaube nicht, dass OnPlaystatechange weiterhilft, zumindest nicht in der Command.vbs. Das sieht mir eher nach Eventhandler aus, der z.B. in Plugins verwendet werden kann. Die Command.vbs ist ja selbst sowas wie ein Eventhandler, der bei jedem Tastendruck durchlaufen wird. Sollte man das Thema vielleicht mal in die Scripting Lounge verschieben? Das Einverständnis des Erstellers vorausgesetzt. Quote Link to comment
Tüftler Posted March 3, 2009 Author Share Posted March 3, 2009 (edited) Einverständnis erteielt. Man könnte dies evtl. auch über die ActionID machen, aber die ist ja für Pause und wieder Start die selbe. Edit: Werde dies jetzt über User defined für Pause und mithilfe einer gesetzten Zustandsvariable für Aktiv/nicht Aktiv probieren. Edited March 3, 2009 by Tüftler Quote Link to comment
a4ke Posted March 7, 2009 Share Posted March 7, 2009 Hallo Tüftler, wenn du 1,1 Sekunden Zeit hast, Pause zu erkennen, habe ich eine Lösung. Du legst im Scripts Verzeichnis eine Pause.vbs Datei an. Pause.vbs ließt im Abstand von 1,1 Sekunden "#currentplaytime. Bei Pause ist die Zeit gleich und das Program beendet sich mit EXITCODE 0. Bei Play ist es EXITCODE 1 und beim Feher ist es 2. Pause.vbs 'Play/Pause-Skript Option Explicit Const TimeToWait = 1100 Dim DVBViewer Dim DVBViewer_Running Dim FirstPlayTime Dim SecondPlayTime If GetDVBVObject(DVBViewer) Then FirstPlayTime = DVBViewer.Datamanager.Value("#currentplaytime") WScript.Sleep(TimeToWait) SecondPlayTime = DVBViewer.Datamanager.Value("#currentplaytime") if FirstPlayTime = SecondPlayTime Then WScript.Quit(0) else WScript.Quit(1) end if Else Set DVBViewer = Nothing End if If DVBViewer is Nothing Then WScript.Quit(2) End If '#################################################################### Function GetDVBVObject(Obj) On Error Resume Next Err.Clear: Set Obj = GetObject(, "DVBViewerServer.DVBViewer") If Err.Number = 424 OR Err.Number = 429 Then GetDVBVObject = False Else GetDVBVObject = TRue End If End Function Jetzt erweiterst du die command.vbs. In der Command.vbs wird Pause.vbs aufgerufen und der EXITCODE in Status gespeichert. Case 30701 Dim objShell Dim Status Set objShell = CreateObject("Wscript.Shell") Status = objShell.run("""C:\Programme\DVBViewer\Scripts\pause.vbs""",1,true) select case Status case 0 osd.showInfoinTVpic "Pause" ,2000 case 1 osd.showInfoinTVpic "Play" ,2000 case else osd.showInfoinTVpic "Error" ,2000 end select In meinem Beispiel erscheint die Infozeile mit dem aktuellem Status. Es ist nicht möglich, #currentplaytime in Commandvbs zweimal auszulesen, da sich der Wert für die Laufzeit von Command.vbs nicht ändert. Auserdem kann man WScript.Sleep nicht in der command.vbs benutzen. Gruß a4ke Quote Link to comment
Tüftler Posted March 7, 2009 Author Share Posted March 7, 2009 Danke a4ke. Ich werde es heute Abend gleich ausprobieren. Ich hatte schon mit diesem Gedanken gespielt, aber mir fehlt noch viel Programmiererfahrung mit VBS. Das Problem dürfte nur sein, dass man bei Aktivierung von Timeshift, über setzen der Pause Taste, dort auch noch #TV.Timeshift.duration abfragen müsste. Denn #currentplaytime wird erst bei dem Wiedergabestart gesetzt. Ich Probiere aber auch mal in der Erzeugten Pause.vbs ein Event abzufangen, da das wohl die einzig Brauchbare Lösung darstellt. Trotzdem nochmal besten Dank. Quote Link to comment
Tüftler Posted March 8, 2009 Author Share Posted March 8, 2009 (edited) Das ganze Funktioniert leider garnicht. Es erfolgt keine Pausierung der Pause.vbs (WScript). ->WScript.Sleep 1100 Das Hat zur Folge, das FirstPlaytime und SecondPlaytime immer den selben Wert haben und ein Vergleich daher immer das selbe Ergebnis hat. Außerdem bekommt die Pause.vbs immer den Vordergrund (Fenster wird aktiv) und selbst nach dem durchlaufen ist es im Vordergrund. So kann der DVBViewer keine Tastaturbefehle mehr empfangen. Mir wäre eine Pausierung, direkt in der Command.vbs am liebsten, aber dies würde wohl nur über eine Schleifenfunktion funktionieren, die das Script eine Weile beschäftigt. Keine sehr sichere Lösung. Noch irgendwelche Vorschläge? Edited March 8, 2009 by Tüftler Quote Link to comment
Tüftler Posted March 8, 2009 Author Share Posted March 8, 2009 Mache das jetzt etwas umständlich über die Systemzeit und einer Schleife, indem ich die Currenttime nach min. 1'er abgelaufenen Sekunde nochmals Abfrage. Jetzt muss ich nurnoch den Vergleich hinbekommen und dann ist endlich ein Ende in Sicht. Perfekt wäre trotzdem, wenn man über den Datamanager den Playstate (#Playstate), mit VBS-Mitteln, abfragen könnte. Das würde mein Script um mindestens 40 Zeilen verkürzen. Aber Egal, Hauptsache es geht erstmal. Quote Link to comment
a4ke Posted March 9, 2009 Share Posted March 9, 2009 Hallo T[ftler Das ganze Funktioniert leider garnicht.Es erfolgt keine Pausierung der Pause.vbs (WScript). ->WScript.Sleep 1100 Mich wundert, dass WScript.Sleep 1100 nicht fuer 1,1 Sekunden wartet. Außerdem bekommt die Pause.vbs immer den Vordergrund (Fenster wird aktiv) und selbst nach dem durchlaufen ist es im Vordergrund. Nach dem Durchlauf sollte sich das Pause.vbs beenden und kann so nicht mehr im Vordergrund sein. Ich wuerde gern einen Blick auf deine Pause.vbs werfen. Ich habe es so bei mir am Laufen, aber noch nicht im Timeshift Mudus getestet. Beim Ansehen von Aufnahmen gehts. Gruss a4ke Quote Link to comment
a4ke Posted March 9, 2009 Share Posted March 9, 2009 Beim copy/paste ist die letzte Zeile der Pause.vbs verloren gegangen. Es fehlt: end Function gruß a4ke Quote Link to comment
Tüftler Posted March 11, 2009 Author Share Posted March 11, 2009 (edited) @a4ke Kann es sein, dass du noch irgendwelche Zusatzprogramme auf deinem Rechner hast (VB 6.0 etc), denn bei mir geht es so nicht. Ich wüsste auch nicht wo die "End Function" fehlen sollte. Mein Code habe ich direkt so übernommen, wie du gepostet hast. Nur bei mir ist die Userdefined anders (30511). Aktiviert wird diese mit der Tastenkombination Strg+V, was hoffentlich kein Problem darstellt. Ich habe im Netz eine Wait.exe gefunden, diese geht auch, nur kann man halt nur Volle Sekunden nehmen. Außerdem gibt es Probleme, wenn sie im Admin-Ordner-Bereich ausgeführt wird, exe halt. Sobald ich meine Tastenkombination benutze, wird die VBS geöffnet (mit Notepad++) und bleibt im Vordergrund. Vieleicht hilft dir das, und so auch mir, weiter. Edited March 11, 2009 by Tüftler Quote Link to comment
Tjod Posted March 11, 2009 Share Posted March 11, 2009 Sobald ich meine Tastenkombination benutze, wird die VBS geöffnet (mit Notepad++) und bleibt im Vordergrund. Was passiert wenn du auf einen VBS einen Doppelklick macht?Wird er vom Windows Based Script Host ausgeführt oder von Notepad++ geöffnet? Wenn er mit Notepad++ geöffnet wird ändern mal die Standard Aktion um so das er ausgeführt wird. Quote Link to comment
Tüftler Posted March 11, 2009 Author Share Posted March 11, 2009 Danke Tjod, genau das wars. Manche Lösungen könne ja so einfach sein. Jetzt geht auch das Script von a4ke. Wie heisst es so schön, das Problem sitzt immer vor dem Rechner. Quote Link to comment
a4ke Posted March 11, 2009 Share Posted March 11, 2009 Hallo Tüftler, schön zu lesen, dass es bei dir läuft. Prüfe aber bitte, ob am Ende von Pause.vbs end Function steht. Gruß a4ke Quote Link to comment
Tüftler Posted March 11, 2009 Author Share Posted March 11, 2009 (edited) Wenn du bei der Fehlerschleife meinst, dann ja. So, jetzt geht es an die Endfehlerüberprüfung und danach gibt's das Update für die iMonKonfig.zip. Neue Ideen schwirren mir auch schonwieder durch den Kopf, aber immer Schritt für Schritt. Danke jedenfalls nochmal allen Helfern. Edited March 12, 2009 by Tüftler Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.