Ich brauchte für mein Programm eine Combobox, mittels der ein User einen speziellen Monitor aus seinem Multiscreen-System auswählen kann. Die Auswahl soll anhand der Produktnamen der Monitore erfolgen können. Durch diese Auswahl wird gleichzeitig der dem Monitor zugeordnete Displayname bereitgestellt (über diesen kann man dann ermitteln, ob der gewählte Monitor der PrimaryScreen ist oder nicht, u.ä.). Das Ganze wird über die API-Funktion EnumDisplayDevices realisiert. Imports System.Runtime.InteropServices Module Module1 <DllImport("user32.dll")> _ Private Function EnumDisplayDevices(ByVal lpDevice As String, _ ByVal iDevNum As Integer, _ ByRef lpDisplayDevice As DISPLAY_DEVICE, _ ByVal dwFlags As Integer) As Boolean End Function ' Benötigte API-Struktur Public Structure DISPLAY_DEVICE <MarshalAs(UnmanagedType.U4)> _ Public cb As Integer <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _ Public DeviceName As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> _ Public DeviceString As String <MarshalAs(UnmanagedType.U4)> _ Public StateFlags As Integer <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> _ Public DeviceID As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> _ Public DeviceKey As String End Structure Public Function GetSystemDisplayDevices() As Dictionary(Of String, String) Dim drf As New Dictionary(Of String, String) Dim iDevNum As Long, sDeviceName As String Dim dev As DISPLAY_DEVICE ' Abfrage aller Display-Geräte im System durch den Aufruf von ' EnumDisplayDevices in einer Schleife, ' beginnend mit iDevNum = 0, und erhöhen, bis die Funktion fehlschlägt ' (Aufruf gibt nicht Null zurück, wenn wahr oder 0, wenn false). dev.cb = Marshal.SizeOf(dev) iDevNum = 0 Do While EnumDisplayDevices(vbNullString, iDevNum, dev, 0&) sDeviceName = dev.DeviceName ' Wenn als lpDevice null zurückgegeben wurde, ist es eine Information ' über den Adapter des Displays. ' Durch den erneuten Aufruf der API-Funktion, dieses Mal unter Angabe ' lpDevice = dev.devicename und iDevNum = 0, gibt der Aufruf ' Informationen über den angeschlossenen Monitor am speziellen Gerät zurück. If EnumDisplayDevices(sDeviceName, 0, dev, 0&) <> 0 Then drf.Add((iDevNum + 1).ToString & " - " & dev.DeviceString, _ Replace(Replace(sDeviceName, ".", ""), "\", "")) End If iDevNum += 1 Loop Return drf End Function End Module Die Funktion "GetSystemDisplayDevices" stellt die benötigten Daten bereit, und zwar in Form eines Dictionary. Grund dafür ist die spätere Zuordnung der Monitordaten zu einer Combobox. Im Programm selbst schreibt man an der erforderlichen Stelle den Code für den Aufruf, unter der Voraussetzung folgender Vereinbarung: Dim displ As Dictionary(Of String, String) Und nun kann man die Auflistung der Combobox erzeugen: displ = GetSystemDisplayDevices() With ComboBox1 If displ.Count > 0 Then .DataSource = New BindingSource(displ, Nothing) .ValueMember = "Value" .DisplayMember = "Key" End If End With Im SelectedIndexChanged-Ereignis der Combobox erhält man mittels... Dim DisplayName As String = DirectCast(ComboBox1.SelectedItem, _ KeyValuePair(Of String, String)).Value Dim MonitorName As String = Split(DirectCast(ComboBox1.SelectedItem, _ KeyValuePair(Of String, String)).Key, " - ")(1) ...jeweils die ausgewählten Daten. Dieser Tipp wurde bereits 8.887 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |