Ganz einfach informationen aus der WMI Auslesen

    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von syntax868.

      Ganz einfach informationen aus der WMI Auslesen

      Da ich hier immer wieder Probleme mit der WMI sehe, auch selber welche hatte, will ich euch hier mal n kleinen Code anbieten:

      Oft wird gefragt "wie lese ich das und dass aus" "wie krieg ich die CPU ID raus" "woher krieg ich die information wie viel arbeitsspeicher im PC ist" und so weiter... Hier mal eine Allgemein gültige Anleitung:

      Schritt 1: Der Download des Hilftools

      Microsoft ist mal zu was zu Gebrauchen! Sie haben ein Nützliches kleines Tool geschrieben (Scriptomatic) mit welchem sich eigentlich Scripts schreiben lassen, um die WMI auszulesen... Aber wir Nutzen es mal für Unsere Zwecke... Das Tool gibs hier:

      microsoft.com/downloads/en/det…c5-41e7-9da8-212c414a7ab0

      Ladet es Herrunter, entpackt es mit dem Installer aufn Desktop und startet es (dauert n bischen)

      Schritt 2: Die klasse Wählen

      Haben wirs nun gestarte, sehen wir folgenden Bildschirm:



      Hier haben wir nun die Möglichkeit eine Klasse auszuwählen.. Nehmen wir mal beispielsweise die Processor Klasse:



      Nun sehen wir folgendes:

      On Error Resume Next
      strComputer = "."
      Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
      Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor",,48)
      For Each objItem in colItems
      Wscript.Echo "AddressWidth: " & objItem.AddressWidth
      Wscript.Echo "Architecture: " & objItem.Architecture
      Wscript.Echo "Availability: " & objItem.Availability
      Wscript.Echo "Caption: " & objItem.Caption
      Wscript.Echo "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
      Wscript.Echo "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig
      Wscript.Echo "CpuStatus: " & objItem.CpuStatus
      Wscript.Echo "CreationClassName: " & objItem.CreationClassName
      Wscript.Echo "CurrentClockSpeed: " & objItem.CurrentClockSpeed
      Wscript.Echo "CurrentVoltage: " & objItem.CurrentVoltage
      Wscript.Echo "DataWidth: " & objItem.DataWidth
      Wscript.Echo "Description: " & objItem.Description
      Wscript.Echo "DeviceID: " & objItem.DeviceID
      Wscript.Echo "ErrorCleared: " & objItem.ErrorCleared
      Wscript.Echo "ErrorDescription: " & objItem.ErrorDescription
      Wscript.Echo "ExtClock: " & objItem.ExtClock
      Wscript.Echo "Family: " & objItem.Family
      Wscript.Echo "InstallDate: " & objItem.InstallDate
      Wscript.Echo "L2CacheSize: " & objItem.L2CacheSize
      Wscript.Echo "L2CacheSpeed: " & objItem.L2CacheSpeed
      Wscript.Echo "L3CacheSize: " & objItem.L3CacheSize
      Wscript.Echo "L3CacheSpeed: " & objItem.L3CacheSpeed
      Wscript.Echo "LastErrorCode: " & objItem.LastErrorCode
      Wscript.Echo "Level: " & objItem.Level
      Wscript.Echo "LoadPercentage: " & objItem.LoadPercentage
      Wscript.Echo "Manufacturer: " & objItem.Manufacturer
      Wscript.Echo "MaxClockSpeed: " & objItem.MaxClockSpeed
      Wscript.Echo "Name: " & objItem.Name
      Wscript.Echo "NumberOfCores: " & objItem.NumberOfCores
      Wscript.Echo "NumberOfLogicalProcessors: " & objItem.NumberOfLogicalProcessors
      Wscript.Echo "OtherFamilyDescription: " & objItem.OtherFamilyDescription
      Wscript.Echo "PNPDeviceID: " & objItem.PNPDeviceID
      Wscript.Echo "PowerManagementCapabilities: " & objItem.PowerManagementCapabilities
      Wscript.Echo "PowerManagementSupported: " & objItem.PowerManagementSupported
      Wscript.Echo "ProcessorId: " & objItem.ProcessorId
      Wscript.Echo "ProcessorType: " & objItem.ProcessorType
      Wscript.Echo "Revision: " & objItem.Revision
      Wscript.Echo "Role: " & objItem.Role
      Wscript.Echo "SocketDesignation: " & objItem.SocketDesignation
      Wscript.Echo "Status: " & objItem.Status
      Wscript.Echo "StatusInfo: " & objItem.StatusInfo
      Wscript.Echo "Stepping: " & objItem.Stepping
      Wscript.Echo "SystemCreationClassName: " & objItem.SystemCreationClassName
      Wscript.Echo "SystemName: " & objItem.SystemName
      Wscript.Echo "UniqueId: " & objItem.UniqueId
      Wscript.Echo "UpgradeMethod: " & objItem.UpgradeMethod
      Wscript.Echo "Version: " & objItem.Version
      Wscript.Echo "VoltageCaps: " & objItem.VoltageCaps
      Next
      Einen Fertigen Script... Hier können Wir uns nun die Nötigen informationen rausfischen, mal als Beispiel die CPU ID:

      Wscript.Echo "ProcessorId: " & objItem.ProcessorId
      Heist für uns: Der Namespace dieser Information lautet ProcessorId... Nun Brauchen wir in VB diesen Code:

      VB.NET-Quellcode

      1. Imports System
      2. Imports System.Management
      3. Public Class Form1
      4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      5. Try
      6. Dim class as String = "Win32_Processor" ' wo soll gesucht werden?
      7. Dim namespace as String = "ProcessorId" 'was suche ich?
      8. Dim searcher As New ManagementObjectSearcher( _
      9. "root\CIMV2", _
      10. "SELECT * FROM " & class
      11. For Each queryObj As ManagementObject In searcher.Get()
      12. Try
      13. MsgBox(queryObj(namespace))
      14. Catch
      15. End Try
      16. Next
      17. Catch err As ManagementException
      18. MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
      19. End Try
      20. End Sub
      21. End Class


      Stellt vorher einen Verweis auf die System.Management dll her! (Verweis -> Hinzufügen -> .Net -> System.Management)

      Ersetzt dann die beiden Variablen namespace und class mit dem was ihr eben Rausgesucht habt, fertig ;) Schon spuckt euch euer Programm die Informationen aus...


      Mithilfe dessen lässt sich eig alles über die WMI auslesen... Zeit, Prozessordaten, Arbeitsspeicher... z.B. Nützlich wenn man Hardware Infos anzeigen will oder sein Programm Hardware gebunden schützen will (Achtung! Einige ID's sind von PC zu PC gleich -> Die CPU ID haben viele CPU's gemeinsam, muss nichtmal der Selbe typ sein!)



      Ich hoffe das Tut hilft euch.. Wenn ihr fragen habt, Postet ruhig ;)

      MfG
      Hallo,

      bei mir gibt es ein kleines Problem mit dem Code:
      Wenn ich ihn auf meinem PC (Win 7 x64) einsetze, erkennt er den Prozessor einwandfrei. Auf einem 2. PC (Win XP) klappt das ganze jedoch nicht. Rufe ich den Code des entsprechenden Bereiches (z.B. Prozessor / Name) über den WMI Code Creator ("execute Code") auf (alternativ auch mit dem WMI Code Generator), wird alles korrekt angezeigt. Woran kanns liegen?