Jump to content

TPlaystate (Pause =Aktiv) per VBScript abfragen


Tüftler

Recommended Posts

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 by Tüftler
Link to comment
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?

Link to comment

@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 by Tüftler
Link to comment
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. :biggrin:

Link to comment

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.

Link to comment
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.

Link to comment

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. :biggrin:

 

Edit:

Werde dies jetzt über User defined für Pause und mithilfe einer gesetzten Zustandsvariable für Aktiv/nicht Aktiv probieren.

Edited by Tüftler
Link to comment

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

Link to comment

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. :blush:

Link to comment

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? :blush:

Edited by Tüftler
Link to comment

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. :blush:

 

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.

Link to comment

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

Link to comment

@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. :biggrin:

Sobald ich meine Tastenkombination benutze, wird die VBS geöffnet (mit Notepad++) und bleibt im Vordergrund. o:)

Vieleicht hilft dir das, und so auch mir, weiter. :biggrin:

Edited by Tüftler
Link to comment
Sobald ich meine Tastenkombination benutze, wird die VBS geöffnet (mit Notepad++) und bleibt im Vordergrund. o:)
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.

Link to comment

Danke Tjod, genau das wars.

Manche Lösungen könne ja so einfach sein. :biggrin:

 

Jetzt geht auch das Script von a4ke. o:)

Wie heisst es so schön, das Problem sitzt immer vor dem Rechner. :biggrin:

Link to comment

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

Link to comment

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. o:)

Edited by Tüftler
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...