vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Maus & Tastatur · Tastatursteuerung   |   VB-Versionen: VB.NET14.04.08
WMI - Win32_Keyboard - Informationen ermitteln

Mit diesem Klassen-Modul ist es möglich einige Informationen über die Tastatur zu ermitteln.

Autor:   Heinz PrelleBewertung:  Views:  12.532 
www.visual-basic5.deSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 
' Wird zur Ermittlung der WMI Informationen benoetigt
Imports System.Management
 
Public Class GetKeyBoardInformations
  ''' <summary>
  ''' Übernimmt eine kurze Objektbeschreibung
  ''' </summary>
  Private _caption As String
 
  ''' <summary>
  ''' Übernimmt die Objektbeschreibung
  ''' </summary>
  Private _description As String
 
  ''' <summary>
  ''' Übernimmt Adressinformation
  ''' </summary>
  Private _deviceid As String
 
  ''' <summary>
  ''' Übernimmt einen boolschen Wert der angibt ob das 
  ''' Keyboard "locked" ist oder nicht
  ''' </summary>
  Private _islocked As Boolean
 
  ''' <summary>
  ''' Übernimmt eine Zeichenkette die das Keyboard-Layout identifiziert
  ''' </summary>
  Private _layout As String
 
  ''' <summary>
  ''' Übernimmt eine Zeichenkette die das Keyboard beschreibt
  ''' </summary>
  Private _name As String
 
  ''' <summary>
  ''' Übernimmt die Anzahl der Funktionstasten
  ''' </summary>
  Private _numberoffunctionkeys As String
 
  ''' <summary>
  ''' Initalisierung
  ''' </summary>
  Public Sub New()
    ' Klassen-Funktion zur Initialisierung aufrufen
    KeyBoardInformations()
  End Sub
 
  ''' <summary>
  ''' Tabulator. Wird hier zur Zeichenkettenformatierung benötigt
  ''' </summary>
  Private ReadOnly Property Tab() As Char
    Get
      Return Convert.ToChar(9)
    End Get
  End Property
 
  ''' <summary>
  ''' Rueckgabe der Ergebnisse aus den einzelnen Prozeduren
  ''' </summary>
  Public Overrides Function ToString() As String
    ' StringBuilder zur Informationsaufnahme deklarieren / initialisieren
    Dim sb As New System.Text.StringBuilder
    ' Fehlerüberwachung einschalten
    Try
      ' Die Informationen werden im StringBuilder zusammengefasst
      sb.Append("\n\tCaption:\a\b" & Me.ReturnKeyBoardCaption)
      sb.Append("\n\tDescription:\a" & Me.ReturnKeyBoardDescription)
      sb.Append("\n\tDeviceID:\a\b" & Me.ReturnKeyBoardDeviceID)
      sb.Append("\n\tIsLocked:\a\b" & Me.ReturnKeyBoardIsLocked)
      sb.Append("\n\tLayout:\a\b" & Me.ReturnKeyBoardLayout)
      sb.Append("\n\tName:\a\b" & Me.ReturnKeyBoardName)
      sb.Append("\n\tFunctionKeys:\a" & Me.ReturnKeyBoardNumberOfFunctionKeys)
      ' "\n" wird ausgewechselt durch Zeilenumbruch
      sb.Replace("\n", vbCrLf)
      ' "t" wird ausgewechselt durch einen Tabulator - Ermöglicht 
      ' einen größeren rechten Rand
      sb.Replace("\t", Tab)
      ' "\a" und / oder "\b" wird durch einen / zwei Tabulator/en 
      ' ausgewechselt um Bezeichnung und Beschreibung zu trennen
      sb.Replace("\a", Tab)
      sb.Replace("\b", Tab)
      ' Rückgabe es StringBuilders als String
      Return sb.ToString()
    Catch ex As Exception
      ' Eventuell auftretenden Fehler abfangen und
      ' Fehlermeldung ausgeben
      MessageBox.Show(ex.Message.ToString(), "Info")
    End Try
    ' Leeren String zurückgeben
    Return ""
  End Function
 
  ''' <summary>
  ''' Initialisert die einzelnen Variablen mit den benoetigten Werten
  ''' </summary>
  Private Sub KeyBoardInformations()
    ' Fehlerueberwachung einschalten
    Try
      ' Abfragestring
      Dim query As String = "Select * from Win32_Keyboard"
      ' ManagementObjectSearcher intitialisieren
      Dim mos As ManagementObjectSearcher = New ManagementObjectSearcher(query)
      Dim moc As ManagementObjectCollection = mos.Get()
      ' ManagementObject deklarieren
      Dim mo As ManagementObject
      Const err As String = "Fehler"
      ' Schleifendurchlauf um die benötigten Informationen an die einzelnen
      ' Variablen zu übergeben. Sollte es nicht möglich sein eine bestimmte
      ' Information zu ermitteln wird an die entsprechende Variable eine
      ' Hinweis übergeben.
      For Each mo In moc
        ' Caption:   Objektbeschreibung
        If (Not mo("Caption") Is Nothing) Then
          _caption = mo("Caption").ToString()
        Else
          _caption = err
        End If
        ' Description    Objektbeschreibung
        If (Not mo("Description") Is Nothing) Then
          _description = mo("Description").ToString()
        Else
          _description = err
        End If
        ' DeviceID   Adressinformation
        If (Not mo("DeviceID") Is Nothing) Then
          _deviceid = mo("DeviceID").ToString()
        Else
          _deviceid = err
        End If
        ' IsLocked   Ist das Ergebnis True ist das Geraet blockiert
        If (Not mo("IsLocked") Is Nothing) Then
          _islocked = Convert.ToBoolean(mo("IsLocked"))
        Else
          _islocked = Nothing
        End If
        ' Layout Identifiziert das Keyboard-Layout
        If (Not mo("Layout") Is Nothing) Then
          _layout = mo("Layout").ToString()
        Else
          _layout = err
        End If
        ' Name   Zeichenkette die das Keyboard beschreibt
        If (Not mo("Name") Is Nothing) Then
          _name = mo("Name").ToString()
        Else
          _name = err
        End If
        ' NumberOfFunctionKeys   Ermittelt die Anzahl der Funktionstasten
        If (Not mo("NumberOfFunctionKeys") Is Nothing) Then
          _numberoffunctionkeys = mo("NumberOfFunctionKeys").ToString()
        Else
          _numberoffunctionkeys = err
        End If
      Next
    Catch ex As ManagementException
      ' Sollte ein Fehler auftreten wird dieser abgefangen
      ' und Fehlermeldung ausgeben
      MessageBox.Show(ex.Message.ToString(), "Info [ManagementException]")
    Catch ex As Exception
      ' Fehlermeldung ausgeben
      MessageBox.Show(ex.Message.ToString(), "Info [Exception]")
    End Try
  End Sub
 
  ''' <summary>
  ''' Gibt die Objektbeschreibung zurück
  ''' </summary>
  Public ReadOnly Property ReturnKeyBoardCaption() As String
    Get
      Return _caption
    End Get
  End Property
 
  ''' <summary>
  ''' Gibt die Objektbeschreibung zurück
  ''' </summary>
  Public ReadOnly Property ReturnKeyBoardDescription() As String
    Get
      Return _description
    End Get
  End Property
 
  ''' <summary>
  ''' Gibt die Keyboard ID zurück
  ''' </summary>
  Public ReadOnly Property ReturnKeyBoardDeviceID() As String
    Get
      Return _deviceid
    End Get
  End Property
 
  ''' <summary>
  ''' Gibt den Status ob das Keyboard "Locked" ist oder nicht zurück
  ''' </summary>
  Public ReadOnly Property ReturnKeyBoardIsLocked() As Boolean
    Get
      Return _islocked
    End Get
  End Property
 
  ''' <summary>
  ''' Gibt das Keyboard-Layout zurück
  ''' </summary>
  Public ReadOnly Property ReturnKeyBoardLayout() As String
    Get
      ' Fehlerüberwachung einschalten
      Try
        ' Ist die Länge der Variable _layout mehr/gleich 3 dann...
        If _layout.Length >= 3 Then
          ' ... nimmt die Variable Result die ersten 3 Zeichen aus _layout auf
          Dim Result As String = _layout.Substring(_layout.Length - 3)
          ' Ist das Ergebnis aus Result = 407 wird...
          If Result = "407" Then
            ' ... die auszugebende Zeichenkette zusammengesetzt.
            Return "German Keyboard: " + Result
          Else
            ' ... sonst wird die gesamt ermittelte Zeichenkette zurückgegeben
            Return Result
          End If
        Else
          ' ... enspricht _layout nicht den Vorgaben wird "" zurückgegeben
          Return ""
        End If
      Catch ex As Exception
        ' Eventuell auftretenden Fehler abfangen
        ' und Fehlermeldung ausgeben
        MessageBox.Show(ex.Message.ToString(), "Info - [ReturnKeyBoardLayout]")
      End Try
      ' Leere Rückgabe
      Return ""
    End Get
  End Property
 
  ''' <summary>
  ''' Gibt die Beschreibung des Keyboard's zurück
  ''' </summary>
  Public ReadOnly Property ReturnKeyBoardName() As String
    Get
      Return _name
    End Get
  End Property
 
  ''' <summary>
  ''' Gibt die Anzahl der Funktionstasten zurück
  ''' </summary>
  Public ReadOnly Property ReturnKeyBoardNumberOfFunctionKeys() As String
    Get
      Return _numberoffunctionkeys
    End Get
  End Property
End Class

Aufrufbeispiel:

Erstellen Sie ein neues Projekt und fügen den Verweis "System.Management" hinzuf. Fügen Sie obigen Code in den Codeteil der Form ein. Platzieren Sie noch einen Button auf die Form und hinterlegen im Click-Event folgenden Code.

Private Sub Button1_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button1.Click
 
  ' Fehlerüberwachung einschalten
  Try
    ' Klasse initialisieren
    Dim gkbi As New GetKeyBoardInformations()
    ' Werte ausgeben
    MessageBox.Show(gkbi.ToString(), "Info")
  Catch ex As Exception
    ' Eventuell auftretenden Fehler abfangen
    ' und Fehlermeldung ausgeben
    MessageBox.Show(ex.Message.ToString(), "Info")
  End Try
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!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.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


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.