vbsuser
Goto Top

Mit VBScript 2. Monitor erkennen

Hallo,

benötige Hilfe. Vielleicht hat jemand eine Idee

Vor der Ausgabe einer Diashow auf einen 2. Monitor soll geprüft werden ob der 2. Monitor nun eingeschaltet wurde. Dies funktioniert mit verschiedenen VBSript Methoden sehr gut, allerdings nur wenn der 2. Monitor auch von Windows erkannt wurde.

Das heißt erst nach Rechtsklick auf dem Desktop und dem Menüpunkt "Bildschirmauflösung"/"Erkennen" ist die Anzahl der Monitore von Windows korrekt eingetragen und lässt sich mit Vbs richtig auslesen.

Ich habe nun versucht dies mit einem Script wie folgt zu simulieren:
set WshShell = WScript.CreateObject("WScript.Shell")   
WindowsPfad = WshShell.ExpandEnvironmentStrings("%windir%")  
WSHShell.Run WindowsPfad&"\System32\rundll32.exe shell32.dll, Control_RunDLL Desk.cpl,,3"  

set Sk = CreateObject("WScript.Shell")  
'Sk.SendKeys "%n"  
Das Skript öffnet zwar das Fenster Bildschirmauflösung, wartet aber immer auf eine Tastatureingabe. Die Zeile mit der Anweisung SendKeys wird erst nach schließen des Fensters abgearbeitet.
Ev. muß auch noch die Einstellung bei "Mehrere Anzeigen:" per Sript geändert werden. Hat jemand eine Idee wie man das Fenster per Vbs bedienen kann?

Oder gibt es eine andere Möglichkeit Windows dazu zu bringen die Anzahl der angeschlossenen Monitore zu aktualisieren?

Content-Key: 259825

Url: https://administrator.de/contentid/259825

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: 116301
116301 14.01.2015 um 18:53:30 Uhr
Goto Top
Hallo VbsUser!

Ich vermute eher, dass der SendKey in's leere läuft, d.h. das er schon ausgeführt wird, bevor das Fenster geöffnet ist. Versuch mal eine Verzögerung durch ein Sleep vor dem Sendkey...

Grüße Dieter
Mitglied: emeriks
emeriks 14.01.2015 um 22:33:38 Uhr
Goto Top
Hi,
schon mal an PowerShell gedacht?

Datei "test.ps1" erstellen ....
$Screens = [System.Windows.Forms.Screen]::AllScreens.Length
'Anzahl Monitore: ' + $Screens  
... und ausführen.

E.
Mitglied: 114757
Lösung 114757 15.01.2015, aktualisiert am 17.01.2015 um 15:44:37 Uhr
Goto Top
Moin,
Zitat von @emeriks:
schon mal an PowerShell gedacht?
Datei "test.ps1" erstellen ....
dann musst du aber vorher im Script noch das Assembly laden
Add-Type -AssemblyName System.Windows.Forms
Wenn das ganze aus VBS aufgerufen werden soll geht das bspw. so
Set objShell = CreateObject("Wscript.Shell")  
screens = objShell.Run("""C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"" -ExecutionPolicy ByPass -Command ""&{Add-Type -AssemblyName System.Windows.Forms;exit([System.Windows.Forms.Screen]::AllScreens.Length)}""",0,True)  
MsgBox screens
Gruß jodel32