home
products
contribute
download
documentation
forum
Home
Forums
New posts
Search forums
What's new
New posts
All posts
Latest activity
Members
Registered members
Current visitors
Donate
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Search titles only
By:
Menu
Log in
Register
Navigation
Install the app
Install
More options
Contact us
Close Menu
Forums
Language specific support
Deutsches MediaPortal Forum
Wissenswertes rund um MP
Tipps, Tricks & Tutorials
Zwischen zwei Display hin- und herschalten (mit VBScript)
Contact us
RSS
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
<blockquote data-quote="MarcyDarcy" data-source="post: 508549" data-attributes="member: 97864"><p>Hi,</p><p></p><p>es gibt bereits eine prima Anleitung hier (<a href="https://forum.team-mediaportal.com/tipps-tricks-tutorials-176/zwischen-2-displays-hin-und-herschalten-mit-girder-35790/" target="_blank">https://forum.team-mediaportal.com/tipps-tricks-tutorials-176/zwischen-2-displays-hin-und-herschalten-mit-girder-35790/</a>) 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.</p><p></p><p>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).</p><p></p><p>Ich habe mich daher ein wenig mit VBScript beschäftigt und ein Script geschrieben, was nach folgendem Muster arbeitet:</p><p></p><p>1. Schließe alle Mediaportal Instanzen (um Konflikte beim Zugriff auf die Mediaportal.xml zu vermeiden)</p><p>2. Lese die Mediaportal.xml und finde heraus, welcher Screen derzeit aktiviert ist.</p><p>3. Verändere die Mediaportal.xml so, dass der alternative Screen eingetragen wird.</p><p>4. Starte Mediaportal auf dem alternativen Screen.</p><p></p><p>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. </p><p></p><p>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.</p><p></p><p>Ü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. </p><p></p><p>Um es kurz zu machen, hier das Script. Feel free to adapt to your needs:</p><p></p><p>--------------- Ausschneiden beginnen --------------------------------------------------------------------</p><p></p><p>' ############################################</p><p>' ## User specific definition of Monitors between MP should be switched </p><p>' ## Index of Monitors is to be taken from MP "Screenslection" drop down</p><p>' ## list under MP configuration -> General </p><p>' ## first entry has index 0, second entry has index 1 and so fort </p><p>' ## choose indizes between you want to switch </p><p>' ## </p><p>' ## Last user specification for sFSpec is path to Mediaportal.xml </p><p>' ############################################</p><p></p><p>Dim MonitorA : MonitorA = "0" </p><p>Dim MonitorB : MonitorB = "1"</p><p>Dim sFSpec : sFSpec = "C:\ProgramData\Team MediaPortal\MediaPortal\MediaPortal.xml" </p><p></p><p></p><p>' ############################################</p><p>' ## nothing to be changed from here on ###################</p><p>' ############################################</p><p></p><p>' #############################################</p><p>' # First we have to close any running MediaPortal -instance #########</p><p>' #############################################</p><p></p><p>set wmi = GetObject("winmgmts:") </p><p>set system = wmi.instancesOf("win32_process") </p><p>for each process in system </p><p> if lcase(process.name)="MediaPortal.exe" then </p><p> process.Terminate (0) </p><p> end if </p><p>next</p><p></p><p>' ##############################################</p><p>' # now we need to edit the Mediaportal.xml to set the alternative ######</p><p>' # Monitor as Startmonitor for MediaPortal ####################</p><p>' ##############################################</p><p></p><p>Dim sXPath : sXPath = "/profile/section[@name=""screenselector""]/entry[@name=""screennumber""]"</p><p></p><p>' need a FSO for pathes and IO </p><p>Dim oFS : Set oFS = CreateObject( "Scripting.FileSystemObject" ) </p><p>sFSpec = oFS.GetAbsolutePathName( sFSpec ) </p><p></p><p></p><p>' Create an XML Document Object and specify XPath </p><p>Dim oXDoc : Set oXDoc = CreateObject( "Msxml2.DOMDocument" ) </p><p>oXDoc.setProperty "SelectionLanguage", "XPath" </p><p></p><p>' Load XML file </p><p>oXDoc.async = False </p><p>oXDoc.Load sFSpec </p><p></p><p></p><p>' Return the node for sXPath </p><p></p><p>Dim oNode </p><p>Set oNode = oXDoc.selectSingleNode( sXPath ) </p><p></p><p>If oNode.text = MonitorA then </p><p> oNode.text = MonitorB</p><p> oXDoc.Save sFSpec</p><p>else </p><p> oNode.text = MonitorA </p><p> oXDoc.Save sFSpec</p><p>end if </p><p></p><p></p><p>' ################################################</p><p>' # Finally we need to restart MediaPortal using the original ############</p><p>' # restart.vbs code #################################### </p><p>' ###############################################</p><p></p><p>Set WSHShell = CreateObject("WScript.Shell")</p><p>WSHShell.Run "wscript restart.vbs", , True </p><p></p><p>--------------- Ausschneiden beenden --------------------------------------------------------------------</p></blockquote><p></p>
[QUOTE="MarcyDarcy, post: 508549, member: 97864"] Hi, es gibt bereits eine prima Anleitung hier ([url]https://forum.team-mediaportal.com/tipps-tricks-tutorials-176/zwischen-2-displays-hin-und-herschalten-mit-girder-35790/[/url]) 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 -------------------------------------------------------------------- [/QUOTE]
Insert quotes…
Verification
Post reply
Forums
Language specific support
Deutsches MediaPortal Forum
Wissenswertes rund um MP
Tipps, Tricks & Tutorials
Zwischen zwei Display hin- und herschalten (mit VBScript)
Contact us
RSS
Top
Bottom