AskSystem 1.7.3 - Optimierung nötig! :P

  • So, ich hab dank SEuBos Hilfe jetzt die SysInfo Func's von Oscar mit drin.
    Allerdings ist der Code etwas.. "groß" & leicht unübersichtlich geworden.

    Ideen für Verkürzungen, schnellere Funktionen & co?
    Nur her damit :D

    Achtung, Code ist "lang" :P

    Spoiler anzeigen
    [autoit]


    ;==============================================================
    ; AskSystem
    ;==============================================================
    ; Author: Sen
    ; Version: 1.7.2 Beta
    ;==============================================================
    ; Credits:
    ; Oscar - System Info Functions
    ; GTA-Spider - ProcessPath / Hwnd Function
    ; SEuBo - Assemble AskSystem with Oscar's Functions
    ; Xenobiologist - _DecodeProduktKey
    ; Prog@ndy - Dll Call for reading GetLocaleInfo
    ;==============================================================
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <Date.au3>
    #include <Inet.au3>
    #include <Constants.au3>
    #include <StaticConstants.au3>

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

    Dim $Tab[17]
    Dim $List[17]
    Local $Load

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

    If @OSType <> 'WIN32_NT' Then
    MsgBox(48, "AskSystem - Error", "AskSystem funktioniert erst ab Windows 2000")
    Exit
    EndIf

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

    #Region GUI
    $Main = GUICreate("AskSystem", 600, 400, -1, -1)

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

    ;Tab Menü
    $Tab[0] = GUICtrlCreateTab(0, 0, 600, 400)
    $Tab_Con = GUICtrlCreateContextMenu($Tab[0])
    $Con_Refresh = GUICtrlCreateMenuItem("Refresh All", $Tab_Con)

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

    #Region Tab - Manager
    $Tab[1] = GUICtrlCreateTabItem("Manager")

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

    ;ProgessBar
    $ProgressP = GUICtrlCreateProgress(0, 250, 600, 15)
    $ProgressD = GUICtrlCreateProgress(0, 385, 600, 15)

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

    ;ProzessListe - Process
    $List[0] = GUICtrlCreateListView("Process|PID|Path|Title|Hwnd|Read|Write|Transfer|I/O", 0, 25, 600, 225)
    _GUICtrlListView_RegisterSortCallBack($List[0])
    _GUICtrlListView_SetColumnWidth($List[0], 0, 150)
    _GUICtrlListView_SetColumnWidth($List[0], 1, 50)
    _GUICtrlListView_SetColumnWidth($List[0], 2, 150)
    _GUICtrlListView_SetColumnWidth($List[0], 3, 100)
    _GUICtrlListView_SetColumnWidth($List[0], 4, 100)
    _GUICtrlListView_SetColumnWidth($List[0], 5, 100)

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

    ;ProzessListe - Drives
    $List[1] = GUICtrlCreateListView("Label|System|Serial|Type|Free|Total", 0, 265, 600, 120)
    _GUICtrlListView_RegisterSortCallBack($List[1])
    _GUICtrlListView_SetColumnWidth($List[1], 0, 120)
    _GUICtrlListView_SetColumnWidth($List[1], 1, 70)
    _GUICtrlListView_SetColumnWidth($List[1], 2, 100)
    _GUICtrlListView_SetColumnWidth($List[1], 3, 80)
    _GUICtrlListView_SetColumnWidth($List[1], 4, 100)
    _GUICtrlListView_SetColumnWidth($List[1], 5, 100)

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

    ;Context Menü Process
    $ContextP = GUICtrlCreateContextMenu($List[0])
    $ProcessKill = GUICtrlCreateMenuItem("Kill Process", $ContextP)
    $RefreshP = GUICtrlCreateMenuItem("Refresh", $ContextP)
    $CopyInfoP = GUICtrlCreateMenuItem("Copy to Clipboard", $ContextP)
    $SaveLogP = GUICtrlCreateMenuItem("Save Process Log", $ContextP)

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

    ;Context Menü Drives
    $ContextD = GUICtrlCreateContextMenu($List[1])
    $RefreshD = GUICtrlCreateMenuItem("Refresh", $ContextD)
    $CopyInfoD = GUICtrlCreateMenuItem("Copy to Clipboard", $ContextD)
    $SaveLogD = GUICtrlCreateMenuItem("Save Drive Log", $ContextD)
    #EndRegion Tab - Manager

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

    #Region Tab - Windows
    $Tab[2] = GUICtrlCreateTabItem("Windows")
    $List[2] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Windows

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

    #Region Tab - Drives
    $Tab[3] = GUICtrlCreateTabItem("Drives")
    $List[3] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Drives

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

    #Region Tab - Harddisks
    $Tab[4] = GUICtrlCreateTabItem("Harddisks")
    $List[4] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Harddisks

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

    #Region Tab - Cd-Rom
    $Tab[5] = GUICtrlCreateTabItem("Cd-Rom")
    $List[5] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Cd-Rom

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

    #Region Tab - Network
    $Tab[6] = GUICtrlCreateTabItem("Network")
    $List[6] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Network

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

    #Region Tab - Networkadapter
    $Tab[7] = GUICtrlCreateTabItem("NetworkAdapter")
    $List[7] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Networkadapter

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

    #Region Tab - Processor
    $Tab[8] = GUICtrlCreateTabItem("CPU")
    $List[8] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Processor

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

    #Region Tab - RAM
    $Tab[9] = GUICtrlCreateTabItem("RAM")
    $List[9] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - RAM

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

    #Region Tab - Graphiccard
    $Tab[10] = GUICtrlCreateTabItem("Graphiccard")
    $List[10] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Graphiccard

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

    #Region Tab - Monitor
    $Tab[11] = GUICtrlCreateTabItem("Monitor")
    $List[11] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Monitor

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

    #Region Tab - Printer
    $Tab[12] = GUICtrlCreateTabItem("Printer")
    $List[12] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Printer

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

    #Region Tab - Soundcard
    $Tab[13] = GUICtrlCreateTabItem("Soundcard")
    $List[13] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Soundcard

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

    #Region Tab - Mainboard
    $Tab[14] = GUICtrlCreateTabItem("Mainboard")
    $List[14] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Mainboard

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

    #Region Tab - Sockets
    $Tab[15] = GUICtrlCreateTabItem("Sockets")
    $List[15] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    #EndRegion Tab - Sockets

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

    #Region Tab - Info
    $Tab[16] = GUICtrlCreateTabItem("Info")
    $List[16] = GUICtrlCreateListView("||", 0, 25, 600, 375)
    _GUICtrlListView_SetColumnWidth($List[16], 0, 160)
    _GUICtrlListView_SetColumnWidth($List[16], 1, 440)
    _FillInfo()
    #EndRegion Tab - Info

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

    ;GUI Settings
    WinRunTrans($Main, "Show")
    #EndRegion GUI

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

    #Region StartUp
    FillProcess()
    FillDrives()
    FillTabs()
    #EndRegion StartUp

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

    #Region Case's
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Con_Refresh
    For $i = "3" To "15"
    _GUICtrlListView_DeleteAllItems($List[$i])
    Next
    FillTabs()
    Case $RefreshP
    FillProcess()
    Case $RefreshD
    FillDrives()
    Case $SaveLogP
    ProcessLog()
    Case $SaveLogD
    DriveLog()
    Case $CopyInfoP
    CopyToClipBoardP()
    Case $CopyInfoD
    CopyToClipBoardD()
    Case $List[0]
    _GUICtrlListView_SortItems($List[0], GUICtrlGetState($List[0]))
    Case $List[1]
    _GUICtrlListView_SortItems($List[1], GUICtrlGetState($List[1]))
    Case $ProcessKill
    KillProcess()
    EndSwitch
    WEnd
    #EndRegion Case's

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

    #Region Func's
    Func OnAutoItExit()
    WinRunTrans($Main, "Hide")
    _GUICtrlListView_UnRegisterSortCallBack($List[0])
    _GUICtrlListView_UnRegisterSortCallBack($List[1])
    EndFunc ;==>OnAutoItExit

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

    Func _FillInfo()
    GUICtrlCreateListViewItem("Programm Name:|AskSystem", $List[16])
    GUICtrlCreateListViewItem("Version:|1.7.2 Beta", $List[16])
    GUICtrlCreateListViewItem("Date:|25.12.2009", $List[16])
    GUICtrlCreateListViewItem("|", $List[16])
    GUICtrlCreateListViewItem("Coder:|Sen (Christopher Klay)", $List[16])
    GUICtrlCreateListViewItem("|", $List[16])
    GUICtrlCreateListViewItem("Credits:|Xenobiologist (Thorsten Meger) - _DecodeProduktKey Function", $List[16])
    GUICtrlCreateListViewItem("|Prog@ndy - Dll Call for reading GetLocaleInfo", $List[16])
    GUICtrlCreateListViewItem("|SEuBo - Assemble AskSystem 1.6 with the new Func's from Oscar ", $List[16])
    GUICtrlCreateListViewItem("|Oscar - System Info Functions", $List[16])
    GUICtrlCreateListViewItem("|GTASpider - ProcessPath & Hwnd Info Function", $List[16])
    GUICtrlCreateListViewItem("|", $List[16])
    GUICtrlCreateListViewItem("|Thanks to everyone for testing, bug reporting", $List[16])
    GUICtrlCreateListViewItem("|and good criticism.", $List[16])
    GUICtrlCreateListViewItem("|", $List[16])
    GUICtrlCreateListViewItem("Changelog:|- 1.7.2 -", $List[16])
    GUICtrlCreateListViewItem("|- System Info's added", $List[16])
    GUICtrlCreateListViewItem("|- Info-Site added", $List[16])
    EndFunc ;==>_FillInfo

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

    Func KillProcess()
    $ClickedItem = GUICtrlRead($List[0])
    If $ClickedItem > 0 Then
    $Read = GUICtrlRead($ClickedItem)
    $Read = StringSplit($Read, "|")
    If ProcessExists($Read[1]) <> "0" Then
    Do
    ProcessClose($Read[1])
    Until ProcessExists($Read[1]) = "0"
    _GUICtrlListView_DeleteItemsSelected($List[0])
    FillProcess()
    EndIf
    EndIf
    EndFunc ;==>KillProcess

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

    Func CopyToClipBoardP()
    $ClickedItem = GUICtrlRead($List[0])
    If $ClickedItem > 0 Then
    $Read = GUICtrlRead($ClickedItem)
    ClipPut($Read)
    EndIf
    EndFunc ;==>CopyToClipBoardP

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

    Func CopyToClipBoardD()
    $ClickedItem = GUICtrlRead($List[1])
    If $ClickedItem > 0 Then
    $Read = GUICtrlRead($ClickedItem)
    ClipPut($Read)
    EndIf
    EndFunc ;==>CopyToClipBoardD

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

    Func ProcessLog()
    _GUICtrlListView_BeginUpdate($List[0])
    If FileExists(@DesktopCommonDir & "/AskProcess - Process.txt") = "0" Then
    FileWrite(@DesktopCommonDir & "/AskProcess - Process.txt", "")
    EndIf
    $ListLines = _GUICtrlListView_GetItemCount($List[0])
    $LogFile = FileOpen(@DesktopCommonDir & "/AskProcess - Process.txt", 2)
    If $LogFile <> -1 Then
    For $i = 0 To $ListLines
    $LogLine = _GUICtrlListView_GetItemTextString($List[0], $i)
    FileWriteLine(@DesktopCommonDir & "/AskProcess - Process.txt", $LogLine)
    Next
    EndIf
    FileClose(@DesktopCommonDir & "/AskProcess - Process.txt")
    _GUICtrlListView_EndUpdate($List[0])
    EndFunc ;==>ProcessLog

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

    Func DriveLog()
    _GUICtrlListView_BeginUpdate($List[1])
    If FileExists(@DesktopCommonDir & "/AskProcess - Drives.txt") = "0" Then
    FileWrite(@DesktopCommonDir & "/AskProcess - Drives.txt", "")
    EndIf
    $ListLines = _GUICtrlListView_GetItemCount($List[1])
    $LogFile = FileOpen(@DesktopCommonDir & "/AskProcess - Drives.txt", 2)
    If $LogFile <> -1 Then
    For $i = 0 To $ListLines
    $LogLine = _GUICtrlListView_GetItemTextString($List[1], $i)
    FileWriteLine(@DesktopCommonDir & "/AskProcess - Drives.txt", $LogLine)
    Next
    EndIf
    FileClose(@DesktopCommonDir & "/AskProcess - Drives.txt")
    _GUICtrlListView_EndUpdate($List[1])
    EndFunc ;==>DriveLog

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

    Func FillDrives()
    _GUICtrlListView_BeginUpdate($List[1])
    _GUICtrlListView_DeleteAllItems($List[1])
    $Drives = DriveGetDrive("ALL")
    For $i = "1" To $Drives[0]
    GUICtrlSetData($ProgressD, (100 * $i) / $Drives[0])
    $Name = DriveGetLabel($Drives[$i])
    $Type = DriveGetType($Drives[$i])
    $Serial = DriveGetSerial($Drives[$i])
    $System = DriveGetFileSystem($Drives[$i])
    $Free = Round(DriveSpaceFree($Drives[$i]) / 1000, 2) & "Gb"
    $Total = Round(DriveSpaceTotal($Drives[$i]) / 1000, 2) & "Gb"
    GUICtrlCreateListViewItem($Name & "|" & $System & "|" & $Serial & "|" & $Type & "|" & $Free & "|" & $Total, $List[1])
    Next
    _GUICtrlListView_EndUpdate($List[1])
    EndFunc ;==>FillDrives

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

    Func FillProcess()
    _GUICtrlListView_BeginUpdate($List[0])
    _GUICtrlListView_DeleteAllItems($List[0])
    $Process_List = ProcessList()
    $ReadAll = "0"
    $WriteAll = "0"
    For $i = 2 To $Process_List[0][0]
    GUICtrlSetData($ProgressP, (100 * $i) / $Process_List[0][0])
    $Stats = ProcessGetStats($Process_List[$i][0], 1)
    $Path = _PidGetPath($Process_List[$i][1])
    If IsArray($Stats) Then
    $ReadAll = $ReadAll + $Stats[3]
    $WriteAll = $WriteAll + $Stats[4]
    EndIf
    If $Path = "0" Then
    $Path = "-"
    EndIf
    $Title = _WinGetInfoByPID($Process_List[$i][1])
    If IsArray($Title) Then
    If IsArray($Stats) Then
    GUICtrlCreateListViewItem($Process_List[$i][0] & "|" & $Process_List[$i][1] & "|" & $Path & "|" & $Title[1][1] & "|" & $Title[1][2] & "|" & $Stats[3] * 1000 & "|" & $Stats[4] * 1000 & "|" & $Stats[5] * 1000 & "|" & $Stats[2], $List[0])
    Else
    GUICtrlCreateListViewItem($Process_List[$i][0] & "|" & $Process_List[$i][1] & "|" & $Path & "|" & $Title[1][1] & "|" & $Title[1][2] & "|-|-|-|-", $List[0])
    EndIf
    Else
    If IsArray($Stats) Then
    GUICtrlCreateListViewItem($Process_List[$i][0] & "|" & $Process_List[$i][1] & "|" & $Path & "|-|-|" & $Stats[3] * 1000 & "|" & $Stats[4] * 1000 & "|" & $Stats[5] * 1000 & "|" & $Stats[2], $List[0])
    Else
    GUICtrlCreateListViewItem($Process_List[$i][0] & "|" & $Process_List[$i][1] & "|" & $Path & "|-|-|-|-|-|-|-", $List[0])
    EndIf
    EndIf
    Next
    _GUICtrlListView_EndUpdate($List[0])
    EndFunc ;==>FillProcess

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

    Func FillTabs()
    ; Windows
    $aWMIINfo = _CI_GetWindowsInfo()
    $hLVHandle = GUICtrlGetHandle($List[2])
    _ArrayUmdrehen($aWMIINfo)
    For $i = 0 To UBound($aWMIINfo) - 1
    GUICtrlCreateListViewItem($aWMIINfo[$i][0] & "|" & $aWMIINfo[$i][1], $List[2])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ; Drives
    $aWMIINfo = _CI_GetLogicalDisk()
    $hLVHandle = GUICtrlGetHandle($List[3])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[3])
    Next
    GUICtrlCreateListViewItem("|", $List[3])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;Harddrives
    $aWMIINfo = _CI_GetHarddrives()
    $hLVHandle = GUICtrlGetHandle($List[4])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[4])
    Next
    GUICtrlCreateListViewItem("|", $List[4])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;Cd-Rom
    $aWMIINfo = _CI_GetCDROM()
    $hLVHandle = GUICtrlGetHandle($List[5])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[5])
    Next
    GUICtrlCreateListViewItem("|", $List[5])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;Network
    $aWMIINfo = _CI_GetNetwork()
    $hLVHandle = GUICtrlGetHandle($List[6])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[6])
    Next
    GUICtrlCreateListViewItem("|", $List[6])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;NetworkAdapter
    $aWMIINfo = _CI_GetNetworkAdapter()
    $hLVHandle = GUICtrlGetHandle($List[7])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[7])
    Next
    GUICtrlCreateListViewItem("|", $List[7])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;CPU
    $aWMIINfo = _CI_GetCPU()
    $hLVHandle = GUICtrlGetHandle($List[8])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[8])
    Next
    GUICtrlCreateListViewItem("|", $List[8])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;RAM
    $aWMIINfo = _CI_GetRAM()
    $hLVHandle = GUICtrlGetHandle($List[9])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[9])
    Next
    GUICtrlCreateListViewItem("|", $List[9])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;Graphiccard
    $aWMIINfo = _CI_GetVideoController()
    $hLVHandle = GUICtrlGetHandle($List[10])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[10])
    Next
    GUICtrlCreateListViewItem("|", $List[10])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;Monitor
    $aWMIINfo = _CI_GetMonitor()
    $hLVHandle = GUICtrlGetHandle($List[11])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[11])
    Next
    GUICtrlCreateListViewItem("|", $List[11])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;Printer
    $aWMIINfo = _CI_GetPrinter()
    $hLVHandle = GUICtrlGetHandle($List[12])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[12])
    Next
    GUICtrlCreateListViewItem("|", $List[12])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;Soundcard
    $aWMIINfo = _CI_GetSoundDevice()
    $hLVHandle = GUICtrlGetHandle($List[13])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[13])
    Next
    GUICtrlCreateListViewItem("|", $List[13])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;Mainboard
    $aWMIINfo = _CI_GetMainBoard()
    $hLVHandle = GUICtrlGetHandle($List[14])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[14])
    Next
    GUICtrlCreateListViewItem("|", $List[14])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)

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

    ;Sockel
    $aWMIINfo = _CI_GetSystemSlot()
    $hLVHandle = GUICtrlGetHandle($List[15])
    ;~ _ArrayUmdrehen($aWinInfo)
    For $x = 1 To UBound($aWMIINfo) - 1
    For $i = 0 To UBound($aWMIINfo, 2) - 1
    GUICtrlCreateListViewItem($aWMIINfo[0][$i] & "|" & $aWMIINfo[$x][$i], $List[15])
    Next
    GUICtrlCreateListViewItem("|", $List[15])
    Next
    _GUICtrlListView_SetColumnWidth($hLVHandle, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hLVHandle, 1, $LVSCW_AUTOSIZE)
    EndFunc ;==>FillTabs

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

    Func _PidGetPath($pid = "", $strComputer = 'localhost')
    If $pid = "" Then $pid = WinGetProcess(WinGetTitle(""))
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId = " & $pid, "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If $objItem.ExecutablePath Then Return $objItem.ExecutablePath
    Next
    EndIf
    EndFunc ;==>_PidGetPath

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

    Func _CI_SerialToString($sSerial)
    Local $sOut = ''
    For $i = 1 To StringLen($sSerial) Step 2
    $sOut &= Chr(Dec(StringMid($sSerial, $i, 2)))
    Next
    Return $sOut
    EndFunc ;==>_CI_SerialToString

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

    Func _WinGetInfoByPID($sPID)
    Local $aPList = ProcessList(), $iPID
    For $iiCount = 1 To $aPList[0][0]
    If $aPList[$iiCount][1] = $sPID Then
    If $sPID = 0 Then Return 0
    $iPID &= $aPList[$iiCount][1] & Chr(01)
    EndIf
    Next
    $iPID = StringSplit($iPID, Chr(01))
    If $iPID = 0 Then Return SetError(1, 0, 0)
    Local $aStoreHwndAndText[2][9], $nCount = 1
    $OptWSC = Opt('WinSearchChildren', 1)
    $OptWDHT = Opt('WinDetectHiddenText', 1)
    Local $aWinList = WinList()
    For $iCount = 1 To $aWinList[0][0]
    For $xCount = 1 To $iPID[0]
    If WinGetProcess($aWinList[$iCount][1]) = $iPID[$xCount] And _
    $aWinList[$iCount][0] <> '' Then
    Local $aWinPos = WinGetPos($aWinList[$iCount][1])
    Local $aWinClient = WinGetClientSize($aWinList[$iCount][1])
    $nCount += 1
    ReDim $aStoreHwndAndText[$nCount][9]
    $aStoreHwndAndText[$nCount - 1][1] = $aWinList[$iCount][0]
    $aStoreHwndAndText[$nCount - 1][2] = $aWinList[$iCount][1]
    $aStoreHwndAndText[$nCount - 1][3] = WinGetText($aWinList[$iCount][1])
    $aStoreHwndAndText[$nCount - 1][4] = $aWinPos[0]
    $aStoreHwndAndText[$nCount - 1][5] = $aWinPos[1]
    $aStoreHwndAndText[$nCount - 1][6] = $aWinClient[0]
    $aStoreHwndAndText[$nCount - 1][7] = $aWinClient[1]
    $aStoreHwndAndText[$nCount - 1][8] = WinGetClassList($aWinList[$iCount][1])
    EndIf
    Next
    Next
    Opt('WinSearchChildren', $OptWSC)
    Opt('WinDetectHiddenText', $OptWDHT)
    If $nCount = 1 Then Return SetError(2, 0, 0)
    Return $aStoreHwndAndText
    EndFunc ;==>_WinGetInfoByPID

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

    Func _CI_GetWindowsInfo($strComputer = '.')
    Local $aReturn[2][17] = [[ _
    'Betriebssystem:', 'Version:', 'Sprachversion:', 'Tastatur:', 'Boot-Laufwerk:', 'Windows-Verzeichnis:', _
    'Speicherplatz:', 'Hauptspeicher:', 'Auslagerungsdatei:', 'Installationsdatum:', 'Zuletzt gestartet:', _
    'Heutiges Datum:', 'Benutzername:', 'Benutzerverzeichnis:', 'Produktkey:', 'Hintergrundbild:', 'Bildschirmschoner:']]
    Local $aTmp, $sOSLang = @OSLang, $sKBLayout = @KBLayout, $sDigitalProductID, $sWallpaper = 'Nicht vorhanden', $sScreenSaver = 'Nicht vorhanden'
    Local $x = 0, $objWMIService, $colItems, $aMemory = MemGetStats(), $sX64 = ''
    $aTmp = DllCall('kernel32.dll', 'int', 'GetLocaleInfo', 'dword', '0x' & $sOSLang, 'dword', BitOR(0x2, 0x80000000), 'str', '', 'int', 85)
    If IsArray($aTmp) Then $sOSLang = $aTmp[3]
    $aTmp = DllCall('kernel32.dll', 'int', 'GetLocaleInfo', 'dword', '0x' & $sKBLayout, 'dword', BitOR(0x2, 0x80000000), 'str', '', 'int', 85)
    If IsArray($aTmp) Then $sKBLayout = $aTmp[3]
    If @OSArch <> 'X86' Then $sX64 = '64'
    $sDigitalProductID = RegRead('HKEY_LOCAL_MACHINE' & $sX64 & '\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'DigitalProductID')
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Desktop', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If StringInStr($objItem.Name, @UserName) Then
    If $objItem.Wallpaper <> '' Then $sWallpaper = $objItem.Wallpaper
    If $objItem.ScreenSaverExecutable <> '' Then $sScreenSaver = $objItem.ScreenSaverExecutable
    EndIf
    Next
    EndIf
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $aReturn[1][0] = $objItem.Caption & ' (' & @OSArch & ')'
    $aReturn[1][1] = $objItem.Version
    $aReturn[1][2] = $sOSLang
    $aReturn[1][3] = $sKBLayout
    $aReturn[1][4] = $objItem.BootDevice
    $aReturn[1][5] = $objItem.WindowsDirectory
    $aReturn[1][6] = 'Laufwerk "' & $objItem.SystemDrive & '\" ' & _ByteAutoSize(DriveSpaceTotal($objItem.SystemDrive) * 2 ^ 20)
    $aReturn[1][6] &= ' (' & _ByteAutoSize(DriveSpaceFree($objItem.SystemDrive) * 2 ^ 20) & ' frei)'
    $aReturn[1][7] = _ByteAutoSize($aMemory[1] * 1024, 0, 3)
    $aReturn[1][8] = _ByteAutoSize($objItem.SizeStoredInPagingFiles * 1024, 0, 3)
    $aReturn[1][9] = _WMIDateStringToDate($objItem.InstallDate)
    $aReturn[1][10] = _WMIDateStringToDate($objItem.LastBootUpTime)
    $aReturn[1][11] = _NowCalc()
    $aReturn[1][12] = @UserName
    $aReturn[1][13] = @UserProfileDir
    $aReturn[1][14] = _DecodeProductKey($sDigitalProductID)
    $aReturn[1][15] = $sWallpaper
    $aReturn[1][16] = $sScreenSaver
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetWindowsInfo

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

    Func _CI_GetHarddrives($strComputer = '.')
    Local $aReturn[1][8] = [[ _
    'Bezeichnung:', 'Größe:', 'Anschluss:', 'Bytes/Sektor:', 'Anzahl der Sektoren:', _
    'PNPDeviceID:', 'Status:', 'Seriennr. (Hardware):']]
    Local $x = 0, $objWMIService, $colItems
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][8]
    $aReturn[$x][0] = $objItem.Model
    $aReturn[$x][1] = _ByteAutoSize($objItem.Size)
    $aReturn[$x][2] = $objItem.InterfaceType
    $aReturn[$x][3] = $objItem.BytesPerSector
    $aReturn[$x][4] = $objItem.TotalSectors
    $aReturn[$x][5] = $objItem.PNPDeviceID
    $aReturn[$x][6] = $objItem.Status
    Switch @OSVersion
    Case 'WIN_VISTA', 'WIN_7'
    If Number($objItem.SerialNumber) > 0 Then
    $aReturn[$x][7] = $objItem.SerialNumber & ' ("' & _CI_SerialToString($objItem.SerialNumber) & '")'
    Else
    $aReturn[$x][7] = 'nicht vorhanden'
    EndIf
    Case Else
    $aReturn[$x][7] = 'Wird von ' & @OSVersion & ' nicht unterstützt!'
    EndSwitch
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetHarddrives

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

    Func _CI_GetLogicalDisk($strComputer = '.')
    Local $aReturn[1][9] = [[ _
    'Laufwerk:', 'Beschreibung:', 'Netzwerkpfad:', 'Zugriff:', 'Größe:', 'Freier Speicher:', _
    'Dateisystem:', 'Datenträgername:', 'Seriennr. (Datenträger):']]
    Local $x = 0, $objWMIService, $colItems, $aAccess[2] = ['R/W', 'R']
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalDisk', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][9]
    $aReturn[$x][0] = $objItem.Name
    $aReturn[$x][1] = $objItem.Description
    If $objItem.Description = 'Netzwerkverbindung' Then
    $aReturn[$x][2] = $objItem.ProviderName
    Else
    $aReturn[$x][2] = '---'
    EndIf
    If String($objItem.FileSystem) <> '' Then
    If String($objItem.Access) <> '' Then
    $aReturn[$x][3] = $aAccess[Number($objItem.Access)]
    Else
    $aReturn[$x][3] = 'nicht verfügbar'
    EndIf
    $aReturn[$x][4] = _ByteAutoSize($objItem.Size)
    $aReturn[$x][5] = _ByteAutoSize($objItem.FreeSpace)
    $aReturn[$x][6] = $objItem.FileSystem
    $aReturn[$x][7] = '"' & $objItem.VolumeName & '"'
    $aReturn[$x][8] = $objItem.VolumeSerialNumber
    EndIf
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetLogicalDisk

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

    Func _CI_GetCDROM($strComputer = '.')
    Local $aReturn[1][9] = [[ _
    'Laufwerk:', 'Bezeichnung:', 'Typ:', 'PNPDeviceID:', 'Laufwerk-Status:', _
    'Disc-Status:', 'Disc-Name:', 'Disc-Größe:', 'Seriennr. (Disc):']]
    Local $x = 0, $objWMIService, $colItems, $aMedia[2] = ['keine Disc eingelegt', 'Disc eingelegt']
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_CDROMDrive', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][9]
    $aReturn[$x][0] = $objItem.Drive
    $aReturn[$x][1] = $objItem.Name
    $aReturn[$x][2] = $objItem.MediaType
    $aReturn[$x][3] = $objItem.PNPDeviceID
    $aReturn[$x][4] = $objItem.Status
    $aReturn[$x][5] = $aMedia[Abs($objItem.MediaLoaded)]
    If Abs($objItem.MediaLoaded) Then
    $aReturn[$x][6] = '"' & $objItem.VolumeName & '"'
    $aReturn[$x][7] = _ByteAutoSize($objItem.Size)
    $aReturn[$x][8] = $objItem.VolumeSerialNumber
    EndIf
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetCDROM

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

    Func _CI_GetNetwork($strComputer = '.')
    Local $aReturn[2][10] = [[ _
    'Benutzername:', 'Computername:', 'LAN-IP-Adresse:', 'DNS-Server:', 'Arbeitsgruppe:', _
    'WAN-IP-Adresse:', 'Ping-Zeiten:', ' google.de', ' heise.de', ' t-online.de']]
    Local $x = 0, $objWMIService, $colItems
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $aReturn[1][0] = @UserName
    $aReturn[1][1] = @ComputerName
    $aReturn[1][2] = _CI_GetLANIP()
    $aReturn[1][3] = _CI_GetDNS()
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_ComputerSystem', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $aReturn[1][4] = $objItem.Domain
    $aReturn[1][5] = _GetIP()
    Next
    EndIf
    $aReturn[1][7] = _CI_PingCheck('google.de')
    $aReturn[1][8] = _CI_PingCheck('heise.de')
    $aReturn[1][9] = _CI_PingCheck('t-online.de')
    Return $aReturn
    EndFunc ;==>_CI_GetNetwork

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

    Func _CI_GetLANIP()
    Local $sPID = Run(@ComSpec & " /c ping -4 -n 1 " & @ComputerName, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
    Local $sOut = ''
    While 1
    $sOut &= StdoutRead($sPID)
    If @error Then ExitLoop
    WEnd
    Return StringRegExpReplace($sOut, '(?s).+\[(.+)\].+', '$1')
    EndFunc ;==>_CI_GetLANIP

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

    Func _CI_GetDNS()
    Local $sPID = Run(@ComSpec & " /c nslookup " & @ComputerName, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
    Local $sOut = ''
    While 1
    $sOut &= StdoutRead($sPID)
    If @error Then ExitLoop
    WEnd
    Return StringRegExpReplace($sOut, '(?s)Server:\h+(\S+).*?Address:\h+(\S+).*', '$2 ("$1")')
    EndFunc ;==>_CI_GetDNS

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

    Func _CI_PingCheck($sURL)
    Local $iRet, $aError[5] = ['', 'Computer ist offline', 'Computer ist nicht erreichbar', 'Falsche Adresse', 'Anderer Fehler']
    $iRet = Ping($sURL, 1000)
    If Not @error Then Return '~ ' & $iRet & ' ms'
    Return $aError[@error]
    EndFunc ;==>_CI_PingCheck

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

    Func _CI_GetNetworkAdapter($strComputer = '.')
    Local $aReturn[1][12] = [[ _
    'Hersteller:', 'Name:', 'Adapter-Typ:', 'Kennung:', _
    'MAC-Adresse:', 'IP-Adresse:', 'IP-Subnetzmaske:', 'Adresstyp:', _
    'DHCP-Server:', 'IP erhalten:', 'IP läuft ab:', 'Standardgateway:']]
    Local $x = 0, $objWMIService, $colItems, $colItems2
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus > 0', 'WQL', 0x30)
    If Not IsObj($colItems) Then Return SetError(2, 0, 0)
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][12]
    $aReturn[$x][0] = $objItem.Manufacturer
    $aReturn[$x][1] = $objItem.Name
    $aReturn[$x][2] = $objItem.AdapterType
    $aReturn[$x][3] = $objItem.NetConnectionID
    $aReturn[$x][4] = $objItem.MACAddress
    $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
    $aReturn[$x][5] = $objItem2.IPAddress(0)
    $aReturn[$x][6] = $objItem2.IPSubnet(0)
    If $objItem2.DHCPEnabled = -1 Then
    $aReturn[$x][7] = 'von DHCP zugewiesen'
    $aReturn[$x][8] = $objItem2.DHCPServer
    $aReturn[$x][9] = _WMIDateStringToDate($objItem2.DHCPLeaseObtained)
    $aReturn[$x][10] = _WMIDateStringToDate($objItem2.DHCPLeaseExpires)
    Else
    $aReturn[$x][7] = 'Manuell konfiguriert'
    EndIf
    $aReturn[$x][11] = $objItem2.DefaultIPGateway(0)
    EndIf
    EndIf
    Next
    EndIf
    Next
    Return $aReturn
    EndFunc ;==>_CI_GetNetworkAdapter

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

    Func _CI_GetCPU($strComputer = '.')
    Local $aReturn[2][12] = [[ _
    'Prozessor:', 'Name:', 'Beschreibung:', 'Sockel:', 'Taktfrequenz:', 'Ext. Taktfrequenz:', 'Spannung:', _
    'Adress-Bitbreite:', 'Daten-Bitbreite:', 'Prozessor-ID:', '', '']]
    Local $x = 0, $objWMIService, $colItems
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Processor', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][12]
    $aReturn[$x][0] = $objItem.DeviceID
    $aReturn[$x][1] = $objItem.Name
    $aReturn[$x][2] = $objItem.Description
    $aReturn[$x][3] = $objItem.SocketDesignation
    $aReturn[$x][4] = $objItem.CurrentClockSpeed & ' MHz (max. ' & $objItem.MaxClockSpeed & ' MHz)'
    $aReturn[$x][5] = $objItem.ExtClock & ' MHz'
    $aReturn[$x][6] = Round($objItem.CurrentVoltage / 10, 1) & ' V'
    $aReturn[$x][7] = $objItem.AddressWidth & ' Bit'
    $aReturn[$x][8] = $objItem.DataWidth & ' Bit'
    $aReturn[$x][9] = $objItem.ProcessorId
    Switch @OSVersion
    Case 'WIN_VISTA', 'WIN_7'
    $aReturn[0][10] = 'Prozessorkerne:'
    $aReturn[0][11] = 'logische Prozessoren:'
    $aReturn[$x][10] = $objItem.NumberOfCores
    $aReturn[$x][11] = $objItem.NumberOfLogicalProcessors
    EndSwitch
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetCPU

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

    Func _CI_GetRAM($strComputer = '.')
    Local $aMemType[22] = ['Unbekannt', 'Anderes', 'DRAM', 'Sync DRAM', 'Cache DRAM', _
    'EDO', 'EDRAM', 'VRAM', 'SRAM', 'RAM', 'ROM', _
    'Flash', 'EEPROM', 'FEPROM', 'EPROM', 'CDRAM', '3DRAM', _
    'SDRAM', 'SGRAM', 'RDRAM', 'DDR', 'DDR-2']
    Local $aFormFactor[24] = ['Unbekannt', 'Andere', 'SIP', 'DIP', 'ZIP', 'SOJ', _
    'Proprietär', 'SIMM', 'DIMM', 'TSOP', 'PGA', 'RIMM', _
    'SODIMM', 'SRIMM', 'SMD', 'SSMP', 'QFP', 'TQFP', _
    'SOIC', 'LCC', 'PLCC', 'BGA', 'FPBGA', 'LGA']
    Local $aErrCorr[8] = ['Reserviert', 'Andere', 'Unbekannt', 'Keine', 'Parity', 'Single-bit ECC', 'Multi-bit ECC', 'CRC']
    Local $aReturn[2][8] = [[ _
    'Belegung:', 'Kapazität:', 'Daten-Bitbreite:', 'Steckplatz:', _
    'Typ:', 'Format:', 'Fehlerkorrektur:', 'Bezeichnung:']]
    Local $x = 0, $objWMIService, $colItems, $iMemDev, $iMaxCap, $iErrCorr
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PhysicalMemoryArray', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $iMemDev = $objItem.MemoryDevices
    $iMaxCap = _ByteAutoSize($objItem.MaxCapacity * 1024, 0, 3)
    $iErrCorr = Number($objItem.MemoryErrorCorrection)
    Next
    EndIf
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PhysicalMemory', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][8]
    $aReturn[$x][0] = $objItem.BankLabel
    $aReturn[$x][1] = _ByteAutoSize($objItem.Capacity, 0, 3) & ' (max. ' & $iMaxCap & ')'
    $aReturn[$x][2] = $objItem.TotalWidth & ' Bit'
    $aReturn[$x][3] = $objItem.DeviceLocator & ' (max. ' & $iMemDev & ' Steckplätze)'
    $aReturn[$x][4] = $aMemType[Number($objItem.MemoryType)]
    $aReturn[$x][5] = $aFormFactor[Number($objItem.FormFactor)]
    $aReturn[$x][6] = $aErrCorr[$iErrCorr]
    $aReturn[$x][7] = $objItem.PartNumber
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetRAM

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

    Func _CI_GetVideoController($strComputer = '.')
    Local $aReturn[2][12] = [[ _
    'Hersteller:', 'Beschreibung:', 'RAMDAC:', 'Grafikkarten-RAM:', _
    'RAM-Typ:', 'Horiz. Auflösung:', 'Vertik. Auflösung:', 'Bits/Pixel:', _
    'Anzahl der Farben:', 'Bildwiederholfrequenz:', 'Treiberversion:', 'Treiberdatum:']]
    Local $aRAMType[14] = ['', 'Anderer', 'Unbekannt', 'VRAM', 'DRAM', 'SRAM', 'WRAM', 'EDO RAM', _
    'Burst Sync DRAM', 'Pipelined Burst SRAM', 'CDRAM', '3DRAM', 'SDRAM', 'SGRAM']
    Local $x = 0, $objWMIService, $colItems, $Output
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_VideoController', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][12]
    $aReturn[$x][0] = $objItem.AdapterCompatibility
    $aReturn[$x][1] = $objItem.Description
    $aReturn[$x][2] = $objItem.AdapterDACType
    $aReturn[$x][3] = _ByteAutoSize($objItem.AdapterRAM, 0, 3)
    $aReturn[$x][4] = $aRAMType[Number($objItem.VideoMemoryType)]
    $aReturn[$x][5] = $objItem.CurrentHorizontalResolution
    $aReturn[$x][6] = $objItem.CurrentVerticalResolution
    $aReturn[$x][7] = $objItem.CurrentBitsPerPixel
    $aReturn[$x][8] = _StringAddThousandsSep($objItem.CurrentNumberOfColors, '.', ',')
    $aReturn[$x][9] = $objItem.CurrentRefreshRate & ' Hz'
    $aReturn[$x][10] = $objItem.DriverVersion
    $aReturn[$x][11] = _WMIDateStringToDate($objItem.DriverDate)
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetVideoController

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

    Func _CI_GetMonitor($strComputer = '.')
    Local $aReturn[2][8] = [[ _
    'Hersteller:', 'Modell:', 'Breite (Pixel):', 'Höhe (Pixel):', _
    'Pixel pro Inch (X):', 'Pixel pro Inch (Y):', 'Monitorgröße (ca.):', 'PNPDeviceID:']]
    Local $x = 0, $objWMIService, $colItems, $Output
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DesktopMonitor', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][8]
    $aReturn[$x][0] = $objItem.MonitorManufacturer
    $aReturn[$x][1] = $objItem.Name
    $aReturn[$x][2] = $objItem.ScreenWidth
    $aReturn[$x][3] = $objItem.ScreenHeight
    $aReturn[$x][4] = $objItem.PixelsPerXLogicalInch
    $aReturn[$x][5] = $objItem.PixelsPerYLogicalInch
    $aReturn[$x][6] = Round($objItem.ScreenWidth / ($objItem.PixelsPerXLogicalInch / 2.54), 2) & _
    ' x ' & Round($objItem.ScreenHeight / ($objItem.PixelsPerYLogicalInch / 2.54), 2) & ' cm²'
    $aReturn[$x][7] = $objItem.PNPDeviceID
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetMonitor

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

    Func _CI_GetPrinter($strComputer = '.')
    Local $aReturn[2][5] = [['Name:', 'Treibername:', 'Anschluss:', 'Horiz. Auflösung:', 'Vertik. Auflösung:']]
    Local $x = 0, $objWMIService, $colItems
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Printer', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][5]
    $aReturn[$x][0] = $objItem.Name
    $aReturn[$x][1] = $objItem.DriverName
    $aReturn[$x][2] = $objItem.PortName
    $aReturn[$x][3] = $objItem.HorizontalResolution
    $aReturn[$x][4] = $objItem.VerticalResolution
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetPrinter

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

    Func _CI_GetSoundDevice($strComputer = '.')
    Local $aReturn[2][3] = [['Hersteller:', 'Name:', 'PNPDeviceID:']]
    Local $x = 0, $objWMIService, $colItems
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_SoundDevice', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][3]
    $aReturn[$x][0] = $objItem.Manufacturer
    $aReturn[$x][1] = $objItem.Name
    $aReturn[$x][2] = $objItem.PNPDeviceID
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetSoundDevice

    [/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 _CI_GetSystemSlot($strComputer = '.')
    Local $aReturn[2][3] = [['Bezeichnung:', 'Steckplatz belegt:', 'max. Datenbreite:']]
    Local $aUsage[5] = ['Reserviert', 'Anderer', 'Unbekannt', 'Nein', 'Ja']
    Local $x = 0, $objWMIService, $colItems
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_SystemSlot', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][3]
    $aReturn[$x][0] = $objItem.SlotDesignation
    $aReturn[$x][1] = $aUsage[$objItem.CurrentUsage]
    $aReturn[$x][2] = 2 ^ ($objItem.MaxDataWidth + 3) & ' Bits'
    Next
    EndIf
    Return $aReturn
    EndFunc ;==>_CI_GetSystemSlot

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

    Func _ByteAutoSize($iSize, $iRound = 2, $iFormat = 0, $bThousands = True)
    Local $aSize[4] = [' Byte', ' KByte', ' MByte', ' GByte'], $sReturn
    If $iFormat < 0 Or $iFormat > 4 Then $iFormat = 0
    If $iRound < 0 Or $iRound > 8 Then $iRound = 2
    If Not IsBool($bThousands) Then $bThousands = False
    $iSize = Abs($iSize)
    If $iFormat = 0 Then
    For $i = 30 To 0 Step -10
    If $iSize > (2 ^ $i) Then
    $iFormat = $i / 10 + 1
    ExitLoop
    EndIf
    Next
    EndIf
    If $iFormat = 0 Then $iFormat = 1
    $sReturn = StringFormat('%.' & $iRound & 'f', Round($iSize / (2 ^ (($iFormat - 1) * 10)), $iRound))
    If $bThousands Then $sReturn = _StringAddThousandsSep($sReturn, '.', ',')
    Return $sReturn & $aSize[$iFormat - 1]
    EndFunc ;==>_ByteAutoSize

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

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

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

    Func _DecodeProductKey($BinaryDPID)
    If IsBinary($BinaryDPID) Then $BinaryDPID = StringMid($BinaryDPID, 3) ; Changed because Beta 3.2.13.2
    Local $bKey[15]
    Local $sKey[29]
    Local $Digits[24]
    Local $Value = 0
    Local $hi = 0
    Local $n = 0
    Local $i = 0
    Local $dlen = 29
    Local $slen = 15
    Local $Result
    $Digits = StringSplit('BCDFGHJKMPQRTVWXY2346789', '')
    $BinaryDPID = StringMid($BinaryDPID, 105, 30)
    For $i = 1 To 29 Step 2
    $bKey[Int($i / 2)] = Dec(StringMid($BinaryDPID, $i, 2))
    Next
    For $i = $dlen - 1 To 0 Step -1
    If Mod(($i + 1), 6) = 0 Then
    $sKey[$i] = '-'
    Else
    $hi = 0
    For $n = $slen - 1 To 0 Step -1
    $Value = BitOR(BitShift($hi, -8), $bKey[$n])
    $bKey[$n] = Int($Value / 24)
    $hi = Mod($Value, 24)
    Next
    $sKey[$i] = $Digits[$hi + 1]
    EndIf
    Next
    For $i = 0 To 28
    $Result = $Result & $sKey[$i]
    Next
    Return $Result
    EndFunc ;==>_DecodeProductKey

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

    Func _StringAddThousandsSep($sString, $sThousands = -1, $sDecimal = -1)
    Local $sResult = "" ; Force string
    Local $rKey = "HKCU\Control Panel\International"
    If $sDecimal = -1 Then $sDecimal = RegRead($rKey, "sDecimal")
    If $sThousands = -1 Then $sThousands = RegRead($rKey, "sThousand")
    Local $aNumber = StringRegExp($sString, "(\D?\d+)\D?(\d*)", 1) ; This one works for negatives.
    If UBound($aNumber) = 2 Then
    Local $sLeft = $aNumber[0]
    While StringLen($sLeft)
    $sResult = $sThousands & StringRight($sLeft, 3) & $sResult
    $sLeft = StringTrimRight($sLeft, 3)
    WEnd
    $sResult = StringTrimLeft($sResult, StringLen($sThousands)) ; Strip leading thousands separator
    If $aNumber[1] <> "" Then $sResult &= $sDecimal & $aNumber[1]
    EndIf
    Return $sResult
    EndFunc ;==>_StringAddThousandsSep

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

    Func _ArrayUmdrehen(ByRef $avArray)
    ;SEuBo
    If UBound($avArray, 0) > 2 Then Return
    $1st = UBound($avArray, 1)
    $2nd = UBound($avArray, 2)
    Local $aRet[$2nd][$1st]
    For $s1 = 0 To $1st - 1
    For $s2 = 0 To $2nd - 1
    $aRet[$s2][$s1] = $avArray[$s1][$s2]
    Next
    Next
    $avArray = $aRet
    EndFunc ;==>_ArrayUmdrehen

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

    Func WinRunTrans($Window, $Mod)
    If $Mod = "Show" Then
    WinSetTrans($Window, "", 0)
    GUISetState(@SW_SHOW, $Window)
    For $i = 0 To 255 Step 5
    WinSetTrans($Window, "", $i)
    Sleep(10)
    Next
    ElseIf $Mod = "Hide" Then
    For $i = 255 To 0 Step -5
    WinSetTrans($Window, "", $i)
    Sleep(10)
    Next
    GUISetState(@SW_HIDE, $Window)
    EndIf
    EndFunc ;==>WinRunTrans
    #EndRegion Func's

    [/autoit]

    Edit:
    Download da der Source zu lang ist: autoit.de/wcf/attachment/7105/

  • Gefällt mir ganz gut - sehr übersichtlich!

    Vorschläge:

    • Fenster zu klein -> Größe sollte individuell anpassbar sein (resizeable window)
    • wenn der Scan zu Ende ist, dann vielleicht ein MsgBox, denn z.Zt. sich man das nicht, obwohl der Balken bei 100% ist
    • Export Funktion in eine Datei, z.B. in CSV, Text


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Wäre es möglich, dass du die neue Version direkt im ersten Beitrag einfügst?
    Ich habe eben versehentlich die alte Version geladen und wahrscheinlich war ich nicht der einzige :)

    Gutes Tool!
    Eine Export-Funtion oder zumindest Kopiermöglichkeit wäre toll.
    Außerdem flachert das Programm am Anfang sehr stark. Vielleicht könnte es erst einmal die Daten laden und dann die GUI damit füllen bzw. GUI erst nach der Befüllung einblenden :)