• Bei mir das gleiche wie bei uklein

    Nutze XP Pro SP3 mit einem Quad Q9550
    Dein skript zeigt mir auch "Intel Pentium III Xeon-Prozessor" an :huh:

  • Win7 x86 funktioniert auch. Das Listview flackert aber bei mir ziemlich stark bis alle Informationen gesammelt sind.

    • Offizieller Beitrag

    Wie gesagt, zum auslesen benutze ich WMI. Hier die komplette Ausgabe:

    Spoiler anzeigen

    [autoit]
    ; Generated by AutoIt Scriptomatic

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = 'localhost'

    $Output=""
    $Output &= 'Computer: ' & $strComputer & @CRLF
    $Output &= '==========================================' & @CRLF
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Processor', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output &= 'AddressWidth: ' & $objItem.AddressWidth & @CRLF
    $Output &= 'Architecture: ' & $objItem.Architecture & @CRLF
    $Output &= 'Availability: ' & $objItem.Availability & @CRLF
    $Output &= 'Caption: ' & $objItem.Caption & @CRLF
    $Output &= 'ConfigManagerErrorCode: ' & $objItem.ConfigManagerErrorCode & @CRLF
    $Output &= 'ConfigManagerUserConfig: ' & $objItem.ConfigManagerUserConfig & @CRLF
    $Output &= 'CpuStatus: ' & $objItem.CpuStatus & @CRLF
    $Output &= 'CreationClassName: ' & $objItem.CreationClassName & @CRLF
    $Output &= 'CurrentClockSpeed: ' & $objItem.CurrentClockSpeed & @CRLF
    $Output &= 'CurrentVoltage: ' & $objItem.CurrentVoltage & @CRLF
    $Output &= 'DataWidth: ' & $objItem.DataWidth & @CRLF
    $Output &= 'Description: ' & $objItem.Description & @CRLF
    $Output &= 'DeviceID: ' & $objItem.DeviceID & @CRLF
    $Output &= 'ErrorCleared: ' & $objItem.ErrorCleared & @CRLF
    $Output &= 'ErrorDescription: ' & $objItem.ErrorDescription & @CRLF
    $Output &= 'ExtClock: ' & $objItem.ExtClock & @CRLF
    $Output &= 'Family: ' & $objItem.Family & @CRLF
    $Output &= 'InstallDate: ' & _WMIDateStringToDate($objItem.InstallDate) & @CRLF
    $Output &= 'L2CacheSize: ' & $objItem.L2CacheSize & @CRLF
    $Output &= 'L2CacheSpeed: ' & $objItem.L2CacheSpeed & @CRLF
    $Output &= 'L3CacheSize: ' & $objItem.L3CacheSize & @CRLF
    $Output &= 'L3CacheSpeed: ' & $objItem.L3CacheSpeed & @CRLF
    $Output &= 'LastErrorCode: ' & $objItem.LastErrorCode & @CRLF
    $Output &= 'Level: ' & $objItem.Level & @CRLF
    $Output &= 'LoadPercentage: ' & $objItem.LoadPercentage & @CRLF
    $Output &= 'Manufacturer: ' & $objItem.Manufacturer & @CRLF
    $Output &= 'MaxClockSpeed: ' & $objItem.MaxClockSpeed & @CRLF
    $Output &= 'Name: ' & $objItem.Name & @CRLF
    $Output &= 'NumberOfCores: ' & $objItem.NumberOfCores & @CRLF
    $Output &= 'NumberOfLogicalProcessors: ' & $objItem.NumberOfLogicalProcessors & @CRLF
    $Output &= 'OtherFamilyDescription: ' & $objItem.OtherFamilyDescription & @CRLF
    $Output &= 'PNPDeviceID: ' & $objItem.PNPDeviceID & @CRLF
    $strPowerManagementCapabilities = $objItem.PowerManagementCapabilities(0)
    $Output &= 'PowerManagementCapabilities: ' & $strPowerManagementCapabilities & @CRLF
    $Output &= 'PowerManagementSupported: ' & $objItem.PowerManagementSupported & @CRLF
    $Output &= 'ProcessorId: ' & $objItem.ProcessorId & @CRLF
    $Output &= 'ProcessorType: ' & $objItem.ProcessorType & @CRLF
    $Output &= 'Revision: ' & $objItem.Revision & @CRLF
    $Output &= 'Role: ' & $objItem.Role & @CRLF
    $Output &= 'SocketDesignation: ' & $objItem.SocketDesignation & @CRLF
    $Output &= 'Status: ' & $objItem.Status & @CRLF
    $Output &= 'StatusInfo: ' & $objItem.StatusInfo & @CRLF
    $Output &= 'Stepping: ' & $objItem.Stepping & @CRLF
    $Output &= 'SystemCreationClassName: ' & $objItem.SystemCreationClassName & @CRLF
    $Output &= 'SystemName: ' & $objItem.SystemName & @CRLF
    $Output &= 'UniqueId: ' & $objItem.UniqueId & @CRLF
    $Output &= 'UpgradeMethod: ' & $objItem.UpgradeMethod & @CRLF
    $Output &= 'Version: ' & $objItem.Version & @CRLF
    $Output &= 'VoltageCaps: ' & $objItem.VoltageCaps & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    $Output &= 'No WMI Objects Found for class: ' & 'Win32_Processor'
    Endif


    Func _WMIDateStringToDate($dtmDate)
    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc
    /autoit]


    Wenn Windows dabei etwas falsches ausgibt, kann ich das ja nicht überprüfen.
    Bei meinen beiden Rechnern (beide mit AMD-Prozessoren, einmal Win7, einmal WinXP) stimmt die Ausgabe. :S

    @kiku: Das mit dem flackernden Listview habe ich mittlerweile behoben. Kommt in der nächsten Version.

  • UEZ: Ab Win_Vista müssten beim TAB "Prozessor" die beiden Einträge "Prozessorkerne" und "logische Prozessoren" angezeigt werden. WindowsXP stellt diese Einträge per WMI leider nicht zur Verfügung.

    Ich weiß, dass man ab Vista die Anzahl der Cores expliziet herauslesen kann (NumberOfCores / NumberOfLogicalProcessors in Win32_Processor), aber ich suche nach einer Möglichkeit für System kleiner Vista / Server2008. ;)

    Dachte nur, dass du was hättest...

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (19. Dezember 2009 um 21:50)

    • Offizieller Beitrag

    Die Anzahl und Art der Prozessoren kann man auch über die Registry rausbekommen (habe ich gerade entdeckt):

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $aCPU = _GetCPU()
    _ArrayDisplay($aCPU)

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

    Func _GetCPU()
    Local $sX64 = '', $iCount = 0
    If @OSArch <> 'X86' Then $sX64 = '64'
    Do
    $iCount += 1
    RegEnumKey('HKEY_LOCAL_MACHINE' & $sX64 & '\HARDWARE\DESCRIPTION\System\CentralProcessor', $iCount)
    Until @error <> 0
    $iCount -= 1
    Dim $aOut[$iCount][3]
    For $i = 0 To $iCount - 1
    $aOut[$i][0] = RegRead('HKEY_LOCAL_MACHINE' & $sX64 & '\HARDWARE\DESCRIPTION\System\CentralProcessor\' & $i, 'Identifier')
    $aOut[$i][1] = RegRead('HKEY_LOCAL_MACHINE' & $sX64 & '\HARDWARE\DESCRIPTION\System\CentralProcessor\' & $i, 'ProcessorNameString')
    $aOut[$i][2] = RegRead('HKEY_LOCAL_MACHINE' & $sX64 & '\HARDWARE\DESCRIPTION\System\CentralProcessor\' & $i, '~MHz')
    Next
    Return $aOut
    EndFunc

    [/autoit]


    Und das funktioniert sogar auch unter WindowsXP (muss ich gleich mal in mein Computer-Info einbauen). :)

    • Offizieller Beitrag

    Ich hab' jetzt noch etwas zu meinem Script gefunden.
    Microsoft schreibt dazu:

    Zitat


    Die im Abschnitt über den Computer aufgeführten CPU-Informationen werden aus dem Eintrag "ProcessorNameString" unter dem folgenden Registrierungsunterschlüssel abgerufen:
    HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0
    Hinweis: In diesem Beispiel steht der Wert 0 für die erste CPU im Computer. In einem Multiprozessorsystem steht 1 für die zweite physische CPU bzw. für die zweite logische CPU in einem System, etwa in Systemen mit Hyper-Threading-Technologie von Intel, die mehrere logische Kerne nutzen.


    Wobei ich jetzt mangels HT-Prozessor nicht weiß, ob bei einem Quadcore die Werte in abwechselnder Reihenfolge (physisch, logisch, physisch, logisch...) oder hintereinander (physisch, physisch..., logisch, logisch...) stehen und welche Werte man da bei den logischen Prozessoren auslesen kann.

    Zum auslesen der Anzahl der logischen Prozessoren würde aber die einfache Zählschleife ausreichen.

  • Die Anzahl der Kerne lässt sich auch so bestimmen:

    [autoit]

    Func GetCPUCores()
    Local $S_SYSTEM_INFO = DllStructCreate("ushort dwOemId;short wProcessorArchitecture;dword dwPageSize;ptr lpMinimumApplicationAddress;" & _
    "ptr lpMaximumApplicationAddress;long_ptr dwActiveProcessorMask;dword dwNumberOfProcessors;dword dwProcessorType;dword dwAllocationGranularity;" & _
    "short wProcessorLevel;short wProcessorRevision")
    Local $err

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

    ;Anzahl der CPUs bestimmen
    $err = DllCall("Kernel32.dll", "none", "GetSystemInfo", "ptr",DllStructGetPtr($S_SYSTEM_INFO))

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

    If @error Or Not IsArray($err) Then ;Fehler beim Dll Aufruf
    Return -1
    Else
    Return DllStructGetData($S_SYSTEM_INFO, "dwNumberOfProcessors")
    EndIf

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

    EndFunc

    [/autoit]
  • Hi Oscar,

    sehr nettes script, kann mich noch an die alte Version erinnern, da gefällt mir das auch schon viel besser =)
    ne kleinigkeit vermisse ich noch, wäre es möglich noch USER und LOCALGROUPS einzubinden? also zumindest werlche user und gruppen es gibt?

    PS: was mir noch auffällt, das jedes mal die tabs neu geladen werden, wenn ich dazwischen switche. ist doch (zumindest bei den meisten tabs) unnötig, da sich doch eh nix ändern kann, während das tool läuft, oder? (ausnahme wäre vllt laufwerke, wenn usb-stick/hdd drangestöpselt wird.

    • Offizieller Beitrag

    Ja, das Script bekommt noch ein paar Funktionen dazu. Das Ganze sollte ja flexibel und leicht erweiterbar sein, deshalb habe ich ja alles in Funktionen ausgelagert und mit TABs eingebunden.
    Von daher sind Erweiterungen leichter machbar als vorher. Und ja, dass die Daten immer wieder neu geladen werden ist nicht zwingend nötig, aber bei den meisten Sachen braucht's ja nicht so lange.
    Erstmal muss ich jetzt die GetMonitor-Funktion vervollständigen.

    User und Localgroups habe ich mal auf die TODO-Liste gesetzt.

  • Ich weiß, dass man ab Vista die Anzahl der Cores expliziet herauslesen kann (NumberOfCores / NumberOfLogicalProcessors in Win32_Processor), aber ich suche nach einer Möglichkeit für System kleiner Vista / Server2008.

    Teilweise scheint das auch bei XP zu gehen. Zu mindestens bei mir gibt es diese Variable. Bei anderen wieder nicht. Vielleicht liegt es an SP3 oder einem anderen Update. Wenn es diese Variable allerdings dann nicht gibt stürzt mein Script ab. Weiß jemand wie ich vorher prüfen kann ob es NumberOfLogicalProcessors gibt?

  • Find das ding echt klasse mus ich gleich meiner mutter geben damit sie mich nicht immer fragt wieviel arbeitsspeicher hab ich etc.

  • Hallo

    Ist jetzt zwar schon ein Weilchen her mit dem Script, aber aktuell und benutzt wird es immernoch.

    Wie kann man denn noch die "Anzahl der Kerne" von Bitboy einbauen, dass es mit aufgeführt wird?
    Ich habe es so funktioniert, aber geht noch nicht:

    Spoiler anzeigen
    [autoit]

    Func GetCPUCores()
    Local $S_SYSTEM_INFO = DllStructCreate("ushort dwOemId;short wProcessorArchitecture;dword dwPageSize;ptr lpMinimumApplicationAddress;" & _
    "ptr lpMaximumApplicationAddress;long_ptr dwActiveProcessorMask;dword dwNumberOfProcessors;dword dwProcessorType;dword dwAllocationGranularity;" & _
    "short wProcessorLevel;short wProcessorRevision")
    Local $err

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

    ;Anzahl der CPUs bestimmen
    $err = DllCall("Kernel32.dll", "none", "GetSystemInfo", "ptr", DllStructGetPtr($S_SYSTEM_INFO))

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

    If @error Or Not IsArray($err) Then ;Fehler beim Dll Aufruf
    Return -1
    Else
    Return DllStructGetData($S_SYSTEM_INFO, "dwNumberOfProcessors")
    EndIf

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

    EndFunc ;==>GetCPUCores

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

    $sOut = 'Kerne: ' & GetCPUCores

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

    MsgBox(64, 'CPU-Kerne', $sOut)

    [/autoit]
  • Also mit der Registry Geschichte,
    Ises bei mir so das der bei Senctral Prozessor von 0-3 durchgeht.
    Jedoch erkenn ich grad bei überfliegen nicht das der zwischen Virtuell und Physikalisch unterscheidet.
    Ich hab ein Q6600 müsste ja ein zweikerner mit HT sein