Aus Lust und Laune dachte ich mir, da es ein öfters gefragtes und ebenso hilfreiches Themengebiet ist, dass ich mir einmal ein bisschen Zeit.
Natürlich benötigt man für die erfolgreiche Ausführung dieses Tutorials diverse Grundkenntnisse.
Den Stil dieses Tutorials habe ich von @nikeee13 übernommen.
Diesen Artikel können Sie ebenfalls auf meiner Website finden: gather.pf-control.de (Website im Aufbau).
Dieser besitzt dort mehr Features bzw. ist ausgebauter und besser Formatiert, da dies hier nicht möglich war.
Was ist WMI?
WMI oder auf Windows-Management Instrument ist eine grundlegende Verwaltungstechnologie in Windows.
Mit Hilfe von ihr, können sie sowohl lokale Computer als auch Remotecomputer verwalten. Ebenso bietet WMI eine ausgezeichnete Schnittstelle,
zum Auslesen von Systeminformationen. Mit dieser werden wir uns in diesem Tutorial befassen. Wir werden Informationen über die CPU, die Grafikkarte,
das BIOS uvm. auslesen. Natürlich ist noch mehr ganz einfach möglich.
Ein paar andere Features die WMI Ihnen bietet sind neben dem Starten von Prozessen auf Remotecomputern, das Planen eines Prozesses oder das Neustarten
auf bzw. eines Remotecomputers.
MSDN-Seite zu WMI: msdn.microsoft.com/en-us/libra…op/aa394582(v=vs.85).aspx
Wikipedia-Artikel: en.wikipedia.org/wiki/Windows_Management_Instrumentation
Was benötigen Sie?
Die Grundvorraussetzung für das Nutzen von WMI ist logischerweise die System.Management.dll, die normalerweise in dem Framework 3.0 zu finden ist.
Wenn Sie dennoch WMI unter einem niedrigerem Framework benutzen wollen, müssen Sie sich die .dll manuell herunterladen. Diese finden Sie unten im Anhang.
Ebenso ein sehr hilfreiches Produkt von Microsoft ist der WMI Code-Creator, der das Nutzen und Auslesen von Systeminformationen mit WMI erheblich vereinfacht.
Diesen können Sie hier herunterladen:
microsoft.com/en-us/download/details.aspx?id=8572
Los geht's!
Grundsätzlich funktioniert das Auslesen von Systeminformationen mit Hilfe des WMI-Codecreators kinderleicht.
Man startet Ihn, und lässt sich den Code in der gewünschten Sprache ausgeben.
In meinem Falle habe ich mir sehr einfach den Prozessor-Namen ausgeben lassen:
Grundsätzlich kann man das schon so lassen, und in einer Konsolenanwendung einbauen bzw. verwenden.
Dies würde schon zu einem guten und hilfreichen Ergebnis kommen. In meinem Fall sieht meine erhaltene Informationen in der Konsolen-Anwendung so aus:
Nun stellen wir uns für wir wollen diesen Code in einer WPF-Anwendung oder einer Windows Forms Anwendungs zum Laufen bringen.
Dazu müssen wir logischerweise eine Funktion erstellen.
Schauen wir uns nun, diese Funktion etwas genauer an…
Als aller ersten, müssen wir einen “Sucher” erstellen. Da wir mit WMI arbeiten, müssen wir diesen als New ManagementObjectSearcher definieren.
Natürlich benötigt unser “Sucher” noch Informationen wo, und was er suchen soll. Dies ist in unserem Fall das Oberverzeichnis “root\CIMV2“. Hier befinden sich die meisten Systeminformationen.
Nun müssen wir ihm noch genauere Informationen übergeben. Diese sind in meinem Fall, da ich den CPU Namen auslesen will: “SELECT * FROM Win32_Processor“
Und schon ist unser Such-Objekt erstellt.
Als nächster Schritt müssen wir dem Query, der sich “in” unserem Such-Objekt befindet noch das QueryObjekt übergeben.
Dies ist die Informationen die wir in Win32_Processor suchen wollen. In meinem Fall ist dies der Prozessorname.
Dazu müssen Sie zuerst das QueryObjekt erstellen bzw. definieren.
Wie Sie erkennen können, habe ich das QueryObjekt in eine For Each Schleife eingebaut.
Grundsätzlich habe ich das deshalb gemacht, weil es machmal mehr als nur eine Information zu einem Punkt gibt.
Da wir schon unser QueryObjekt erstellt haben übergeben wir dem Sucher nun die Information, dass er nach dem Namen des Prozessors suchen soll.
Natürlich sollten Sie nun noch die For Each Schleife mit einem Next schließen.
Eigentlich war das schon unsere komplette Funktion. In meinem Fall habe ich jedoch die Such-Routine noch in einen Try – Catch – Block eingebaut damit, fall ein Fehler auftritt, mir das mit einem “Error” übermittelt wird.
Mit dem WMI Code-Creator arbeiten.
Kommen wir nun zu dem Teil, in dem ich Ihnen zeigen möchte wie Sie mit Hilfe des WMI Code-Creators (o. Generators) arbeiten können.
Ich persönlich verwende ihn nicht zur Code-Ausgabe, sondern nur zum Durchforsten der diversen Verzeichnisse. Wie mache ich das?
Im Großen und Ganzen ist dies sehr simpel. Sie laden sich den WMI Code-Creator herunter, und starten ihn einfach. Nun können Sie oben in den zwei Comboboxen den Namespace bzw. die Klasse auswählen.
Wenn Sie ebenfalls nach Systeminformationen suchen, empfehle ich Ihnen den CIMV2 Namespace, da sich hier die meisten Informationen befinden. Nun können Sie in der Combobox darunter die Klasse auswählen. Dort finden Sie massenhaft Informationen zu Ihrer Grafikkarte, Ihrem BIOS, Ihrem Motherboard, Ihrem Akku , Ihrer CPU, Ihren USB-Geräten uvm.
Nachdem Sie Ihre gewünschte Klasse gefunden haben, können Sie es wie ich machen. Wir haben uns ja oben schon eine Grundfunktion zusammengestellt. Diese können wir nun weiterhin nutzen, müssen aber natürlich die Klasse und das QueryObjekt umschreiben. Dazu benötige wir den Klassennamen bzw. den Namen der Eigenschaft für das QueryObjekt. Diese haben wir beide, entweder im schon vom WMI Code-Creator erstelltem Code rechts, oder in der Combo- bzw. Listbox, in der wir das Objekt ausgewählt haben.
Abb. 1: Der WMI Code-Creator. Ausgewählt wurde der CPU Name.
Diverse andere Funktionen.
Zum Abschluss möchte ich Ihnen noch ein paar andere hilfreiche Snippets und Informationen auf den Weg geben, mit denen Sie arbeiten können.
Im Prinzip arbeiten sie alle gleich, jedoch habe ich sie deswegen hinzugefügt, weil sie sehr oft gefragt sind. Desweiteren sind dies alles nur Beispiele.
Grafikkarte (GPU)
Grafikkartenname auslesen
Grafikkartentreiber auslesen
Prozessor (CPU)
ProzessorID auslesen
BIOS
BIOS-Namen auslesen
BIOS-Seriennummer auslesen
Sound-Geräte
Namen der Sound-Geräte auslesen
Diverse andere hilfreiche Klassen
Ich habe an dieser Stelle eine kleine Liste von den meiner Meinung nach meistegefragtesten Klassen zusammengestellt.
Diese ist dafür da, damit Sie nicht lange suchen müssen. All diese Klassen befinden sich in dem CIMV2 Namespace
Das war's!
Das war auch schon das komplette Tutorial.
Ich hoffe ich konnte Ihnen damit weiterhelfen.
Ich habe für Sie zum Schluss noch ein paar Downloads hinzugefügt. Diese finden Sie im Anhang.
Mit freundlichen Grüßen
Martin Pfeiffer (Gather)
Natürlich benötigt man für die erfolgreiche Ausführung dieses Tutorials diverse Grundkenntnisse.
Den Stil dieses Tutorials habe ich von @nikeee13 übernommen.
Diesen Artikel können Sie ebenfalls auf meiner Website finden: gather.pf-control.de (Website im Aufbau).
Dieser besitzt dort mehr Features bzw. ist ausgebauter und besser Formatiert, da dies hier nicht möglich war.
Was ist WMI?
WMI oder auf Windows-Management Instrument ist eine grundlegende Verwaltungstechnologie in Windows.
Mit Hilfe von ihr, können sie sowohl lokale Computer als auch Remotecomputer verwalten. Ebenso bietet WMI eine ausgezeichnete Schnittstelle,
zum Auslesen von Systeminformationen. Mit dieser werden wir uns in diesem Tutorial befassen. Wir werden Informationen über die CPU, die Grafikkarte,
das BIOS uvm. auslesen. Natürlich ist noch mehr ganz einfach möglich.
Ein paar andere Features die WMI Ihnen bietet sind neben dem Starten von Prozessen auf Remotecomputern, das Planen eines Prozesses oder das Neustarten
auf bzw. eines Remotecomputers.
MSDN-Seite zu WMI: msdn.microsoft.com/en-us/libra…op/aa394582(v=vs.85).aspx
Wikipedia-Artikel: en.wikipedia.org/wiki/Windows_Management_Instrumentation
Was benötigen Sie?
Die Grundvorraussetzung für das Nutzen von WMI ist logischerweise die System.Management.dll, die normalerweise in dem Framework 3.0 zu finden ist.
Wenn Sie dennoch WMI unter einem niedrigerem Framework benutzen wollen, müssen Sie sich die .dll manuell herunterladen. Diese finden Sie unten im Anhang.
Ebenso ein sehr hilfreiches Produkt von Microsoft ist der WMI Code-Creator, der das Nutzen und Auslesen von Systeminformationen mit WMI erheblich vereinfacht.
Diesen können Sie hier herunterladen:
microsoft.com/en-us/download/details.aspx?id=8572
Los geht's!
Grundsätzlich funktioniert das Auslesen von Systeminformationen mit Hilfe des WMI-Codecreators kinderleicht.
Man startet Ihn, und lässt sich den Code in der gewünschten Sprache ausgeben.
In meinem Falle habe ich mir sehr einfach den Prozessor-Namen ausgeben lassen:
VB.NET-Quellcode
- Imports System
- Imports System.Management
- Imports System.Windows.Forms
- Namespace WMISample
- Public Class MyWMIQuery
- Public Overloads Shared Function Main() As Integer
- Try
- Dim searcher As New ManagementObjectSearcher( _
- "root\CIMV2", _
- "SELECT * FROM Win32_Processor")
- For Each queryObj As ManagementObject In searcher.Get()
- Console.WriteLine("-----------------------------------")
- Console.WriteLine("Win32_Processor instance")
- Console.WriteLine("-----------------------------------")
- Console.WriteLine("Name: {0}", queryObj("Name"))
- Next
- Catch err As ManagementException
- MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
- End Try
- End Function
- End Class
- End Namespace
Grundsätzlich kann man das schon so lassen, und in einer Konsolenanwendung einbauen bzw. verwenden.
Dies würde schon zu einem guten und hilfreichen Ergebnis kommen. In meinem Fall sieht meine erhaltene Informationen in der Konsolen-Anwendung so aus:
Nun stellen wir uns für wir wollen diesen Code in einer WPF-Anwendung oder einer Windows Forms Anwendungs zum Laufen bringen.
Dazu müssen wir logischerweise eine Funktion erstellen.
VB.NET-Quellcode
- ''' <summary>
- ''' Funktion um den Namen der CPU zu ermitteln
- ''' </summary>
- ''' <returns> String </returns>
- ''' <remarks></remarks>
- Shared Function getName() As String
- Try
- Dim searcher As New ManagementObjectSearcher( _
- "root\CIMV2", _
- "SELECT * FROM Win32_Processor")
- For Each queryObj As ManagementObject In searcher.Get()
- Return queryObj("Name").ToString
- Next
- Catch err As ManagementException
- Return "Error"
- End Try
- End Function
Schauen wir uns nun, diese Funktion etwas genauer an…
Als aller ersten, müssen wir einen “Sucher” erstellen. Da wir mit WMI arbeiten, müssen wir diesen als New ManagementObjectSearcher definieren.
Natürlich benötigt unser “Sucher” noch Informationen wo, und was er suchen soll. Dies ist in unserem Fall das Oberverzeichnis “root\CIMV2“. Hier befinden sich die meisten Systeminformationen.
Nun müssen wir ihm noch genauere Informationen übergeben. Diese sind in meinem Fall, da ich den CPU Namen auslesen will: “SELECT * FROM Win32_Processor“
Und schon ist unser Such-Objekt erstellt.
Als nächster Schritt müssen wir dem Query, der sich “in” unserem Such-Objekt befindet noch das QueryObjekt übergeben.
Dies ist die Informationen die wir in Win32_Processor suchen wollen. In meinem Fall ist dies der Prozessorname.
Dazu müssen Sie zuerst das QueryObjekt erstellen bzw. definieren.
Wie Sie erkennen können, habe ich das QueryObjekt in eine For Each Schleife eingebaut.
Grundsätzlich habe ich das deshalb gemacht, weil es machmal mehr als nur eine Information zu einem Punkt gibt.
Da wir schon unser QueryObjekt erstellt haben übergeben wir dem Sucher nun die Information, dass er nach dem Namen des Prozessors suchen soll.
Natürlich sollten Sie nun noch die For Each Schleife mit einem Next schließen.
Eigentlich war das schon unsere komplette Funktion. In meinem Fall habe ich jedoch die Such-Routine noch in einen Try – Catch – Block eingebaut damit, fall ein Fehler auftritt, mir das mit einem “Error” übermittelt wird.
Mit dem WMI Code-Creator arbeiten.
Kommen wir nun zu dem Teil, in dem ich Ihnen zeigen möchte wie Sie mit Hilfe des WMI Code-Creators (o. Generators) arbeiten können.
Ich persönlich verwende ihn nicht zur Code-Ausgabe, sondern nur zum Durchforsten der diversen Verzeichnisse. Wie mache ich das?
Im Großen und Ganzen ist dies sehr simpel. Sie laden sich den WMI Code-Creator herunter, und starten ihn einfach. Nun können Sie oben in den zwei Comboboxen den Namespace bzw. die Klasse auswählen.
Wenn Sie ebenfalls nach Systeminformationen suchen, empfehle ich Ihnen den CIMV2 Namespace, da sich hier die meisten Informationen befinden. Nun können Sie in der Combobox darunter die Klasse auswählen. Dort finden Sie massenhaft Informationen zu Ihrer Grafikkarte, Ihrem BIOS, Ihrem Motherboard, Ihrem Akku , Ihrer CPU, Ihren USB-Geräten uvm.
Nachdem Sie Ihre gewünschte Klasse gefunden haben, können Sie es wie ich machen. Wir haben uns ja oben schon eine Grundfunktion zusammengestellt. Diese können wir nun weiterhin nutzen, müssen aber natürlich die Klasse und das QueryObjekt umschreiben. Dazu benötige wir den Klassennamen bzw. den Namen der Eigenschaft für das QueryObjekt. Diese haben wir beide, entweder im schon vom WMI Code-Creator erstelltem Code rechts, oder in der Combo- bzw. Listbox, in der wir das Objekt ausgewählt haben.
Abb. 1: Der WMI Code-Creator. Ausgewählt wurde der CPU Name.
Diverse andere Funktionen.
Zum Abschluss möchte ich Ihnen noch ein paar andere hilfreiche Snippets und Informationen auf den Weg geben, mit denen Sie arbeiten können.
Im Prinzip arbeiten sie alle gleich, jedoch habe ich sie deswegen hinzugefügt, weil sie sehr oft gefragt sind. Desweiteren sind dies alles nur Beispiele.
Grafikkartenname auslesen
VB.NET-Quellcode
- Shared Function getName() As String
- Try
- Dim searcher As New ManagementObjectSearcher( _
- "root\CIMV2", _
- "SELECT * FROM Win32_VideoController")
- For Each queryObj As ManagementObject In searcher.Get()
- Return queryObj("Name").ToString
- Next
- Catch err As ManagementException
- Return "Error"
- End Try
- End Function
Grafikkartentreiber auslesen
VB.NET-Quellcode
- Shared Function getDriverVersion() As String
- Try
- Dim searcher As New ManagementObjectSearcher( _
- "root\CIMV2", _
- "SELECT * FROM Win32_VideoController")
- For Each queryObj As ManagementObject In searcher.Get()
- Return queryObj("DriverVersion").ToString
- Next
- Catch err As ManagementException
- Return "Error"
- End Try
- End Function
ProzessorID auslesen
VB.NET-Quellcode
- Shared Function getProcessorId() As String
- Try
- Dim searcher As New ManagementObjectSearcher( _
- "root\CIMV2", _
- "SELECT * FROM Win32_Processor")
- For Each queryObj As ManagementObject In searcher.Get()
- Return queryObj("ProcessorId").ToString
- Next
- Catch err As ManagementException
- Return "Error"
- End Try
- End Function
BIOS-Namen auslesen
VB.NET-Quellcode
BIOS-Seriennummer auslesen
VB.NET-Quellcode
- Shared Function getSerialNumber() As String
- Try
- Dim searcher As New ManagementObjectSearcher( _
- "root\CIMV2", _
- "SELECT * FROM Win32_BIOS")
- For Each queryObj As ManagementObject In searcher.Get()
- Return queryObj("SerialNumber").ToString
- Next
- Catch err As ManagementException
- Return "Error"
- End Try
- End Function
Namen der Sound-Geräte auslesen
VB.NET-Quellcode
- Shared Function getNames() As List(Of String)
- Dim Liste As New List(Of String)
- Try
- Dim searcher As New ManagementObjectSearcher( _
- "root\CIMV2", _
- "SELECT * FROM Win32_SoundDevice")
- For Each queryObj As ManagementObject In searcher.Get()
- Liste.Add(queryObj("Name").ToString)
- Next
- Catch err As ManagementException
- End Try
- Return Liste
- End Function
Ich habe an dieser Stelle eine kleine Liste von den meiner Meinung nach meistegefragtesten Klassen zusammengestellt.
Diese ist dafür da, damit Sie nicht lange suchen müssen. All diese Klassen befinden sich in dem CIMV2 Namespace
- Win32_BaseBoard
- Win32_Battery
- Win32_BIOS
- Win32_Bus
- Win32_CDROMDrive
- Win32_CurrentProbe
- Win32_Desktop
- Win32_DesktopMonitor
- Win32_DiskDrive
- Win32_Fan
- Win32_FloppyDrive
- Win32_HeatPipe
- Win32_Keyboard
- Win32_LocalTime
- Win32_LoggedOnUser
- Win32_LogicalDisk
- Win32_MotherboardDevice
- Win32_OnBoardDevice
- Win32_OperatingSystem
- Win32_PNPDevice
- Win32_Printer
- Win32_Processor
- Win32_SerialPort
- Win32_SoundDevice
- Win32_TapeDrive
- Win32_SystemDriver
- Win32_USBController
- Win32_USBHub
- Win32_VideoController
- Win32_VoltageProbe
Das war's!
Das war auch schon das komplette Tutorial.
Ich hoffe ich konnte Ihnen damit weiterhelfen.
Ich habe für Sie zum Schluss noch ein paar Downloads hinzugefügt. Diese finden Sie im Anhang.
Mit freundlichen Grüßen
Martin Pfeiffer (Gather)