Zwischen zwei Display hin- und herschalten (mit VBScript) (1 Viewer)

MarcyDarcy

New Member
September 12, 2009
1
0
Hi,

es gibt bereits eine prima Anleitung hier (https://forum.team-mediaportal.com/...isplays-hin-und-herschalten-mit-girder-35790/) mit der das Umschalten zwischen zwei Displays erklärt wird. "Leider" wird hier die Möglichkeit genutzt, über das Auswählen verschiedener Displayprofile im CCC und dem damit verbundenen Autostart von Batchdateien zu gehen. Dies ist bspw. bei NVIDIA Karten nicht möglich.

Daher habe ich nach einer anderen Lösung gesucht und bin auf die in MP eingebaute Funktion gestossen, im setup von Mediaportal festzulegen, auf welchem Display MP gestartet werden soll (Mediaportal Configuration -> General -> "Use screenselector to choose...."). Ist diese Option aktiviert, wird einem ein DropDown Menü zur Verfügung gestellt, aus dem man den entsprechenden Monitor auswählt. Die Information darüber, welcher gewählt wurde, wird in der MediaPortal.xml gespeichert. Dabei entspricht der erste Eintrag der Screennummer 0, der zweite Eintrag der Screennummer 1 und so weiter (nicht zu verwechseln mit der Bildschirmnumerierung aus der Systemsteuerung).

Ich habe mich daher ein wenig mit VBScript beschäftigt und ein Script geschrieben, was nach folgendem Muster arbeitet:

1. Schließe alle Mediaportal Instanzen (um Konflikte beim Zugriff auf die Mediaportal.xml zu vermeiden)
2. Lese die Mediaportal.xml und finde heraus, welcher Screen derzeit aktiviert ist.
3. Verändere die Mediaportal.xml so, dass der alternative Screen eingetragen wird.
4. Starte Mediaportal auf dem alternativen Screen.

Das Script funktioniert in beide Richtungen. Wenn also Screen A aktiv ist, wird nach Ausführen des Scripts das Mediaportal auf Screen B gestartet und anders herum.

Das Script muss lediglich in den Mediaportal-Stammordner kopiert werden (wo auch die restart.vbs liegt) und die Indizes der beiden Screens, zwischen denen hin- und hergeschaltet werden soll (siehe oben), als Variablen im Kopf der .vbs festgelegt werden. Zu guter Letzt noch den Pfad zur MediaPortal.xml überprüfen und ggfs. anpassen.

Über das Plugin Multishortcut oder den Girder oder oder oder kann man das Script dann bequem über die Fernbedienung starten. Habs zwar noch nicht probiert, aber sollte klappen.

Um es kurz zu machen, hier das Script. Feel free to adapt to your needs:

--------------- Ausschneiden beginnen --------------------------------------------------------------------

' ############################################
' ## User specific definition of Monitors between MP should be switched
' ## Index of Monitors is to be taken from MP "Screenslection" drop down
' ## list under MP configuration -> General
' ## first entry has index 0, second entry has index 1 and so fort
' ## choose indizes between you want to switch
' ##
' ## Last user specification for sFSpec is path to Mediaportal.xml
' ############################################

Dim MonitorA : MonitorA = "0"
Dim MonitorB : MonitorB = "1"
Dim sFSpec : sFSpec = "C:\ProgramData\Team MediaPortal\MediaPortal\MediaPortal.xml"


' ############################################
' ## nothing to be changed from here on ###################
' ############################################

' #############################################
' # First we have to close any running MediaPortal -instance #########
' #############################################

set wmi = GetObject("winmgmts:")
set system = wmi.instancesOf("win32_process")
for each process in system
if lcase(process.name)="MediaPortal.exe" then
process.Terminate (0)
end if
next

' ##############################################
' # now we need to edit the Mediaportal.xml to set the alternative ######
' # Monitor as Startmonitor for MediaPortal ####################
' ##############################################

Dim sXPath : sXPath = "/profile/section[@name=""screenselector""]/entry[@name=""screennumber""]"

' need a FSO for pathes and IO
Dim oFS : Set oFS = CreateObject( "Scripting.FileSystemObject" )
sFSpec = oFS.GetAbsolutePathName( sFSpec )


' Create an XML Document Object and specify XPath
Dim oXDoc : Set oXDoc = CreateObject( "Msxml2.DOMDocument" )
oXDoc.setProperty "SelectionLanguage", "XPath"

' Load XML file
oXDoc.async = False
oXDoc.Load sFSpec


' Return the node for sXPath

Dim oNode
Set oNode = oXDoc.selectSingleNode( sXPath )

If oNode.text = MonitorA then
oNode.text = MonitorB
oXDoc.Save sFSpec
else
oNode.text = MonitorA
oXDoc.Save sFSpec
end if


' ################################################
' # Finally we need to restart MediaPortal using the original ############
' # restart.vbs code ####################################
' ###############################################

Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "wscript restart.vbs", , True

--------------- Ausschneiden beenden --------------------------------------------------------------------
 

Users who are viewing this thread

Top Bottom