Mainboard Modell _eindeutig_ identifizieren

  • Hallo,

    erster Post und schon eine Frage.. ;)

    Ich bin zur Zeit für ein Projekt auf der Suche nach einer Möglichkeit, um ein Mainboard vollkommen eindeutig zu identifizieren. Bisher habe ich es über das WMI und Daten aus dem W32_Baseboard gelöst, jedoch nach einigen Tests mit verschiedenen Mainboardtypen festgestellt, dass die Hersteller anscheinend diese Daten nicht zu 100% pflegen. Intel zB hat anscheinend im Produktnamen nur die "Stammdaten" hinterlegt für jedes Modell, kleinere Unterschiede im Namen und der Bestückung des Boards werden nicht angegeben. Zudem wird der Eintrag "Version" auch nicht bei jedem Hersteller sauber gepflegt.
    Nach einigen Recherchen im Netz bin ich auf eher negative Aussagen zu diesem Thema gestoßen, anscheinend gibt es keinen Einheitlichen ID-String - oder ich habe ihn noch nicht gefunden.
    Für mein Projekt ist es unerlässlich, dass die Boards zu 100% korrekt erkannt werden.

    Ist euch vllt. eine Möglichkeit bekannt um dieses Problem zu lösen? Programme wie AIDA finden unter den Boardeinträgen ja eine ID, anhand derer man das Board erkennen kann und man eine Datenbank hinterlegen könnte.. jedoch finde ich bisher nirgendwo eine Möglichkeit diesen auszulesen.

    Danke schon einmal für etwaige Hilfen :) Gruß

  • [autoit]

    Programme wie AIDA finden unter den Boardeinträgen ja eine ID, anhand derer man das Board erkennen kann und man eine Datenbank hinterlegen könnte.. jedoch finde ich bisher nirgendwo eine Möglichkeit diesen auszulesen.

    [/autoit]

    Ja aber auch nur weil es jemand gepflegt hat, so was wie lspci -vv o.ä. fehlt Windowws wohl noch.
    Vermutlöich auch ein Grund warum man bei Windows immer noch Treiber installieren muss,
    das ist ja in den meisten Fällen bei aktuellen Linuxdistries nicht mehr nötig, die schnallen so was für n Drucker dran ist und nehmen den richtigen Treiber. Obwohl es mit Win7 ja schon wirklich besser geworden ist, ist es erschreckend das dioe komerzielle Lösung da so hinterherhinkt. :)

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Hallo Schnebdreleg,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die deutsche Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deiner Frage: Falls du es nur benötigst um deine MainBoard's zu inventarisieren kannst du _WinAPI_UniqueHardwareID aus der WinAPIEx UDF von @Yashied verwenden, ansonsten fällt mir keine Lösung ein,

    mfg autoBert

  • Hi,
    danke erst einmal für die Antworten. Falls ich die Funktion richtig interpretiert habe, geht es bei der WinAPI_UniqueHardwareID um eine Möglichkeit um einen eindeutigen Schlüssel einem Rechner zuweisen zu können.
    Ich suche eher nach einer Möglichkeit um Mainboardmodelle eindeutig festzustellen. Z.B. möchte ich ein

    Gigabyte GA-H67A-UD3H von einem
    Gigabyte GA-PH67A-UD3 unterscheiden können.

    Zudem soll, falls es verschiedene Revisionen gibt, diese ebenfalls unterschieden werden. Ich suche nicht nach einer Möglichkeit um Rechner ansich eindeutig zu identifizieren.

    Die Hersteller müssen doch irgendwo ihre Modelle unterscheiden können, z.B. um Treiber CDs an Kunden auszuliefern. Wie ich schon sagte, bei AIDA z.B. sieht man ja eine Art von ID. Zweck dieser Dinge soll sein, eine Auswahl von Flashupdates bereitstellen zu können. Diese sollen natürlich nur für das richtige Board gelten.

    Was mir noch einfällt, über einen Romdump erhällt man eine Art von BIOS-String.. evtl kann man darauf aufbauen?!

    Einmal editiert, zuletzt von Schnebdreleg (11. Februar 2011 um 16:13)

  • Dann zeig doch mal deinen Code!
    Ich kann mir nicht vorstellen, dass sie das nicht eindeutig angeben, damit würden die sich ja auch Schwierigkeiten einhandeln!
    Schau dir mal den Codeschnipsel von Oscars ComputerInfo.au3 an, u. a. auch von CPU, Mainboard, Bios ... :

    Spoiler anzeigen
    [autoit]

    #include<EditConstants.au3>
    #NoTrayIcon
    #RequireAdmin
    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_compression=4
    #AutoIt3Wrapper_res_description=Computer-Info
    #AutoIt3Wrapper_res_fileversion=1.8.0.0
    #AutoIt3Wrapper_res_legalcopyright=by Oscar (http://www.autoit.de)
    #AutoIt3Wrapper_res_language=1031
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #AutoIt3Wrapper_run_obfuscator=y
    #Obfuscator_parameters=/striponly
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <String.au3>
    #include <Date.au3>
    #include <Inet.au3>
    #include <String.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Title = 'Computer-Info v1.8 (c) by Oscar (http://www.autoit.de)'

    [/autoit] [autoit][/autoit] [autoit]

    Global $s_MailTo = 'you@yourprovider.de' ; E-Mail-Adresse, an die der Bericht geschickt wird. (anpassen!)

    [/autoit] [autoit][/autoit] [autoit]

    Global $s_MailSubject = 'Computer-Info von ' & @UserName ; Das wird als Betreff verwendet. (evtl. anpassen!)

    [/autoit] [autoit][/autoit] [autoit]

    If (@AutoItVersion < '3.2.12.0') And (Not @Compiled) Then
    Global $Msg = 'Dieses Script benötigt min. die AutoIt-Version: 3.2.12.0 ' & @CRLF & @CRLF
    $Msg &= 'Gestartet wurde es mit AutoIt-Version: ' & @AutoItVersion
    Exit MsgBox(48, $Title, $Msg)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Global $ret
    $ret = DllCall('kernel32.dll', 'int', 'GetLocaleInfo', 'dword', '0x' & @OSLang, 'dword', BitOR(0x2, 0x80000000), 'str', '', 'int', 85)
    Global $OSLang = $ret[3]
    $ret = DllCall('kernel32.dll', 'int', 'GetLocaleInfo', 'dword', '0x' & @KBLayout, 'dword', BitOR(0x2, 0x80000000), 'str', '', 'int', 85)
    Global $KBLayout = $ret[3]
    Global $Bin = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'DigitalProductID')

    [/autoit] [autoit][/autoit] [autoit]

    Global $Gui = GUICreate($Title, 600, 480, Default, 5, BitOR($WS_MAXIMIZEBOX, $WS_SIZEBOX))
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    Global $Edit = GUICtrlCreateEdit(@CRLF & ' Bitte warten...', 5, 5, 585, 400, BitOR($ES_READONLY, $WS_HSCROLL, $WS_VSCROLL))
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
    GUICtrlSetBkColor(-1, 0xffffff)
    Global $Send = GUICtrlCreateButton('Bericht senden...', 5, 420, 140, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetOnEvent(-1, '_Send')
    Global $End = GUICtrlCreateButton('Beenden', 510, 420, 80, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE)
    GUICtrlSetState(-1, $GUI_FOCUS)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetOnEvent(-1, '_End')
    WinMove($Title, '', Default, Default, 600, @DesktopHeight - 80)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Global $colItems = '', $Output = '', $objItem
    $Output &= $Title & @CRLF & @CRLF
    $Output &= 'Heutiges Datum: ' & @TAB & _NowDate() & ' ' & _NowTime() & @CRLF & @CRLF
    $Output &= @CRLF &'Betriebssystem' & @CRLF
    $Output &= '==============================================================' & @CRLF
    Global $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_Desktop')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Desktop', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If StringInStr($objItem.Name, @UserName) Then
    $Wallpaper = 'Hintergrundbild: ' & @TAB & _Iif($objItem.Wallpaper <> '', $objItem.Wallpaper, 'Nicht vorhanden') & @CRLF
    $ScreenSaver = 'Bildschirmschoner: ' & @TAB & _Iif($objItem.ScreenSaverExecutable <> '', $objItem.ScreenSaverExecutable, 'Nicht vorhanden') & @CRLF & @CRLF
    EndIf
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_Desktop' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' nslookup')
    RunWait(@ComSpec & " /c " & "nslookup localhost >" & Chr(34) & @TempDir & "\cominfo.txt" & Chr(34), "", @SW_HIDE)
    $DNSServer = StringReplace(FileReadLine(@TempDir & "\cominfo.txt", 1), 'Server: ', 'DNS-Server:' & @TAB)
    $IPAdress = StringReplace(FileReadLine(@TempDir & "\cominfo.txt", 2), 'Address: ', ' (IP: ')
    $DNSServer &= $IPAdress & ')'
    FileDelete(@TempDir & "\cominfo.txt")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_ComputerSystem')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_ComputerSystem', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $System = 'Computer: ' & @TAB & $objItem.SystemType & @CRLF
    $Domain = 'Arbeitsgruppe: ' & @TAB & $objItem.Domain & @CRLF
    $StartOpt = 'Start-Optionen:' & @TAB & $objItem.SystemStartupOptions(0) & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_ComputerSystem'
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_OperatingSystem')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= $objItem.Caption & ' ('
    $Output &= $objItem.CreationClassName & ')' & @CRLF
    $Output &= 'inkl. ' & $objItem.CSDVersion & ' ('
    $Output &= 'Version: ' & $objItem.Version & ')' & @CRLF & @CRLF
    $Output &= 'Sprachversion: ' & @TAB & $OSLang & @CRLF
    $Output &= 'Reg. Benutzer: ' & @TAB & $objItem.RegisteredUser & @CRLF
    $Output &= 'Produktkey: ' & @TAB & _ProdKey($Bin) & @CRLF & @CRLF ; Funktion _ProdKey() von Xenobiologist (http://www.autoit.de)
    $Output &= 'Windows-Ordner: ' & @TAB & $objItem.WindowsDirectory & @CRLF
    $Output &= $StartOpt
    $Output &= 'Installationsdatum:' & @TAB & _WMIDateStringToDate($objItem.InstallDate) & @CRLF
    $Output &= 'Zuletzt gestartet: ' & @TAB & _WMIDateStringToDate($objItem.LastBootUpTime) & @CRLF & @CRLF
    $Output &= $Wallpaper
    $Output &= $ScreenSaver
    $Output &= $System
    $Output &= 'Computersystem: ' & @TAB & $objItem.CSCreationClassName & @CRLF
    $aMemory = MemGetStats()
    $Output &= 'Hauptspeicher ' & @CRLF
    $Output &= @TAB & '(Gesamt):' & @TAB & _DisplayMemorySize($aMemory[1]) & @CRLF
    $Output &= @TAB & '(Frei):' & @TAB & _DisplayMemorySize($aMemory[2]) & @CRLF
    $Output &= 'Auslagerungsdatei ' & @CRLF
    $Output &= @TAB & '(Gesamt):' & @TAB & _DisplayMemorySize($aMemory[5]) & @CRLF
    $Output &= @TAB & '(Frei):' & @TAB & _DisplayMemorySize($aMemory[6]) & @CRLF & @CRLF
    $Output &= @CRLF & 'Netzwerk ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $Output &= 'Benutzername: ' & @TAB & @UserName & @CRLF
    $Output &= 'Computername: ' & @TAB & $objItem.CSName & ' ('
    $Output &= $objItem.Description & ')' & @CRLF
    $Output &= $Domain & @CRLF
    $IP = _GetIP()
    $Output &= 'Internet-IP: ' & @TAB & _Iif($IP <> -1, $IP, 'IP-Test fehlgeschlagen') & @CRLF
    $Output &= $DNSServer & @CRLF & @CRLF
    $Output &= 'Ping-Zeiten: ' & @CRLF
    _PingTime()
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_OperatingSystem' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_UserAccount')
    $Output &= @CRLF & 'Benutzerkonten' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_UserAccount', 'WQL', 0x30)
    If IsObj($colItems) then
    For $objItem In $colItems
    If $objItem.Status = 'OK' Then
    $Output &= 'Name: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'Beschreibung: ' & @TAB & _Iif($objItem.Description <> '', $objItem.Description, 'nicht vorhanden') & @CRLF
    $Output &= 'Passwort benötigt:' & @TAB & _Iif($objItem.PasswordRequired = -1, 'Ja', 'Nein') & @CRLF
    $Output &= @TAB & 'änderbar:' & @TAB & _Iif($objItem.PasswordChangeable = -1, 'Ja', 'Nein') & @CRLF
    $Output &= @TAB & 'läuft ab:' & @TAB & _Iif($objItem.PasswordExpires = -1, 'Ja', 'Nein') & @CRLF & @CRLF
    EndIf
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_UserAccount' & @CRLF & @CRLF
    Endif

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_NetworkAdapter')
    $Output &= @CRLF & 'Netzwerkadapter' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus = 2', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Hersteller: ' & @TAB & $objItem.Manufacturer & @CRLF
    $Output &= 'Name: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'Adapter-Typ: ' & @TAB & $objItem.AdapterType & @CRLF
    $Output &= 'Kennung: ' & @TAB & $objItem.NetConnectionID & @CRLF
    $Output &= 'MAC-Addresse:' & @TAB & $objItem.MACAddress & @CRLF
    $colItems2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration', 'WQL', 0x30)
    If IsObj($colItems2) Then
    For $objItem2 In $colItems2
    If $objItem.Caption = $objItem2.Caption Then
    If $objItem2.IPEnabled = -1 Then
    If $objItem2.DHCPEnabled = -1 Then
    $Output &= 'Adresstyp: ' & @TAB & 'von DHCP zugewiesen' & @CRLF
    $Output &= 'DHCP-Server: ' & @TAB & $objItem2.DHCPServer & @CRLF
    $Output &= 'IP erhalten: ' & @TAB & _WMIDateStringToDate($objItem2.DHCPLeaseObtained) & @CRLF
    $Output &= 'IP läuft ab: ' & @TAB & _WMIDateStringToDate($objItem2.DHCPLeaseExpires) & @CRLF
    Else
    $Output &= 'Adresstyp: ' & @TAB & 'Manuell konfiguriert' & @CRLF
    EndIf
    $Output &= 'IP-Addresse: ' & @TAB & $objItem2.IPAddress(0) & @CRLF
    $Output &= 'Subnetzmaske: ' & @TAB & $objItem2.IPSubnet(0) & @CRLF
    $Output &= 'Standardgateway: ' & @TAB & $objItem2.DefaultIPGateway(0) & @CRLF & @CRLF
    Else
    $Output &= @CRLF
    EndIf
    EndIf
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_NetworkAdapterConfiguration' & @CRLF & @CRLF
    EndIf
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_NetworkAdapter' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_Keyboard')
    $Output &= @CRLF & 'Tastatur(en) ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Keyboard', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Tastatur-Typ: ' & @TAB & $objItem.CreationClassName & @CRLF
    $Output &= 'Tastenbelegung:' & @TAB & $KBLayout & @CRLF
    $Output &= 'Anschluss: ' & @TAB & $objItem.Description & @CRLF
    $Output &= 'Name: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'F-Tastenanzahl:' & @TAB & $objItem.NumberOfFunctionKeys & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_Keyboard' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_PointingDevice')
    $Output &= @CRLF & 'Mäuse ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PointingDevice', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Hersteller: ' & @TAB & $objItem.Manufacturer & @CRLF
    $Output &= 'Name: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'Tastenanzahl:' & @TAB & $objItem.NumberOfButtons & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_PointingDevice' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_Printer')
    $Output &= @CRLF & 'Drucker ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Printer', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Name: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'TreiberName: ' & @TAB & $objItem.DriverName & @CRLF
    $Output &= 'Anschluss: ' & @TAB & $objItem.PortName & @CRLF
    $Output &= 'Horiz. Auflösung: ' & @TAB & $objItem.HorizontalResolution & @CRLF
    $Output &= 'Vertik. Auflösung: ' & @TAB & $objItem.VerticalResolution & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_Printer' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_LogicalDisk')
    $Output &= @CRLF & 'Logische Laufwerke ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalDisk', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Laufwerk: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'Beschreibung: ' & @TAB & $objItem.Description & @CRLF
    If $objItem.Description = 'Netzwerkverbindung' Then
    $Output &= 'Netzwerkpfad: ' & @TAB & $objItem.ProviderName & @CRLF
    EndIf
    $Output &= 'Größe: ' & @TAB & _DisplayMemorySize($objItem.Size / 1024) & @CRLF
    $Output &= 'Freier Speicher: ' & @TAB & _DisplayMemorySize($objItem.FreeSpace / 1024) & @CRLF
    $Output &= 'DateiSystem: ' & @TAB & $objItem.FileSystem & @CRLF
    $Output &= 'Datenträger: ' & @TAB & $objItem.VolumeName & @CRLF
    $Output &= 'Seriennummer: ' & @TAB & $objItem.VolumeSerialNumber & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_LogicalDisk' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_DiskDrive')
    $Output &= @CRLF & 'Festplatte(n) ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Bezeichnung: ' & @TAB & $objItem.Model & @CRLF
    $Output &= 'Größe: ' & @TAB & _DisplayMemorySize($objItem.Size / 1024) & @CRLF
    $Output &= 'Anschluss: ' & @TAB & $objItem.InterfaceType & @CRLF
    $Output &= 'Bytes/Sektor:' & @TAB & $objItem.BytesPerSector & @CRLF
    $Output &= 'PNPDeviceID: ' & @TAB & $objItem.PNPDeviceID & @CRLF
    $Output &= 'Status: ' & @TAB & $objItem.Status & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_DiskDrive' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_CDROMDrive')
    $Output &= @CRLF & 'CD-/DVD-ROM-Laufwerk(e) ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_CDROMDrive', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Laufwerk: ' & @TAB & $objItem.Drive & @CRLF
    $Output &= 'Bezeichnung: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'PNPDeviceID: ' & @TAB & $objItem.PNPDeviceID & @CRLF
    $Output &= 'Status: ' & @TAB & $objItem.Status & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_CDROMDrive' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_VideoController')
    $Output &= @CRLF & 'Grafikkarte(n) ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_VideoController', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $strAcceleratorCapabilities = $objItem.AcceleratorCapabilities(0)
    $Output &= 'Hersteller: ' & @TAB & $objItem.AdapterCompatibility & @CRLF
    $Output &= 'Beschreibung: ' & @TAB & $objItem.Description & @CRLF
    $Output &= 'RAMDAC: ' & @TAB & $objItem.AdapterDACType & @CRLF
    $Output &= 'Grafikkarten-RAM: ' & @TAB & _DisplayMemorySize($objItem.AdapterRAM / 1024) & @CRLF
    $Output &= 'Horiz. Auflösung: ' & @TAB & $objItem.CurrentHorizontalResolution & @CRLF
    $Output &= 'Vertik. Auflösung: ' & @TAB & $objItem.CurrentVerticalResolution & @CRLF
    $Output &= 'Bits/Pixel: ' & @TAB & $objItem.CurrentBitsPerPixel & @CRLF
    $Output &= 'Anzahl der Farben: ' & @TAB & _StringAddThousandsSep($objItem.CurrentNumberOfColors, '.', ',') & @CRLF
    $Output &= 'TreiberVersion: ' & @TAB & $objItem.DriverVersion & @CRLF
    $Output &= 'Treiberdatum: ' & @TAB & _WMIDateStringToDate($objItem.DriverDate) & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_VideoController' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_SoundDevice')
    $Output &= @CRLF & 'Soundkarte(n) ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_SoundDevice', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Hersteller: ' & @TAB & $objItem.Manufacturer & @CRLF
    $Output &= 'Name: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'PNPDeviceID:' & @TAB & $objItem.PNPDeviceID & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_SoundDevice' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_PhysicalMemory')
    $Output &= @CRLF & 'Hauptspeicher (RAM) ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PhysicalMemory', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Belegung: ' & @TAB & $objItem.BankLabel & @CRLF
    $Output &= 'Kapazität: ' & @TAB & _DisplayMemorySize($objItem.Capacity / 1024) & @CRLF
    $Output &= 'Bandbreite: ' & @TAB & $objItem.DataWidth & ' Bit' & @CRLF
    $Output &= 'Steckplatz: ' & @TAB & $objItem.DeviceLocator & @CRLF
    $Output &= 'FormFaktor: ' & @TAB & $objItem.FormFactor & @CRLF
    $Output &= 'Geschwindigkeit:' & @TAB & $objItem.Speed & ' MHz' & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_PhysicalMemory' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_CacheMemory')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_CacheMemory', 'WQL', 0x30)
    Global $Cache
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Cache &= 'Speicher: ' & @TAB & $objItem.Purpose & ' (' & $objItem.InstalledSize & ' KB)' & @CRLF
    Next
    Else
    $Cache &= 'No WMI Objects Found for class: Win32_CacheMemory' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_Prozessor')
    $Output &= @CRLF & 'Prozessor(en) ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Processor', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Prozessor: ' & @TAB & $objItem.DeviceID & @CRLF
    $Output &= 'Name: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'Sockel: ' & @TAB & $objItem.SocketDesignation & @CRLF
    $Output &= 'Taktfrequenz: ' & @TAB & $objItem.CurrentClockSpeed & ' MHz' & @CRLF
    $Output &= $Cache & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_Processor' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_BaseBoard')
    $Output &= @CRLF & 'Mainboard ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_BaseBoard', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Hersteller: ' & @TAB & $objItem.Manufacturer & @CRLF
    $Output &= 'Produkt: ' & @TAB & $objItem.Product & @CRLF
    $Output &= 'Version: ' & @TAB & $objItem.Version & @CRLF
    $Output &= 'Seriennummer:' & @TAB & $objItem.SerialNumber & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_BaseBoard' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_SystemSlot')
    $Output &= @CRLF & 'Steckplätze für Erweiterungskarten ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_SystemSlot', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Bezeichnung: ' & $objItem.SlotDesignation & @CRLF
    $Output &= 'Steckplatz belegt: ' & _Iif($objItem.CurrentUsage = 4, 'Ja', 'Nein') & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: ' & 'Win32_SystemSlot' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, ' Bitte warten...' & @CRLF & @CRLF & ' Win32_BIOS')
    $Output &= @CRLF & 'BIOS ' & @CRLF
    $Output &= '==============================================================' & @CRLF
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_BIOS', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= 'Hersteller: ' & @TAB & $objItem.Manufacturer & @CRLF
    $Output &= 'Name: ' & @TAB & $objItem.Name & @CRLF
    $Output &= 'Datum: ' & @TAB & _WMIDateStringToDate($objItem.ReleaseDate) & @CRLF
    $Output &= 'BIOS-Version:' & @TAB & $objItem.SMBIOSBIOSVersion & @CRLF & @CRLF
    Next
    Else
    $Output &= 'No WMI Objects Found for class: Win32_BIOS' & @CRLF & @CRLF
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Edit, $Output)
    GUICtrlSetState($Edit, $GUI_FOCUS)
    GUICtrlSetState($End, $GUI_ENABLE)
    GUICtrlSetState($Send, $GUI_ENABLE)

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _End()
    Exit
    EndFunc ;==>_End

    [/autoit] [autoit][/autoit] [autoit]

    Func _Send()
    _INetMail($s_MailTo, $s_MailSubject, '')
    ClipPut($Output)
    Sleep(2000)
    Send('{TAB 3}')
    Send('^v')
    EndFunc ;==>_Send

    [/autoit] [autoit][/autoit] [autoit]

    Func _WMIDateStringToDate($dtmDate)
    Return StringMid($dtmDate, 7, 2) & '.' & StringMid($dtmDate, 5, 2) & '.' & StringLeft($dtmDate, 4) _
    & ' ' & _
    StringMid($dtmDate, 9, 2) & ':' & StringMid($dtmDate, 11, 2) & ':' & StringMid($dtmDate, 13, 2)
    EndFunc ;==>_WMIDateStringToDate

    [/autoit] [autoit][/autoit] [autoit]

    Func _DisplayMemorySize($DMSize)
    Return _StringAddThousandsSep(Round($DMSize / 1024), '.', ',') & ' MB (' & _StringAddThousandsSep($DMSize * 1024, '.', ',') & ' Bytes)'
    EndFunc ;==>_DisplayMemorySize

    [/autoit] [autoit][/autoit] [autoit]

    Func _PingTime()
    Local $time
    $time = Ping('www.google.com', 1000)
    $Output &= 'www.google.com' & @TAB & _Iif(($time < 1000) And ($time > 0), $time & ' ms', 'Antwortzeit überschritten!') & @CRLF
    $time = Ping('www.google.de', 1000)
    $Output &= 'www.google.de' & @TAB & _Iif(($time < 1000) And ($time > 0), $time & ' ms', 'Antwortzeit überschritten!') & @CRLF
    $time = Ping('www.heise.de', 1000)
    $Output &= 'www.heise.de' & @TAB & _Iif(($time < 1000) And ($time > 0), $time & ' ms', 'Antwortzeit überschritten!') & @CRLF
    $time = Ping('www.ard.de', 1000)
    $Output &= 'www.ard.de' & @TAB & _Iif(($time < 1000) And ($time > 0), $time & ' ms', 'Antwortzeit überschritten!') & @CRLF
    $time = Ping('www.zdf.de', 1000)
    $Output &= 'www.zdf.de' & @TAB & _Iif(($time < 1000) And ($time > 0), $time & ' ms', 'Antwortzeit überschritten!') & @CRLF & @CRLF
    EndFunc ;==>_PingTime

    [/autoit] [autoit][/autoit] [autoit]

    ; ----------------------------------------------------------------------------
    ; AutoIt Version: 3.1.1 beta
    ; Author: Unknown & Thorsten Meger <[email='Thorsten.Meger@gmx.de'][/email]>
    ;
    ; Script Function: Decode REG_BINARY
    ; ----------------------------------------------------------------------------
    Func _ProdKey($bia)
    Dim $a[15], $b[29], $c[24], $s = 15, $d = 29, $v = 0, $n = 0, $i = 0, $r, $h = 0
    $c = StringSplit("BCDFGHJKMPQRTVWXY2346789", "")
    $bia = StringMid($bia, 107, 30)
    For $i = 1 To 29 Step 2
    $a[Int($i / 2)] = Dec(StringMid($bia, $i, 2))
    Next
    For $i = $d - 1 To 0 Step -1
    If Mod(($i + 1), 6) = 0 Then
    $b[$i] = "-"
    Else
    $h = 0
    For $n = $s - 1 To 0 Step -1
    $v = BitOR(BitShift($h, -8), $a[$n])
    $a[$n] = Int($v / 24)
    $h = Mod($v, 24)
    Next
    $b[$i] = $c[$h + 1]
    EndIf
    Next
    For $i = 0 To 28
    $r = $r & $b[$i]
    Next
    Return $r
    EndFunc ;=>_ProdKey

    [/autoit]
    • Offizieller Beitrag

    Beim schreiben und testen meines Skripts ist mir aber auch aufgefallen, dass diese BIOS-Daten keineswegs immer vollständig ausgefüllt sind.
    Ich würde mal vermuten, dass die bei AIDA eine eigene ID (mit Datenbank) verwenden, die anhand der verbauten Chipsätze/Slots/CPU/Controller etc. generiert wird.
    Wenn es sich "nur" um ein paar bestimmte Mainboards handelt, könnte man da etwas in dieser Richtung raussuchen und entsprechend die Auswahl treffen.

  • Das ist leider mein Problem..
    Der Gedanke es über mehrere Stellen abzugleichen ist mir auch schon gekommen, würde jedoch den Wartungsaufwand enorm steigern.
    Die ID, die AIDA zB ausgibt, ist jedoch die selbe, die auch beim POST-Screen angezeigt wird... Daher denke ich, dass irgendwie an diese ID ranzukommen sein muss.

    Ich werd mich noch weiter schlau machen über das Thema, trotzdem noch einmal Danke für die Beiträge.

    • Offizieller Beitrag

    Hast Du es mal mit meiner GetMainboard-Funktion aus meinem ComputerInfo probiert?

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $aMainboard = _CI_GetMainBoard()
    _ArrayDisplay($aMainboard)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CI_GetMainBoard($strComputer = '.')
    Local $aReturn[2][12] = [[ _
    'Hersteller:', 'Produkt:', 'Version:', 'Seriennummer:', 'Ext. Anschlüsse:', _
    'Int. Anschlüsse:', '', 'BIOS-Hersteller:', 'Name:', 'Version:', 'Datum:', 'Seriennummer:']]
    Local $x = 1, $objWMIService, $colItems, $sExtConnector = '', $sIntConnector = '', $sTmp
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PortConnector', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $sTmp = $objItem.ExternalReferenceDesignator
    If StringLen($sTmp) > 1 Then
    $sExtConnector &= $sTmp & ' ** '
    ContinueLoop
    EndIf
    $sTmp = $objItem.InternalReferenceDesignator
    If StringLen($sTmp) > 1 Then $sIntConnector &= $sTmp & ' ** '
    Next
    EndIf
    $sExtConnector = StringTrimRight($sExtConnector, 4)
    $sIntConnector = StringTrimRight($sIntConnector, 4)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_BaseBoard', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $aReturn[$x][0] = $objItem.Manufacturer
    $aReturn[$x][1] = $objItem.Product
    $aReturn[$x][2] = $objItem.Version
    $aReturn[$x][3] = $objItem.SerialNumber
    $aReturn[$x][4] = $sExtConnector
    $aReturn[$x][5] = $sIntConnector
    Next
    EndIf
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_BIOS', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $aReturn[$x][7] = $objItem.Manufacturer
    $aReturn[$x][8] = $objItem.Name
    $aReturn[$x][9] = $objItem.BIOSVersion(0)
    $aReturn[$x][10] = _WMIDateStringToDate($objItem.ReleaseDate)
    $aReturn[$x][11] = $objItem.SerialNumber
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetMainBoard

    [/autoit] [autoit][/autoit] [autoit]

    Func _WMIDateStringToDate($dtmDate)
    Return (StringMid($dtmDate, 7, 2) & '.' & StringMid($dtmDate, 5, 2) & '.' & StringLeft($dtmDate, 4) _
    & ' ' & StringMid($dtmDate, 9, 2) & ':' & StringMid($dtmDate, 11, 2) & ':' & StringMid($dtmDate, 13, 2))
    EndFunc ;==>_WMIDateStringToDate

    [/autoit]
  • Hi,
    ja habe ich schon, leider werden dort auch nur die Dinge ausgelesen, die ich auch schon selbst gefunden hatte.