Hallo,
aktuell arbeite ich an einem kleinen Privaten VR Projekt. Ziel dieses Projektes ist zu testen ob VR auch für die Arbeit genutzt werden kann. D.h nicht nur in der Konstruktion oder 3D Visualisierung, sondern auch andere Bereiche, also auch IT, Verwaltung etc.!
Hierfür nutze ich aktuell vorhandene Programme Windows Mixed Reality, Steam, Desktop+(Steam), Virtual Desktop(Steam).
Desktop+ und Virtual Desktop unterscheiden sich in der Anwendung. Deshalb nutze ich Virtual Desktop zum Zocken(bessere Performance) und Desktop+ für die Arbeit(Programmieren und konstruieren etc.).
Jetzt möchte ich die ganzen Prozesse die ich manuell starte automatisieren, insbesondere das Aktivieren der Virtuellen Monitore.
Hierzu habe ich diese Treiber heruntergeladen und Installiert. Ist bei dem dazugehörigen tutorial bei dem Youtube Video.
youtube.com/watch?v=ybHKFZjSkVY
Hierzu habe ich mir 2 cmd's gebastelt um diese, je nach anwendungsfall zu starten:
Der Unterschied ist das Spielen nur einen Monitor erstellt und Arbeit 4 Monitore(Anzahl soll Später noch ausgewählt werden).
Danach stelle ich je nach bedarf die Auflösung der Virtuellen Monitore ein. Für Spielen 4K und für die Arbeit sollen die Monitore auf 1920x1080 eingestellt werden(auch das soll änderbar sein).
Die Einstellung der Monitore konnte ich schon Automatisieren, jedoch das Abarbeiten der CMD's bereitet mir irrsinnige Probleme. Da die Virtuellen Monitore über mein Programm nicht angelegt bzw. Installiert werden können.
Anbei mein kpl. Code:
Spoiler anzeigen
Ich hatte erst versucht über process.start direkt die cmd's aufzurufen, jedoch hat das auch nicht geholfen deshalb habe ich das dann versucht direkt im Programm zu verarbeiten.
Code-Tags eingefügt. Spoiler-Tag eingefügt. (Der Code ist doch recht lang, da kann man den schon mal spendieren ) Thunderbolt
aktuell arbeite ich an einem kleinen Privaten VR Projekt. Ziel dieses Projektes ist zu testen ob VR auch für die Arbeit genutzt werden kann. D.h nicht nur in der Konstruktion oder 3D Visualisierung, sondern auch andere Bereiche, also auch IT, Verwaltung etc.!
Hierfür nutze ich aktuell vorhandene Programme Windows Mixed Reality, Steam, Desktop+(Steam), Virtual Desktop(Steam).
Desktop+ und Virtual Desktop unterscheiden sich in der Anwendung. Deshalb nutze ich Virtual Desktop zum Zocken(bessere Performance) und Desktop+ für die Arbeit(Programmieren und konstruieren etc.).
Jetzt möchte ich die ganzen Prozesse die ich manuell starte automatisieren, insbesondere das Aktivieren der Virtuellen Monitore.
Hierzu habe ich diese Treiber heruntergeladen und Installiert. Ist bei dem dazugehörigen tutorial bei dem Youtube Video.
youtube.com/watch?v=ybHKFZjSkVY
Hierzu habe ich mir 2 cmd's gebastelt um diese, je nach anwendungsfall zu starten:
Quellcode: Games.cmd
- @cd /d "%~dp0"
- @goto %PROCESSOR_ARCHITECTURE%
- @exit
- :AMD64
- @cmd /c Pfad zu Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe install G:\Windows_Profiles\Users\Zeljko\Downloads\System\Virtueller_Monitor\usbmmidd_v2\usbmmidd.inf usbmmidd
- @cmd /c Pfad zu Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe enableidd 1
- @goto end
- :end
- @pause
Quellcode: Arbeit.cmd
- @cd /d "%~dp0"
- @goto %PROCESSOR_ARCHITECTURE%
- @exit:
- AMD64
- @cmd /c Pfad zu Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe install G:\Windows_Profiles\Users\Zeljko\Downloads\System\Virtueller_Monitor\usbmmidd_v2\usbmmidd.inf usbmmidd
- @cmd /c Pfad zu Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe enableidd 1
- @cmd /c Pfad zu Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe enableidd 1
- @cmd /c Pfad zu Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe enableidd 1
- @cmd /c Pfad zu Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe enableidd 1
- @goto end
- :end
- @pause
Der Unterschied ist das Spielen nur einen Monitor erstellt und Arbeit 4 Monitore(Anzahl soll Später noch ausgewählt werden).
Danach stelle ich je nach bedarf die Auflösung der Virtuellen Monitore ein. Für Spielen 4K und für die Arbeit sollen die Monitore auf 1920x1080 eingestellt werden(auch das soll änderbar sein).
Die Einstellung der Monitore konnte ich schon Automatisieren, jedoch das Abarbeiten der CMD's bereitet mir irrsinnige Probleme. Da die Virtuellen Monitore über mein Programm nicht angelegt bzw. Installiert werden können.
Anbei mein kpl. Code:
VB.NET-Quellcode
- Option Strict On
- Imports System.Windows.Forms
- Imports System.Drawing
- Imports System.Runtime.InteropServices
- Class MainWindow
- <DllImport("user32.dll")>
- Private Shared Function EnumDisplayDevices(ByVal Unused As Integer,
- ByVal iDevNum As Integer, ByRef lpDisplayDevice As DISPLAY_DEVICE, ByVal dwFlags As Integer) As Integer
- End Function
- 'This function retrieves information about one of the graphics modes for a display device
- <DllImport("user32.dll")>
- Private Shared Function EnumDisplaySettings(ByVal lpszDeviceName As String,
- ByVal iModeNum As Integer, ByRef lpDevMode As DEVMODE) As Integer
- End Function
- 'The ChangeDisplaySettingsEx function changes the settings of the specified display device to the specified graphics mode
- <DllImport("user32.dll")>
- Private Shared Function ChangeDisplaySettingsEx(ByVal lpszDeviceName As String,
- ByRef lpDevMode As DEVMODE, ByVal hWnd As Integer, ByVal dwFlags As Integer,
- ByVal lParam As Integer) As Integer
- End Function
- Private Const CCDEVICENAME As Short = 32
- Private Const CCFORMNAME As Short = 32
- Private Const DM_BITSPERPEL = &H40000
- Private Const DM_PELSWIDTH = &H80000
- Private Const DM_PELSHEIGHT = &H100000
- Private Const CDS_UPDATEREGISTRY = &H1
- Private Const DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = &H1 'Display Device Attached To Desktop Device
- Private Const DISPLAY_PRIMARY_DEVICE = &H4 'Primary Display Device
- Private Structure DISPLAY_DEVICE
- Public cb As Integer
- <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)>
- Public DeviceName As String
- <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)>
- Public DeviceString As String
- Public StateFlags As Short
- <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)>
- Public DeviceID As String
- <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)>
- Public DeviceKey As String
- End Structure
- Private Structure DEVMODE
- <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)>
- Public dmDeviceName As String
- Public dmSpecVersion As Short
- Public dmDriverVersion As Short
- Public dmSize As Short
- Public dmDriverExtra As Short
- Public dmFields As Integer
- Public dmOrientation As Short
- Public dmPaperSize As Short
- Public dmPaperLength As Short
- Public dmPaperWidth As Short
- Public dmScale As Short
- Public dmCopies As Short
- Public dmDefaultSource As Short
- Public dmPrintQuality As Short
- Public dmColor As Short
- Public dmDuplex As Short
- Public dmYResolution As Short
- Public dmTTOption As Short
- Public dmCollate As Short
- <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)>
- Public dmFormName As String
- Public dmLogPixels As Short
- Public dmBitsPerPel As Short
- Public dmPelsWidth As Integer
- Public dmPelsHeight As Integer
- Public dmDisplayFlags As Integer
- Public dmDisplayFrequency As Integer
- Public dmICMMethod As Integer
- Public dmICMIntent As Integer
- Public dmMediaType As Integer
- Public dmDitherType As Integer
- Public dmReserved1 As Integer
- Public dmReserved2 As Integer
- Public dmPanningWidth As Integer
- Public dmPanningHeight As Integer
- End Structure
- Public Sub New()
- InitializeComponent()
- End Sub
- Private Function Removecmd() As String
- Dim tempcmd As String
- tempcmd = "@cmd /c G:\Windows_Profiles\Users\Zeljko\Downloads\System\Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe stop usbmmidd"
- tempcmd = tempcmd & vbNewLine & "End"
- tempcmd = tempcmd & vbNewLine & "Pause"
- Return tempcmd
- End Function
- Private Function AddGameDisplaycmd() As String
- Dim tempcmd As String
- tempcmd = "@cmd /c G:\Windows_Profiles\Users\Zeljko\Downloads\System\Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe install G:\Windows_Profiles\Users\Zeljko\Downloads\System\Virtueller_Monitor\usbmmidd_v2\usbmmidd.inf usbmmidd"
- tempcmd = tempcmd & vbNewLine & "@cmd /c G:\Windows_Profiles\Users\Zeljko\Downloads\System\Virtueller_Monitor\usbmmidd_v2\deviceinstaller64.exe enableidd 1"
- tempcmd = tempcmd & vbNewLine & "End"
- tempcmd = tempcmd & vbNewLine & "Pause"
- Return tempcmd
- End Function
- Private Sub Game_BTN_Click(sender As Object, e As RoutedEventArgs)
- 'RunCommandCom(Removecmd)
- RunCommandCom(AddGameDisplaycmd)
- 'StartProcessasAdmin("G:\Windows_Profiles\Users\Zeljko\Desktop\Spielen.cmd")
- System.Threading.Thread.Sleep(5000)
- ChangeResulution(3840, 2160)
- 'Process.Start("G:\Windows_Profiles\Users\Zeljko\Desktop\Virtual Desktop.url")
- End Sub
- Private Sub RunCommandCom(ByVal command As String)
- Dim p As Process = New Process()
- Dim pi As ProcessStartInfo = New ProcessStartInfo()
- pi.Arguments = command
- pi.FileName = "cmd.exe"
- pi.Verb = "runas"
- p.StartInfo = pi
- p.Start()
- End Sub
- Private Sub Work_BTN_Click(sender As Object, e As RoutedEventArgs)
- Process.Start("G:\Windows_Profiles\Users\Zeljko\Desktop\Remove.bat")
- Process.Start("G:\Windows_Profiles\Users\Zeljko\Desktop\Arbeit.bat")
- ChangeResulution(1920, 1080)
- Process.Start("G:\Windows_Profiles\Users\Zeljko\Desktop\Desktop+.url")
- End Sub
- Private Sub ChangeResulution(ByVal DP_Width As Integer, ByVal DP_Height As Integer)
- Dim dmCurrResolution As DEVMODE 'Create Resolution Object
- Dim dmResolutions() As DEVMODE 'Create Resolution Array Because There Will Be More Than One Screen
- Dim ddCurrDisplay As DISPLAY_DEVICE 'Create DisplayDevice Object
- Dim ddDevices() As DISPLAY_DEVICE 'Create Display Device Array Because There Will Be More Than One Screen
- Dim intResult As Integer = 1 'Result Of EnumDisplayDevices API Call
- Dim sMonitors As Integer 'How Many Monitors?
- 'Loop Through All Available Monitors And get Their Current Settings
- Do While intResult <> 0 'Do While There Are Monitors
- ddCurrDisplay.cb = Marshal.SizeOf(ddCurrDisplay) 'Initialize Current Display Object
- dmCurrResolution.dmSize = CShort(Marshal.SizeOf(dmCurrResolution)) 'get Size
- intResult = EnumDisplayDevices(0, sMonitors, ddCurrDisplay, 0) 'Determine Number Of Monitors
- 'Determine How Monitors Are Connected To System
- If ddCurrDisplay.StateFlags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP Or
- ddCurrDisplay.StateFlags = DISPLAY_PRIMARY_DEVICE Or
- ddCurrDisplay.StateFlags = (DISPLAY_DEVICE_ATTACHED_TO_DESKTOP Or DISPLAY_PRIMARY_DEVICE) Then
- ReDim Preserve ddDevices(sMonitors) 'Allocate Space For Each Monitor In Array
- ddDevices(sMonitors) = ddCurrDisplay 'Store Their Settings
- End If
- sMonitors += 1 'Increment
- Loop
- 'Loop Through All Monitors And Set Resolution
- For sMonitors = 0 To UBound(ddDevices)
- Debug.Print(ddDevices(sMonitors).DeviceString & "- " & ddDevices(sMonitors).DeviceName)
- ReDim Preserve dmResolutions(sMonitors)
- If ddDevices(sMonitors).DeviceString = "USB Mobile Monitor Virtual Display" Then
- 'Determine Size
- dmResolutions(sMonitors).dmSize = CShort(Marshal.SizeOf(dmResolutions(sMonitors)))
- dmResolutions(sMonitors).dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL 'Get Settings
- dmResolutions(sMonitors).dmPelsWidth = DP_Width 'Change X
- dmResolutions(sMonitors).dmPelsHeight = DP_Height 'Change Y
- dmResolutions(sMonitors).dmBitsPerPel = 32 ' Use Correct BPP Setting, Could Be 8, 16, 32 Or 4
- 'Change
- intResult = ChangeDisplaySettingsEx(ddDevices(sMonitors).DeviceName, dmResolutions(sMonitors), 0, CDS_UPDATEREGISTRY, 0)
- If intResult = -1 Then 'Error Thrown
- MessageBox.Show("Invalid Setting")
- End If
- End If
- Next
- End Sub
- End Class
Ich hatte erst versucht über process.start direkt die cmd's aufzurufen, jedoch hat das auch nicht geholfen deshalb habe ich das dann versucht direkt im Programm zu verarbeiten.
Code-Tags eingefügt. Spoiler-Tag eingefügt. (Der Code ist doch recht lang, da kann man den schon mal spendieren ) Thunderbolt
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()