Jump to content
Sign in to follow this  
Rogue5099

Set an Array variable with unknown number

Recommended Posts

Rogue5099

As I am writing a code I want to declare a variable as an array but without giving it a number.

Global $var[100]

But I might need 102 or only need 20 depending.

Share this post


Link to post
Share on other sites
Melba23

Rogue5099,

If you are going to add the items to the array one by one then you can use the little trick I explain at the end of the Recursion tutorial in the Wiki to correctly size the array as you go along. :)

M23


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
BrewManNH

Use Global $var[1]

This makes $var an array, and then you can use ReDim to add more "rows" once you know how many you actually need.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites
Rogue5099

Ok getting off subject cause I'm getting stumped, I broke down a script I've been messing with and it works fine broken down but put into main script it only works partly.  I'm creating a button for each drive that is on the computer (eventually going to show info but for now just msgbox).

Here is working on each drive I have:

#include <GuiConstantsEx.au3>
Dim $DriveButton[100], $DriveTypeLabel[100], $DriveFreePos[100], $DriveFree[100], $DriveType[100]
Global $aDrive = DriveGetDrive("ALL")
DriveInfo()
GUICreate("Test", 400, 455, -1, -1)
GUISetFont(8, 400, 0, "Lucida Console")

For $i = 1 To $aDrive[0]
    If Not $DriveType[$i] = "" Then
        $DriveButton[$i] = GUICtrlCreateButton(StringUpper($aDrive[$i]) & "\", 5, 25 + (($i - 1) * 15), 30, 15)
        $DriveTypeLabel[$i] = GUICtrlCreateLabel($DriveType[$i], 45, 25 + (($i - 1) * 15), 75, 15, 0x1201)
        $DriveFreePos[$i] = GUICtrlCreateProgress(125, 25 + (($i - 1) * 15), 125, 15, 0x01)
        GUICtrlSetData($DriveFreePos[$i], $DriveFree[$i])
        If ($DriveType[$i] = "Fixed" Or $DriveType[$i] = "Removable") And ($DriveFree[$i] > 0) Then GUICtrlCreateLabel(Round((DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") - DriveSpaceFree(StringUpper($aDrive[$i]) & "\")) / 1024, 1) & "/" &  Round((DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") / 1024), 1) & " GB (" & $DriveFree[$i] & "%)", 255, 30 + (($i - 1) * 15))
    EndIf
Next
GUISetState(@SW_SHOW)

While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $DriveButton[1] To UBound($DriveButton)
            MsgBox(0, "", GUICtrlRead($iMsg))
    EndSwitch
WEnd

Func DriveInfo()
    For $i = 1 To $aDrive[0]
        $DriveType[$i] = DriveGetType(StringUpper($aDrive[$i]) & "\")
        $DriveFree[$i] = Round((DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") - DriveSpaceFree(StringUpper($aDrive[$i]) & "\")) / DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") * 100, 0)
        GUICtrlSetData($DriveFreePos[$i], $DriveFree[$i])
        GUICtrlSetData($DriveTypeLabel[$i], $DriveType[$i])
    Next
EndFunc   ;==>DriveInfo 

Here is not working on each drive but just on 3-4 of them:

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icon.ico
#AutoIt3Wrapper_Res_Comment=Freeware, If you paid for this software you should get your money back!
#AutoIt3Wrapper_Res_Description=Computer Stats
#AutoIt3Wrapper_Res_Fileversion=2.0.2.0
#AutoIt3Wrapper_Res_LegalCopyright=GNU FreeSoftware
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_Res_requestedExecutionLevel=None
#AutoIt3Wrapper_UseX64=N
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.8.1

    Author :       Rogue5099

    Credits:       JSThePatriot, Melba23, Beege, ApudAngelorum, AZJIO, EXIT
                    JFX, bcording

    And thanks to anyone else and the AutoIt Team
    that has helped and I have forgotten.

    Script Function: Gather System Information and display it easily.

#ce ----------------------------------------------------------------------------
#region - Includes -
#include <GuiConstantsEx.au3>
#include <EditConstants.au3>
#include <GuiListView.au3>
#include <Date.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <SendMessage.au3>
#include <IE.au3>
#endregion - Includes -
Global Const $Buisness = "Computer Stats", $Ver = "2.0.2.0"
Global Const $Phone = "555-555-5555"
#region - Globals -
Opt('GUICloseOnESC', 0)
Global Const $MIB_IF_TYPE_OTHER = 1
Global Const $MIB_IF_TYPE_ETHERNET_CSMACD = 6
Global Const $MIB_IF_TYPE_ISO88025_TOKENRING = 9
Global Const $MIB_IF_TYPE_PPP = 23
Global Const $MIB_IF_TYPE_SOFTWARE_LOOPBACK = 24
Global Const $MIB_IF_TYPE_ATM = 37
Global Const $MIB_IF_TYPE_IEEE80211 = 71
Global Const $MIB_IF_TYPE_TUNNEL = 131
Global Const $MIB_IF_TYPE_IEEE1394 = 144
Global Const $wbemFlagReturnImmediately = 0x10
Global Const $wbemFlagForwardOnly = 0x20
Global Const $tagMIB_IFROW = 'wchar Name[256];dword Index;dword Type;dword Mtu;dword Speed;dword PhysAddrLen;byte PhysAddr[8];dword AdminStatus;dword OperStatus;' & _
        'dword LastChange;dword InOctets;dword InUcastPkts;dword InNUcastPkts;dword InDiscards;dword InErrors;dword InUnknownProtos;dword OutOctets;dword OutUcastPkts;' & _
        'dword OutNUcastPkts;dword OutDiscards;dword OutErrors;dword OutQLen;dword DescrLen;char Descr[256]'
Global $iMarquee_Loop = 0
Global $sMarquee_Move = "scroll"
Global $sMarquee_Direction = "left"
Global $iMarquee_Scroll = 6
Global $iMarquee_Delay = 85
Global $iMarquee_Border = 0
Global $vMarquee_TxtCol = Default
Global $sMarquee_BkCol = Default
Global $sMarquee_FontFamily = "Tahoma"
Global $iMarquee_FontSize = 12
Global $Date, $Time, $AvgCPU, $Collected, $CPUTotal, $RAMCollected, $RAMTotal
Global $CPU[8], $CPULabel[8]
Global $oDict, $ProcessList2, $l = 0
Global $colItems, $strReserved, $strVendorSpecific, $strVendorSpecific4, $Output
Global $DriveInfo, $DriveInfoLoad, $DriveLabel, $DriveInfoType, $DriveFileSystem, $DriveSize, $DriveSerial, $DriveTemp, $DriveProgress, $DriveLetter, $DriveStatus, $Memory
Global $ip = "localhost"
Global $RAMUsage = MemGetStats()
Global $RefreshTimerA = TimerInit()
Global $RefreshTimerB = TimerInit()
Global $aDrive = DriveGetDrive("ALL")
Global $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394084(v=vs.85).aspx"
Global $BIOS, $aSystemInfo, $DriveTypeLabel[100], $DriveFreePos[100], $DriveFree[100], $DriveType[100], $DriveButton[100]
Global $hUpdate, $aStart_Values
Global $sBmpFilePath = @TempDir & '\bg.bmp'
Global $_PDH_hDLLHandle = -1, $_PDH_bInit = False, $_PDH_iLastError = 0
Global $_PDH_REG_MODIFIED, $_PDH_RESTORE_REG
Global $_PDH_iCPUCount
Global $PDH_DEBUGLOG = 1
Global $hPDHQuery, $aCPUCounters, $iTotalCPUs, $iCounterValue, $sPCName = ""
#endregion - Globals -
#region - Loading GUI with Infomation
If @OSServicePack = "" Then $OSServicePack = "Original Version"
If Not @OSServicePack = "" Then $OSServicePack = @OSServicePack
Switch @OSVersion
    Case "WIN_8"
        $OSVersion = "Windows 8"
    Case "WIN_7"
        $OSVersion = "Windows 7"
    Case "WIN_VISTA"
        $OSVersion = "Windows Vista"
    Case "WIN_2008R2"
        $OSVersion = "Windows 2008 R2"
    Case "WIN_2008"
        $OSVersion = "Windows 2008"
    Case "WIN_XP"
        $OSVersion = "Windows XP"
    Case "WIN_2003"
        $OSVersion = "Windows 2003"
    Case "WIN_2000"
        $OSVersion = "Windows 2000"
    Case Else
        $OSVersion = "Unknown"
EndSwitch
$Language = _GLI()
$CPUInfo = _CPURegistryInfo()
$IPDetail = _IPDetails()
_ComputerGetSystem($aSystemInfo)
_ComputerGetBIOS($BIOS)
DateTime()
DriveInfo()
_ComputerGetMemory($Memory)
Switch $Memory[1][12]
    Case 11
        $MemoryType = "Flash"
    Case 16
        $MemoryType = "3DRAM"
    Case 17
        $MemoryType = "SDRAM"
    Case 20
        $MemoryType = "DDR"
    Case 21
        $MemoryType = "DDR2"
    Case Else
        $MemoryType = "DDR3"
EndSwitch
$MainGUI = GUICreate($Buisness & " Utility - Version " & $Ver, 400, 455, -1, -1, 0x00CA0080, $WS_EX_ACCEPTFILES)
GUISetFont(8, 400, 0, "Lucida Console")
$ToolsMenu = GUICtrlCreateMenu("Tools")
$PixalFinder = GUICtrlCreateMenuItem("Pixel Finder", $ToolsMenu)
$RecycleItem = GUICtrlCreateMenuItem("Clean Temp Files", $ToolsMenu)
$DriveInfoItem = GUICtrlCreateMenuItem("Details on Drive...", $ToolsMenu)
$RemoteRepair = GUICtrlCreateMenuItem("Remote Repair (Team Viewer)", $ToolsMenu)
GUICtrlCreateMenuItem("", $ToolsMenu)
$RefreshNet = GUICtrlCreateMenuItem("Refresh Connection", $ToolsMenu)
$ClearIEHistory = GUICtrlCreateMenuItem("Delete IE History", $ToolsMenu)
$ResetIE = GUICtrlCreateMenuItem("Reset IE to Default Settings", $ToolsMenu)
GUICtrlCreateMenuItem("", $ToolsMenu)
$Filters = GUICtrlCreateMenuItem("CD Drive Read/Write FIX", $ToolsMenu)
$SFC = GUICtrlCreateMenuItem("System File FIX", $ToolsMenu)
$USBHijack = GUICtrlCreateMenuItem("Remove USB Hijack Risks", $ToolsMenu)
$HardwareMenu = GUICtrlCreateMenu("Information")
$AboutCPU = GUICtrlCreateMenuItem("Processor", $HardwareMenu)
$AboutRAM = GUICtrlCreateMenuItem("RAM (Memory)", $HardwareMenu)
$AboutHDD = GUICtrlCreateMenuItem("Hard Drive", $HardwareMenu)
$AboutMotherboard = GUICtrlCreateMenuItem("Motherboard", $HardwareMenu)
$AboutGraphics = GUICtrlCreateMenuItem("Graphics Card", $HardwareMenu)
$AboutSoundCard = GUICtrlCreateMenuItem("Sound Card", $HardwareMenu)
$AboutNetwork = GUICtrlCreateMenuItem("Network", $HardwareMenu)
GUICtrlCreateMenuItem("", $HardwareMenu)
$AboutOS = GUICtrlCreateMenuItem("Operating System", $HardwareMenu)
$AboutBios = GUICtrlCreateMenuItem("BIOS", $HardwareMenu)
$AboutSystem = GUICtrlCreateMenuItem("System", $HardwareMenu)
GUICtrlCreateMenuItem("", $HardwareMenu)
$AboutBattery = GUICtrlCreateMenuItem("Battery", $HardwareMenu)
$AboutMonitor = GUICtrlCreateMenuItem("Monitor", $HardwareMenu)
$AboutKeyboard = GUICtrlCreateMenuItem("Keyboard", $HardwareMenu)
$AboutMouse = GUICtrlCreateMenuItem("Mouse", $HardwareMenu)
$AccessMenu = GUICtrlCreateMenu("System")
$TaskMGR = GUICtrlCreateMenuItem("Task Manager", $AccessMenu)
$DeviceManager = GUICtrlCreateMenuItem("Device Manager", $AccessMenu)
$Services = GUICtrlCreateMenuItem("Services", $AccessMenu)
GUICtrlCreateMenuItem("", $AccessMenu)
$SystemProperties = GUICtrlCreateMenuItem("System Properties", $AccessMenu)
$FolderProperties = GUICtrlCreateMenuItem("Folder Properties", $AccessMenu)
GUICtrlCreateMenuItem("", $AccessMenu)
$InternetOptions = GUICtrlCreateMenuItem("IE Internet Options", $AccessMenu)
GUICtrlCreateMenuItem("", $AccessMenu)
$Registry = GUICtrlCreateMenuItem("Open Registry", $AccessMenu)
GUICtrlCreateMenuItem("", $AccessMenu)
$FindProductKeys = GUICtrlCreateMenuItem("Product Keys", $AccessMenu)
$GetMenu = GUICtrlCreateMenu("Downloads")
$Adobe = GUICtrlCreateMenuItem("Adobe Flash/Reader", $GetMenu)
$Java = GUICtrlCreateMenuItem("Java", $GetMenu)
GUICtrlCreateMenuItem("", $GetMenu)
$CCleaner = GUICtrlCreateMenuItem("Piriform Tools", $GetMenu)
$HelpMenu = GUICtrlCreateMenu("About")
$CreditsItem = GUICtrlCreateMenuItem("Credits", $HelpMenu)
$Website = GUICtrlCreateMenuItem("Website", $HelpMenu)
GUICtrlCreateLabel($Buisness & " Info Tool", 0, 420, 350, 15, 0x1000)
$TimeLabel = GUICtrlCreateLabel($Date & "  " & $Time, 250, 420, 150, 15, 0x1001)
GUICtrlCreateTab(0, 0, 400, 419, 0x0148)
$MainTab = GUICtrlCreateTabItem("Main")
GUICtrlCreateLabel("User Name:", 10, 25, 250, 25)
GUICtrlCreateInput(@UserName, 175, 25, 215, 20, 0x0801)
GUICtrlCreateLabel("Computer Name:", 10, 50, -1, -1)
GUICtrlCreateInput(@ComputerName, 175, 50, 215, 20, 0x0801)
GUICtrlCreateLabel("OS Language:", 10, 75, -1, -1)
GUICtrlCreateInput($Language, 175, 75, 215, 20, 0x0801)
GUICtrlCreateLabel("Current OS:", 10, 100, -1, -1)
GUICtrlCreateInput($OSVersion & " " & @OSArch, 175, 100, 215, 20, 0x0801)
GUICtrlCreateLabel("Service Pack:", 10, 125, -1, -1)
GUICtrlCreateInput($OSServicePack, 175, 125, 215, 20, 0x0801)
GUICtrlCreateLabel("Manufacturer:", 10, 150, -1, -1)
GUICtrlCreateInput(StringStripWS($aSystemInfo[1][21], 3), 175, 150, 215, 20, 0x0801)
GUICtrlCreateLabel("Model:", 10, 175, -1, -1)
GUICtrlCreateInput(StringStripWS($aSystemInfo[1][22], 3), 175, 175, 215, 20, 0x0801)
GUICtrlCreateLabel("Serial Number:", 10, 200, -1, -1)
GUICtrlCreateInput(StringStripWS($BIOS[1][16], 3), 175, 200, 215, 20, 0x0801)
GUICtrlCreateLabel("Memory Type:", 10, 225, -1, -1)
GUICtrlCreateInput($MemoryType, 175, 225, 215, 20, 0x0801)
GUICtrlCreateLabel("Total Physical Memory:", 10, 250, -1, -1)
GUICtrlCreateInput(Round($aSystemInfo[1][48] / 1073741824, 2) & " GB", 175, 250, 215, 20, 0x0801)
GUICtrlCreateLabel("CPU Speed:", 10, 275, -1, -1)
GUICtrlCreateInput(StringFormat('%.2f', ($CPUInfo[1] / 1000)) & " GHz", 175, 275, 215, 20, 0x0801)
GUICtrlCreateLabel("Display WxH @ Refresh:", 10, 300, -1, -1)
$DisplaysLabel = GUICtrlCreateInput(@DesktopWidth & " x " & @DesktopHeight & " @ " & @DesktopRefresh & " Hz", 175, 300, 215, 20, 0x0801)
GUICtrlCreateLabel("Display Depth:", 10, 325, -1, -1)
$DisplayDLabel = GUICtrlCreateInput(@DesktopDepth & " Bits", 175, 325, 215, 20, 0x0801)
GUICtrlCreateLabel("OS Install Path:", 10, 350, -1, -1)
$DisplayDLabel = GUICtrlCreateInput(@WindowsDir & "\", 175, 350, 215, 20, 0x0801)
GUICtrlCreateTab(-1, -1, 400, 419)
GUICtrlCreateTabItem("Drives")
For $i = 1 To $aDrive[0]
    If Not $DriveType[$i] = "" Then
        $DriveButton[$i] = GUICtrlCreateButton(StringUpper($aDrive[$i]) & "\", 5, 25 + (($i - 1) * 15), 30, 15)
        $DriveTypeLabel[$i] = GUICtrlCreateLabel($DriveType[$i], 45, 25 + (($i - 1) * 15), 75, 15, 0x1201)
        $DriveFreePos[$i] = GUICtrlCreateProgress(125, 25 + (($i - 1) * 15), 125, 15, 0x01)
        GUICtrlSetData($DriveFreePos[$i], $DriveFree[$i])
        If ($DriveType[$i] = "Fixed" Or $DriveType[$i] = "Removable") And ($DriveFree[$i] > 0) Then GUICtrlCreateLabel(Round((DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") - DriveSpaceFree(StringUpper($aDrive[$i]) & "\")) / 1024, 1) & "/" &  Round((DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") / 1024), 1) & " GB (" & $DriveFree[$i] & "%)", 255, 30 + (($i - 1) * 15))
    EndIf
Next
GUICtrlCreateTab(-1, -1, 400, 419)
GUICtrlCreateTabItem("CPU")
GUICtrlCreateLabel("CPU Arch:", 10, 25, 270, 15)
GUICtrlCreateInput(@CPUArch, 105, 25, 290, 20, 0x0801)
GUICtrlCreateLabel("CPU Name:", 10, 50, -1, -1)
GUICtrlCreateInput(StringStripWS($CPUInfo[2], 7), 105, 50, 290, 20, 0x0801)
GUICtrlCreateLabel("Vendor:", 10, 75, -1, -1)
GUICtrlCreateInput($CPUInfo[4], 105, 75, 290, 20, 0x0801)
GUICtrlCreateLabel("Cores:", 10, 100, -1, -1)
GUICtrlCreateInput($CPUInfo[0], 105, 100, 290, 20, 0x0801)
GUICtrlCreateLabel("Speed:", 10, 125, -1, -1)
GUICtrlCreateInput(StringFormat('%.2f', ($CPUInfo[1] / 1000)) & " GHz", 105, 125, 290, 20, 0x0801)
GUICtrlCreateLabel("Identifier:", 10, 150, -1, -1)
GUICtrlCreateInput($CPUInfo[3], 105, 150, 290, 20, 0x0801)
$hPDHQuery = _PDH_GetNewQueryHandle()
$aCPUCounters = _PDH_GetCPUCounters($hPDHQuery, $sPCName)
$iTotalCPUs = @extended
_PDH_CollectQueryData($hPDHQuery)
Sleep(250)
For $i = 0 To $CPUInfo[0] - 1
    GUICtrlCreateLabel("CPU #" & $i + 1 & ":", 10, $i * 25 + 175, 265, 15)
    $CPU[$i] = GUICtrlCreateProgress(120, $i * 25 + 175, 245, -1, 0x01)
    $CPULabel[$i] = GUICtrlCreateLabel("", 370, $i * 25 + 180, 30, 15)
Next
GUICtrlCreateLabel("CPU Total Usage:", 10, $CPUInfo[0] * 25 + 175, 265, 15)
$AvgCPUBar = GUICtrlCreateProgress(120, $CPUInfo[0] * 25 + 175, 245, -1, 0x01)
$AvgCPUBarLabel = GUICtrlCreateLabel("", 370, $CPUInfo[0] * 25 + 180, 30, 15)
_CPU()
GUICtrlCreateTab(-1, -1, 400, 419)
GUICtrlCreateTabItem("RAM")
GUICtrlCreateLabel("Memory Type:", 10, 25, 270, 15)
GUICtrlCreateInput($MemoryType, 105, 25, 290, 20, 0x0801)
GUICtrlCreateLabel("Total RAM:", 10, 50, 270, 15)
GUICtrlCreateInput(Round($RAMUsage[1] / 1048576, 2) & " GB", 105, 50, 290, 20, 0x0801)
GUICtrlCreateLabel("Total Virtual:", 10, 75, 270, 15)
GUICtrlCreateInput(Round($RAMUsage[3] / 1048576, 2) & " GB", 105, 75, 290, 20, 0x0801)
GUICtrlCreateLabel("RAM Usage:", 10, 100, 270, 15)
$RAM = GUICtrlCreateProgress(120, 100, 245, -1, 0x01)
$RAMLabel = GUICtrlCreateLabel("", 370, 105, 30, 15)
GUICtrlCreateLabel("Avg. RAM Usage:", 10, 125, 270, 15)
$AvgRAMBar = GUICtrlCreateProgress(120, 125, 245, -1, 0x01)
$AvgRAMLabel = GUICtrlCreateLabel("", 370, 130, 30, 15)
GUICtrlCreateTab(-1, -1, 400, 419)
GUICtrlCreateTabItem("Network")
If $CmdLine[0] > 0 Then $ip = $CmdLine[1]
$objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $ip & "\root\cimv2")
GUICtrlCreateLabel("Public IP:", 10, 25, -1, -1)
GUICtrlCreateLabel("Local IP 1:", 10, 50, -1, -1)
GUICtrlCreateLabel("Local IP 2:", 10, 75, -1, -1)
GUICtrlCreateLabel("Local IP 3:", 10, 100, -1, -1)
GUICtrlCreateLabel("Local IP 4:", 10, 125, -1, -1)
GUICtrlCreateLabel("MAC Address:", 10, 150, -1, -1)
GUICtrlCreateLabel("Default Gateway:", 10, 175, -1, -1)
GUICtrlCreateLabel("DNS Domain:", 10, 200, -1, -1)
GUICtrlCreateLabel("Domain:", 10, 225, -1, -1)
GUICtrlCreateLabel("Server:", 10, 250, -1, -1)
GUICtrlCreateLabel("Network Adapter:", 10, 275, -1, -1)
GUICtrlCreateLabel("Network Activity:", 10, 300, -1, -1)
GUICtrlCreateLabel("Network Speed:", 10, 325, -1, -1)
$PublicIP = _GetPublicIP()
If $PublicIP = -1 Then $PublicIP = "Not Connected Online"
GUICtrlCreateInput($PublicIP, 145, 25, 250, 20, 0x0801)
$IP1 = GUICtrlCreateInput(@IPAddress1, 145, 50, 250, 20, 0x0801)
$IP2 = GUICtrlCreateInput(@IPAddress2, 145, 75, 250, 20, 0x0801)
$IP3 = GUICtrlCreateInput(@IPAddress3, 145, 100, 250, 20, 0x0801)
$IP4 = GUICtrlCreateInput(@IPAddress4, 145, 125, 250, 20, 0x0801)
GUICtrlCreateInput($IPDetail[1], 145, 150, 250, 20, 0x0801)
GUICtrlCreateInput($IPDetail[2], 145, 175, 250, 20, 0x0801)
$DNSDomain = GUICtrlCreateInput(@LogonDNSDomain, 145, 200, 250, 20, 0x0801)
$Domain = GUICtrlCreateInput(@LogonDomain, 145, 225, 250, 20, 0x0801)
$Server = GUICtrlCreateInput(@LogonServer, 145, 250, 250, 20, 0x0801)
$Adaptor = GUICtrlCreateInput(GetWMI($ip), 145, 275, 250, 20, 0x0801)
$NetSpeed = GUICtrlCreateInput("DL: 0 kB/sec  UL: 0 kB/sec", 145, 300, 250, 20, 0x0801)
$NetTest = GUICtrlCreateInput("DL: 0 Mbps  UL: 0 Mbps", 145, 325, 200, 20, 0x0801)
$TestNetSpeed = GUICtrlCreateButton("Test", 345, 325, 50, 20)
GUICtrlCreateTab(-1, -1, 400, 419)
GUICtrlCreateTabItem("Etc")
GUICtrlCreateLabel("Run:", 10, 25)
$RUN = GUICtrlCreateInput("", 90, 25, 200, 20, 0x1080)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
$Browse = GUICtrlCreateButton("...", 295, 25, 50, 20)
$Submit = GUICtrlCreateButton("Run", 345, 25, 50, 20)
GUICtrlCreateLabel("Edit:", 10, 50)
$Edit = GUICtrlCreateInput("", 90, 50, 200, 20, 0x1080)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
$EditBrowse = GUICtrlCreateButton("...", 295, 50, 50, 20)
$EditSubmit = GUICtrlCreateButton("Edit", 345, 50, 50, 20)
GUICtrlCreateLabel("Kill PID:", 10, 75)
$KillPID = GUICtrlCreateInput("", 90, 75, 250, 20, 0x3000)
GUICtrlSetLimit($KillPID, 4)
$ExecKillPID = GUICtrlCreateButton("Kill", 345, 75, 50, 20)
GUICtrlCreateLabel("Kill Task:", 10, 100)
$Kill = GUICtrlCreateInput("", 90, 100, 250, 20, 0x1080)
$ExecKill = GUICtrlCreateButton("Kill", 345, 100, 50, 20)
GUICtrlCreateLabel("Delete File:", 10, 125)
$Delete = GUICtrlCreateInput("", 90, 125, 200, 20, 0x1080)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
$DeleteBrowse = GUICtrlCreateButton("...", 295, 125, 50, 20)
$DeleteSubmit = GUICtrlCreateButton("Delete", 345, 125, 50, 20)
$ProcessList = GUICtrlCreateButton("List Processes", 155, 385, 100, 20)
GUICtrlSetState($MainTab, $GUI_FOCUS)
GUICtrlSetState($MainTab, $GUI_DEFBUTTON)
GUICtrlSetState($MainTab, $GUI_ENABLE)
GUICtrlSetState($MainTab, $GUI_SHOW)
$RAMUsage = MemGetStats()
$RAMCollected = $RAMCollected + 1
$RAMTotal = Round($RAMUsage[0] + $RAMTotal)
$AvgRAM = Round($RAMTotal / $RAMCollected)
GUICtrlSetData($AvgRAMBar, $AvgRAM)
GUICtrlSetData($RAM, Round($RAMUsage[0], 0))
GUICtrlSetData($RAMLabel, Round($RAMUsage[0], 0) & "%")
$CPUUsage = Round(StringTrimRight(StringTrimLeft(FileReadLine(@TempDir & "\cpu.csv", -1), 27), 1), 0)
$Collected = $Collected + 1
$CPUTotal = Round($CPUUsage + $CPUTotal)
$AvgCPU = Round($CPUTotal / $Collected)
GUICtrlSetData($CPU, $CPUUsage)
GUICtrlSetData($CPULabel, $CPUUsage & "%")
GUICtrlSetData($AvgCPUBar, $AvgCPU)
GUICtrlCreateTab(-1, -1, 400, 419)
Global $IPHlpApi_Dll = DllOpen('IPHlpApi.dll')
Global $sLast_Label
Global $Global_IF_Count = _GetNumberofInterfaces()
Global $Table_Data = _WinAPI_GetIfTable()
If IsArray($Table_Data) Then
    $hUpdate = DllCallbackRegister('_UpdateStats', 'none', '')
    DllCall('user32.dll', 'int', 'SetTimer', 'hwnd', 0, 'int', 0, 'int', 1000, 'ptr', DllCallbackGetPtr($hUpdate))
    $aStart_Values = _GetAllTraffic()
Else
    GUICtrlSetData($NetSpeed, "Error reading Adapters")
EndIf
GUISetState(@SW_SHOW)
#endregion - Loading GUI with Infomation

#region - Main Loop -
While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $GUI_EVENT_CLOSE
            _PDH_FreeQueryHandle($hPDHQuery)
            _PDH_UnInit()
            Exit
        Case $DriveButton[1] To UBound($DriveButton)
            MsgBox(0, "", GUICtrlRead($iMsg))
        Case $PixalFinder
            PixelColor()
        Case $CreditsItem
            GUISetState(@SW_HIDE, $MainGUI)
            _Bgbmp ( "bg.bmp", @TempDir & "\", 1 )
            $Credits = '<b><center>About:<br>' & $Buisness & ' Utility<br><br>Creator: rogue5099<br>' & _
                    '<br>Phone: ' & $Phone & '<br><br>' & _
                    '<a href="http://www.google.com/"  target="_blank">Google</a><br><br>' & _
                    '<a href="http://www.autoitscript.com/forum/topic/29404-computer-info-udfs/page__view__findpost__p__209498"  target="_blank">CompInfo UDF: JSThePatriot</a><br>' & _
                    '<a href="http://www.autoitscript.com/forum/topic/103904-info-bar-like-tickertape/page__p__735769#entry735769"  target="_blank">Marquee UDF: Melba23</a><br>' & _
                    '<a href="http://www.autoitscript.com/forum/topic/105319-uploaddownload-meter/page__view__findpost__p__744592"  target="_blank">Network Meter: Beege</a><br>' & _
                    '<a href="http://www.autoitscript.com/forum/topic/148126-get-month-and-day-names-in-national-language-get-lcid-informations/?p=1052001" target="_blank">Language UDF: EXIT</a><br>' & _
                    '<a href="http://www.autoitscript.com/forum/topic/154510-computer-stats/?p=1116005" target="_blank">Language Function: AZJIO</a><br>' & _
                    '<a href="http://www.autoitscript.com/forum/topic/131797-windows-and-office-key/?p=917840" target="_blank">Product Keys: JFX/bcording</a><br>' & _
                    '<a href="http://www.autoitscript.com/forum/topic/90736-performance-counters-in-windows-measure-process-cpu-network-disk-usage/" target="_blank">Processor Usage: Ascend4nt</a><br>' & _
                    'TakeOwn UDF: ApudAngelorum<br>' & _
                    '<a href="http://www.autoitscript.com/"  target="_blank">Other UDFs: AutoIt Team</a></center>'
            $Credit = GUICreate("Credits", 280, 280, -1, -1, BitOR($WS_BORDER, $WS_POPUP))
            GUISetBkColor(0xFFFFFF, $Credit)
            _GUICtrlMarquee_SetScroll(0, Default, "up", 3)
            _GUICtrlMarquee_SetDisplay(0, Default, Default, 14, "times new roman")
            _GUICtrlMarquee_Create($Credits, 0, 16, 280, 264)
            $Close = GUICtrlCreateButton("X", 260, 0, 16, 16)
            GUISetState()

            While 1
                If GUIGetMsg() = $Close Then
                    GUIDelete($Credit)
                    GUISetState(@SW_SHOW, $MainGUI)
                    ExitLoop
                EndIf
            WEnd
            FileDelete(@TempDir & "\bg.bmp")
        Case $Website
            ShellExecute("http://www.autoitscript.com")
        Case $RemoteRepair
            $FileSize = InetGetSize("http://www.teamviewer.com/download/TeamViewerQS_en.exe")
            If $FileSize > 0 Then
                ProgressOn($Buisness, "Downloading: Remote Repair", "0%")
                $hInet = InetGet("http://www.teamviewer.com/download/TeamViewerQS_en.exe", @TempDir & "\TeamViewerQS_en.exe", 1, 1)

                While Not InetGetInfo($hInet, 2)
                    Sleep(500)
                    $BytesReceived = InetGetInfo($hInet, 0)
                    $Pct = Int($BytesReceived / $FileSize * 100)
                    ProgressSet($Pct, $Pct & "%")
                WEnd
                ProgressOff()
                Run(@TempDir & "\TeamViewerQS_en.exe")
                MsgBox(0, "Loading", "Loading Program...", 5)
                If WinWaitActive("TeamViewer", "", 20) = 0 Then
                    MsgBox(16, "Error", "Failed to load program.  Try re-downloading!")
                Else
                    MsgBox(64, $Buisness, 'You must give the "Your ID" and "Password" from this window to a Technician so you can be connected to.' & @CRLF & @CRLF & 'Contact Info: ' & $Phone)
                EndIf
            Else
                MsgBox(16, "Error", "Failed to download!")
            EndIf
        Case $DriveInfoItem
            DriveInfoGUI()
        Case $USBHijack
            For $i = 65 To 90
                $Exists = FileExists(Chr($i) & ":\autorun.inf")
                If $Exists = 1 Then FileSetAttrib(Chr($i) & ":\*Autorun.inf*", "-RASH")
                If $Exists = 1 Then $Del = MsgBox(0x40024, "!", "Delete Virus" & @CRLF & @CRLF & "AR.INF.RISK on " & Chr($i) & ":\ ?")
                If $Exists = 1 And $Del = 6 Then FileDelete(Chr($i) & ":\*Autorun.inf*")
            Next
        Case $RefreshNet
            ShellExecuteWait("ipconfig", "/release")
            ShellExecuteWait("ipconfig", "/flushdns")
            ShellExecute("ipconfig", "/renew")
        Case $SFC
            Send("#r")
            WinWaitActive("Run")
            Send("sfc /scannow{Enter}")
        Case $RecycleItem
            Recycle()
        Case $AboutCPU To $AboutMouse
            HardwareGUI(GUICtrlRead($iMsg, 1))
        Case $SystemProperties
            ShellExecute("sysdm.cpl")
        Case $InternetOptions
            ShellExecute("inetcpl.cpl")
        Case $Registry
            ShellExecute("regedit.exe")
        Case $TaskMGR
            ShellExecute("taskmgr.exe")
        Case $DeviceManager
            ShellExecute("devmgmt.msc")
        Case $Services
            ShellExecute("services.msc")
        Case $FolderProperties
            Send("#r")
            WinWaitActive("Run")
            Send("control folders{Enter}")
        Case $FindProductKeys
            MsgBox(0, "Product Keys", "- - - - - - - - - - - - -  W   I   N   D   O   W   S  - - - - - - - - - - - - -" & @CRLF & _
                    "Windows Key : " & @TAB & _DecodeProductKey("Windows") & @CRLF & _
                    "Windows Key 4 : " & @TAB & _DecodeProductKey("Windows_DPid4") & @CRLF & _
                    "Windows Default : " & @TAB & _DecodeProductKey("Windows_Def") & @CRLF & _
                    "Windows Default 4 : " & @TAB & _DecodeProductKey("Windows_Def_DPid4") & @CRLF & @CRLF & _
                    "- - - - - - - - - - - - - - -  O   F   F   I   C   E  - - - - - - - - - - - - - - -" & @CRLF & _
            "Office XP Key : " & @TAB & _DecodeProductKey("Office XP") & @CRLF & _
                    "Office 2003 Key : " & @TAB & _DecodeProductKey("Office 2003") & @CRLF & _
                    "Office 2007 Key : " & @TAB & _DecodeProductKey("Office 2007") & @CRLF & _
                    "Office 2010 x86 Key: " & @TAB & _DecodeProductKey("Office 2010 x86") & @CRLF & _
                    "Office 2010 x64 Key: " & @TAB & _DecodeProductKey("Office 2010 x64") & @CRLF & _
                    "Office 2013 x86 Key: " & @TAB & _DecodeProductKey("Office 2013 x86") & @CRLF & _
                    "Office 2013 x64 Key: " & @TAB & _DecodeProductKey("Office 2013 x64"))
        Case $Filters
            If MsgBox(4, "Upper/Lower Filter Fix", "This will remove Registry Entries!" & @CRLF & @CRLF & "Continue?") = 6 Then
                If RegDelete("HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}", "UpperFilters") = 2 Then MsgBox(48, "Error", "Error Deleting Upper Filter!")
                If RegDelete("HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}", "LowerFilters") = 2 Then MsgBox(48, "Error", "Error Deleting Lower Filter!")
                If MsgBox(4, "Upper/Lower Filter Fix", "Computer must be restarted to finish fix." & @CRLF & "Make sure to save any documents!" & @CRLF & @CRLF & "Restart now?") = 6 Then Shutdown(6)
            EndIf
        Case $Adobe
            ShellExecute("http://www.adobe.com/downloads/")
        Case $Java
            ShellExecute("http://www.java.com/en/download/index.jsp")
        Case $CCleaner
            ShellExecute("http://www.piriform.com/products")
        Case $TestNetSpeed
            $oIE = _IECreate("http://www.scanmyspeed.com/", 0, 0, 1)
            $oBegin = _IEGetObjById($oIE, "scanstart")
            _IEAction($oBegin, "click")
            $CountDown = 30
            $hSplash=SplashTextOn("Splash", "Testing Please wait..." & @CRLF & $CountDown, 400, 115, -1, -1, 35, -1, 14, 600)
            Do
                $CountDown -= 1
                $oDown = _IEGetObjById($oIE, "scandmbit")
                $sDown = _IEPropertyGet($oDown, "innerText")
                $oUp = _IEGetObjById($oIE, "scanumbit")
                $sUp = _IEPropertyGet($oUp, "innerText")
                GUICtrlSetData($NetTest, "DL: " & $sDown & " Mbps  UL: " & $sUp & " Mbps")
                ControlSetText($hSplash,"","[CLASS:Static; INSTANCE:1]", "Testing Please wait..." & @CRLF & $CountDown)
                Sleep(1000)
            Until $CountDown = 0
            SplashOff()
            $oDown = _IEGetObjById($oIE, "scandmbit")
            $sDown = _IEPropertyGet($oDown, "innerText")
            $oUp = _IEGetObjById($oIE, "scanumbit")
            $sUp = _IEPropertyGet($oUp, "innerText")
            GUICtrlSetData($NetTest, "DL: " & $sDown & " Mbps  UL: " & $sUp & " Mbps")
            _IEQuit($oIE)
        Case $ExecKill
            ProcessClose(GUICtrlRead($Kill))
            GUICtrlSetData($Kill, "Atempting to Kill " & GUICtrlRead($Kill) & "...")
            Sleep(250)
            GUICtrlSetData($Kill, "")
        Case $ExecKillPID
            ProcessClose(GUICtrlRead($KillPID))
            GUICtrlSetData($KillPID, "Atempting to Kill " & GUICtrlRead($KillPID) & "...")
            Sleep(250)
            GUICtrlSetData($KillPID, "")
        Case $ProcessList
            $PList = ProcessList()
            _ArrayDisplay($PList, "Running Processes", -1, 0, "", "|", "#|Process|ID")
        Case $Submit
            ShellExecute(_WinAPI_ExpandEnvironmentStrings(GUICtrlRead($RUN)), "", "", "open")
            GUICtrlSetData($RUN, "Starting " & GUICtrlRead($RUN) & "...")
            Sleep(250)
            GUICtrlSetData($RUN, "")
        Case $EditSubmit
            ShellExecute(_WinAPI_ExpandEnvironmentStrings(GUICtrlRead($Edit)), "", "", "edit")
            GUICtrlSetData($Edit, "")
        Case $Browse
            $BrowseFile = FileOpenDialog("Choose Program to Run", @ScriptDir, "Program (*.exe;*.bat;*.com;*.pif)", 1)
            If Not @error Then Run($BrowseFile)
        Case $EditBrowse
            $EditFile = FileOpenDialog("Choose File to Edit", @ScriptDir, "All Files (*.*)|Autoit Script (*.au3)|Batch File (*.bat)|Settings File (*.ini;*inf;*reg)|Text File (*.txt;*rtf;*.log)|Web Page (*.html;*.htm;*.php)|Word File (*.doc)", 1)
            If Not @error Then ShellExecute($EditFile, "", "", "edit")
        Case $DeleteBrowse
            $DeleteFile = FileOpenDialog("Choose File to Edit", @ScriptDir, "All Files (*.*)|Autoit Script (*.au3)|Batch File (*.bat)|Settings File (*.ini;*inf;*reg)|Text File (*.txt;*rtf;*.log)|Web Page (*.html;*.htm;*.php)|Word File (*.doc)", 1)
            If Not @error Then GUICtrlSetData($Delete, $DeleteFile)
        Case $DeleteSubmit
            $File = GUICtrlRead($Delete)
            If FileExists($File) Then
                If StringRight($File, 4) = ".exe" Then
                    $nCount = StringInStr($File, "\", 0, -1)
                    $sFile = StringTrimLeft($File, $nCount)
                    Do
                        ProcessClose($sFile)
                    Until Not ProcessExists($sFile)
                EndIf
                If Not AdjustPrivilege(8) Then MsgBox(0, "", "Error!")
                If Not AdjustPrivilege(9) Then MsgBox(0, "", "Error!")
                If Not AdjustPrivilege(20) Then MsgBox(0, "", "Error!")
                $hADVAPI32 = DllOpen("advapi32.dll")
                $hKERNEL32 = DllOpen("kernel32.dll")
                TakeOwn($File, 1)
                FileDelete($File)
                DllClose($hADVAPI32)
                DllClose($hKERNEL32)
                If FileExists($File) Then MsgBox(48, "Error", "Could not delete file!")
            Else
                MsgBox(48, "Error", "Could not find file/folder!")
            EndIf
            GUICtrlSetData($Delete, "")
        Case $ResetIE
            Run("rundll32.exe inetcpl.cpl ResetIEtoDefaults")
            WinWait("Reset Internet Explorer Settings")
            ControlClick("Reset Internet Explorer Settings", "", 1, "left", 1, 51, 12)
            WinWait("Reset Internet Explorer Settings", "&Close")
            Sleep(1000)
            While WinExists("Reset Internet Explorer Settings", "&Close")
                ControlClick("Reset Internet Explorer Settings", "", 6608, "left", 1, 36, 11)
            WEnd
            ShellExecute("iexplore.exe")

        Case $ClearIEHistory
            RunWait("RunDll32.exe inetcpl.cpl,ClearMyTracksByProcess 3")
    EndSwitch
    If TimerDiff($RefreshTimerA) >= 1000 Then
        $RefreshTimerA = TimerInit()
        DateTime()
        $RAMUsage = MemGetStats()
        $RAMCollected = $RAMCollected + 1
        $RAMTotal = Round($RAMUsage[0] + $RAMTotal)
        $AvgRAM = Round($RAMTotal / $RAMCollected)
        GUICtrlSetData($AvgRAMBar, $AvgRAM)
        GUICtrlSetData($RAM, Round($RAMUsage[0], 0))
        GUICtrlSetData($RAMLabel, Round($RAMUsage[0], 0) & "%")
        GUICtrlSetData($AvgRAMLabel, Round($AvgRAM, 0) & "%")
        _CPU()
        GUICtrlSetData($TimeLabel, $Date & "  " & $Time)
    EndIf
WEnd
#endregion - Main Loop -
#region - Language -
Func _GLI()
    Local $LCID = 0
    $sText = __GLI_Get($LCID, 92)
    If $sText = "" Then $sText = __GLI_Get($LCID, 89) & "-" & __GLI_Get($LCID, 90)
    $sText &= '  |  ' & __GLI_Get($LCID, 2)
    Return $sText
EndFunc   ;==>_GLI by AZJIO

Func __GLI_Get($iLCID_Dec, $iIndex)
    Local $aTemp = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', $iLCID_Dec, 'dword', $iIndex, 'wstr', '', 'int', 2048)
    Return $aTemp[3]
EndFunc   ;==>__GLI_Get by EXIT
#endregion - Language -
#region - Drive Info -
Func DriveInfo()
     For $i = 1 To $aDrive[0]
        $DriveType[$i] = DriveGetType(StringUpper($aDrive[$i]) & "\")
        $DriveFree[$i] = Round((DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") - DriveSpaceFree(StringUpper($aDrive[$i]) & "\")) / DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") * 100, 0)
        GUICtrlSetData($DriveFreePos[$i], $DriveFree[$i])
        GUICtrlSetData($DriveTypeLabel[$i], $DriveType[$i])
    Next
EndFunc   ;==>DriveInfo

Func DriveInfoGUI()
    Opt("GUIOnEventMode", 1)
    GUISetState(@SW_HIDE, $MainGUI)
    $DriveInfoGUI = GUICreate("Drive Info", 300, 275, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CloseDriveGUI")
    GUICtrlCreateLabel("Select a Drive's Drive Letter for Its Info:", 10, 10, 200, 20)
    $DriveLetter = GUICtrlCreateCombo("", 220, 10, 70, 20, 0x0003)
    GUICtrlSetOnEvent(-1, "DriveInfoLoad")
    For $i = 1 To $aDrive[0]
        GUICtrlSetData($DriveLetter, StringUpper($aDrive[$i]) & "\")
    Next
    GUICtrlCreateLabel("Label:", 10, 40, 80, 20)
    $DriveLabel = GUICtrlCreateLabel("", 100, 40, 100, 20, 0x1C01)
    GUICtrlCreateLabel("Status:", 10, 70, 80, 20)
    $DriveStatus = GUICtrlCreateLabel("", 100, 70, 100, 20, 0x1C01)
    GUICtrlCreateLabel("File System:", 10, 100, 80, 20)
    $DriveFileSystem = GUICtrlCreateLabel("", 100, 100, 100, 20, 0x1C01)
    GUICtrlCreateLabel("Type:", 10, 130, 80, 20)
    $DriveInfoType = GUICtrlCreateLabel("", 100, 130, 100, 20, 0x1C01)
    GUICtrlCreateLabel("Size:", 10, 160, 80, 20)
    $DriveSize = GUICtrlCreateLabel("", 100, 160, 100, 20, 0x1C01)
    GUICtrlCreateLabel("Serial Number:", 10, 190, 80, 20)
    $DriveSerial = GUICtrlCreateInput("", 100, 190, 100, 20, 0x0801)
    GUICtrlCreateLabel("Temperature:", 10, 220, 80, 20)
    $DriveTemp = GUICtrlCreateLabel("", 100, 220, 100, 20, 0x1C01)
    $DriveProgress = GUICtrlCreateProgress(10, 250, 280, 20)
    GUISetState(@SW_SHOW)
    While WinExists($DriveInfoGUI)
        Sleep(10)
    WEnd
EndFunc   ;==>DriveInfoGUI

Func DriveInfoLoad()
    $DriveInfoLoad = GUICtrlRead($DriveLetter)
    GUICtrlSetData($DriveProgress, Round((DriveSpaceTotal($DriveInfoLoad) - DriveSpaceFree($DriveInfoLoad)) / DriveSpaceTotal($DriveInfoLoad) * 100, 0))
    GUICtrlSetData($DriveLabel, DriveGetLabel($DriveInfoLoad))
    If DriveGetLabel($DriveInfoLoad) = "" Then GUICtrlSetData($DriveLabel, "No Label Set")
    GUICtrlSetData($DriveInfoType, DriveGetType($DriveInfoLoad) & " Device")
    GUICtrlSetData($DriveFileSystem, DriveGetFileSystem($DriveInfoLoad))
    GUICtrlSetData($DriveStatus, DriveStatus($DriveInfoLoad))
    $HDDSize = Round(DriveSpaceTotal($DriveInfoLoad), 0)
    If $HDDSize < 1024 Then
        GUICtrlSetData($DriveSize, "< 1 GB")
    Else
        GUICtrlSetData($DriveSize, Round($HDDSize / 1024) & " GB")
    EndIf
    GUICtrlSetData($DriveSerial, DriveGetSerial($DriveInfoLoad))
    If GUICtrlRead($DriveInfoType) = "Fixed Device" Then
        $tmp = _WMI_DriveTemperature()
        GUICtrlSetData($DriveTemp, $tmp & ' °C')
        If $tmp >= 40 Then GUICtrlSetBkColor($DriveTemp, 0xff0000)
        If $tmp < 40 Then GUICtrlSetBkColor($DriveTemp, 0x00ff00)
    Else
        GUICtrlSetData($DriveTemp, 'N/A')
        GUICtrlSetBkColor($DriveTemp, 0xf0f0f0)
    EndIf
    If DriveStatus($DriveInfoLoad) = "INVALID" Or $DriveInfoLoad = "" Then
        GUICtrlSetData($DriveLabel, "N/A")
        GUICtrlSetData($DriveInfoType, "N/A")
        GUICtrlSetData($DriveFileSystem, "N/A")
        GUICtrlSetData($DriveSize, "N/A")
        GUICtrlSetData($DriveSerial, "N/A")
        GUICtrlSetData($DriveProgress, 0)
    EndIf
EndFunc   ;==>DriveInfoLoad

Func CloseDriveGUI()
    GUIDelete($DriveInfo)
    GUISetState(@SW_SHOW, $MainGUI)
    Opt("GUIOnEventMode", 0)
EndFunc   ;==>CloseDriveGUI
#endregion - Drive Info -
#region - IP -
Func _IPDetails()
    Local $oWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & "." & "\root\cimv2")
    Local $oColItems = $oWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True", "WQL", 0x30), $aReturn[5] = [4]
    If IsObj($oColItems) Then
        For $oObjectItem In $oColItems
            If $oObjectItem.IPAddress(0) == @IPAddress1 Then
                $aReturn[1] = $oObjectItem.MACAddress
                $aReturn[2] = $oObjectItem.DefaultIPGateway(0)
            EndIf
        Next
        Return $aReturn
    EndIf
    Return SetError(1, 0, $aReturn)
EndFunc   ;==>_IPDetails

Func _GetPublicIP()
    Local $aReturn, $bRead, $sRead
    $bRead = InetRead("http://checkip.dyndns.org/")
    $sRead = BinaryToString($bRead)
    $aReturn = StringRegExp($sRead, '(?s)(?i)<body>Current IP Address: (.*?)</body>', 3)
    If @error = 0 Then
        Return $aReturn[0]
    EndIf

    $bRead = InetRead("http://automation.whatismyip.com/n09230945.asp") ; http://forum.whatismyip.com/f14/our-automation-rules-t241/
    $sRead = BinaryToString($bRead)
    If @error Then
        Return SetError(1, 0, -1)
    EndIf
    Return $sRead
EndFunc   ;==>_GetPublicIP
#endregion - IP -
#region - Computer Get -
Func HardwareGUI($Equip)
    Dim $Battery, $BIOS, $Keyboard, $HDDInfo, $Memory, $Monitor, $Motherboard, $Mouse, $NetworkCards, $SoundCards, $Processors, $System, $VideoCards, $OSs
    GUISetState(@SW_HIDE, $MainGUI)
    $HardwareGUI = GUICreate($Equip & " Info", 300, 295, -1, -1, BitOR($WS_BORDER, $WS_POPUP), $WS_EX_TOPMOST)
    $Close = GUICtrlCreateButton("X", 280, 0, 20, 20)
    GUICtrlSetFont(-1, 12, 800)
    $HardwareLabel = GUICtrlCreateLabel($Equip & " Info", 0, 0, 280, 20, 0x01)
    GUICtrlSetFont(-1, 12, 600)
    $AboutEditbox = GUICtrlCreateEdit("", 0, 20, 300, 255, BitOR($ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY))
    GUISetState(@SW_SHOW)
    GUICtrlSetState($AboutEditbox, @SW_DISABLE)

    Switch $Equip
        Case "Battery"
            _ComputerGetBattery($Battery)
            For $i = 1 To $Battery[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $Battery[$i][0] & @CRLF & _
                        "Availability: " & $Battery[$i][1] & @CRLF & _
                        "BatteryRechargeTime: " & $Battery[$i][2] & @CRLF & _
                        "BatteryStatus: " & $Battery[$i][3] & @CRLF & _
                        "Description: " & $Battery[$i][4] & @CRLF & _
                        "Chemistry: " & $Battery[$i][5] & @CRLF & _
                        "ConfigManagerErrorCode: " & $Battery[$i][6] & @CRLF & _
                        "ConfigManagerUserConfig: " & $Battery[$i][7] & @CRLF & _
                        "CreationClassName: " & $Battery[$i][8] & @CRLF & _
                        "DesignCapacity: " & $Battery[$i][9] & @CRLF & _
                        "DesignVoltage: " & $Battery[$i][10] & @CRLF & _
                        "DeviceID: " & $Battery[$i][11] & @CRLF & _
                        "ErrorCleared: " & $Battery[$i][12] & @CRLF & _
                        "ErrorDescription: " & $Battery[$i][13] & @CRLF & _
                        "EstimatedChargeRemaining: " & $Battery[$i][14] & @CRLF & _
                        "EstimatedRunTime: " & $Battery[$i][15] & @CRLF & _
                        "ExpectedBatteryLife: " & $Battery[$i][16] & @CRLF & _
                        "ExpectedLife: " & $Battery[$i][17] & @CRLF & _
                        "FullChargeCapacity: " & $Battery[$i][18] & @CRLF & _
                        "LastErrorCode: " & $Battery[$i][19] & @CRLF & _
                        "MaxRechargeTime: " & $Battery[$i][20] & @CRLF & _
                        "PNPDeviceID: " & $Battery[$i][21] & @CRLF & _
                        "PowerManagementCapabilities: " & $Battery[$i][22] & @CRLF & _
                        "PowerManagementSupported: " & $Battery[$i][23] & @CRLF & _
                        "SmartBatteryVersion: " & $Battery[$i][24] & @CRLF & _
                        "Status: " & $Battery[$i][25] & @CRLF & _
                        "StatusInfo: " & $Battery[$i][26] & @CRLF & _
                        "SystemCreationClassName: " & $Battery[$i][27] & @CRLF & _
                        "SystemName: " & $Battery[$i][28] & @CRLF & _
                        "TimeOnBattery: " & $Battery[$i][29] & @CRLF & _
                        "TimeToFullCharge: " & $Battery[$i][30] & @CRLF & @CRLF, 1)
            Next
        Case "BIOS"
            _ComputerGetBIOS($BIOS)
            For $i = 1 To $BIOS[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $BIOS[$i][0] & @CRLF & _
                        "Status: " & $BIOS[$i][1] & @CRLF & _
                        "BIOS Characteristics: " & $BIOS[$i][2] & @CRLF & _
                        "BIOS Version: " & $BIOS[$i][3] & @CRLF & _
                        "Description: " & $BIOS[$i][4] & @CRLF & _
                        "Build Number: " & $BIOS[$i][5] & @CRLF & _
                        "Code Set: " & $BIOS[$i][6] & @CRLF & _
                        "Current Language: " & $BIOS[$i][7] & @CRLF & _
                        "Identification Code: " & $BIOS[$i][8] & @CRLF & _
                        "Installable Languages: " & $BIOS[$i][9] & @CRLF & _
                        "Language Edition: " & $BIOS[$i][10] & @CRLF & _
                        "List of Languages: " & $BIOS[$i][11] & @CRLF & _
                        "Manufacturer: " & $BIOS[$i][12] & @CRLF & _
                        "Other Target OS: " & $BIOS[$i][13] & @CRLF & _
                        "Primary BIOS: " & $BIOS[$i][14] & @CRLF & _
                        "Release Date: " & $BIOS[$i][15] & @CRLF & _
                        "Serial Number: " & $BIOS[$i][16] & @CRLF & _
                        "SM BIOS BIOS Version: " & $BIOS[$i][17] & @CRLF & _
                        "SM BIOS Major Version: " & $BIOS[$i][18] & @CRLF & _
                        "SM BIOS Minor Version: " & $BIOS[$i][19] & @CRLF & _
                        "SM BIOS Present: " & $BIOS[$i][20] & @CRLF & _
                        "Software Element ID: " & $BIOS[$i][21] & @CRLF & _
                        "Software Element State: " & $BIOS[$i][22] & @CRLF & _
                        "Target Operating System: " & $BIOS[$i][23] & @CRLF & _
                        "Version: " & $BIOS[$i][24] & @CRLF & @CRLF, 1)
            Next
        Case "Hard Drive"
            _ComputerGetHDD($HDDInfo)
            For $i = 1 To $HDDInfo[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $HDDInfo[$i][0] & @CRLF & _
                        "Availability: " & $HDDInfo[$i][1] & @CRLF & _
                        "BytesPerSector: " & $HDDInfo[$i][2] & @CRLF & _
                        "Capabilities: " & $HDDInfo[$i][3] & @CRLF & _
                        "CapabilityDescriptions: " & $HDDInfo[$i][4] & @CRLF & _
                        "Caption: " & $HDDInfo[$i][5] & @CRLF & _
                        "CompressionMethod: " & $HDDInfo[$i][6] & @CRLF & _
                        "ConfigManagerErrorCode: " & $HDDInfo[$i][7] & @CRLF & _
                        "ConfigManagerUserConfig: " & $HDDInfo[$i][8] & @CRLF & _
                        "CreationClassName: " & $HDDInfo[$i][9] & @CRLF & _
                        "DefaultBlockSize: " & $HDDInfo[$i][10] & @CRLF & _
                        "Description: " & $HDDInfo[$i][11] & @CRLF & _
                        "DeviceID: " & $HDDInfo[$i][12] & @CRLF & _
                        "ErrorCleared: " & $HDDInfo[$i][13] & @CRLF & _
                        "ErrorDescription: " & $HDDInfo[$i][14] & @CRLF & _
                        "ErrorMethodology: " & $HDDInfo[$i][15] & @CRLF & _
                        "FirmwareRevision: " & $HDDInfo[$i][16] & @CRLF & _
                        "Index: " & $HDDInfo[$i][17] & @CRLF & _
                        "InstallDate: " & $HDDInfo[$i][18] & @CRLF & _
                        "InterfaceType: " & $HDDInfo[$i][19] & @CRLF & _
                        "LastErrorCode: " & $HDDInfo[$i][20] & @CRLF & _
                        "Manufacturer: " & $HDDInfo[$i][21] & @CRLF & _
                        "MaxBlockSize: " & $HDDInfo[$i][22] & @CRLF & _
                        "MaxMediaSize: " & $HDDInfo[$i][23] & @CRLF & _
                        "MediaLoaded: " & $HDDInfo[$i][24] & @CRLF & _
                        "MediaType: " & $HDDInfo[$i][25] & @CRLF & _
                        "MinBlockSize: " & $HDDInfo[$i][26] & @CRLF & _
                        "Model: " & $HDDInfo[$i][27] & @CRLF & _
                        "NeedsCleaning: " & $HDDInfo[$i][28] & @CRLF & _
                        "NumberOfMediaSupported: " & $HDDInfo[$i][29] & @CRLF & _
                        "Partitions: " & $HDDInfo[$i][30] & @CRLF & _
                        "PNPDeviceID: " & $HDDInfo[$i][31] & @CRLF & _
                        "PowerManagementCapabilities: " & $HDDInfo[$i][32] & @CRLF & _
                        "PowerManagementSupported: " & $HDDInfo[$i][33] & @CRLF & _
                        "SCSIBus: " & $HDDInfo[$i][34] & @CRLF & _
                        "SCSILogicalUnit: " & $HDDInfo[$i][35] & @CRLF & _
                        "SCSIPort: " & $HDDInfo[$i][36] & @CRLF & _
                        "SCSITargetId: " & $HDDInfo[$i][37] & @CRLF & _
                        "SectorsPerTrack: " & $HDDInfo[$i][38] & @CRLF & _
                        "SerialNumber: " & $HDDInfo[$i][39] & @CRLF & _
                        "Signature: " & $HDDInfo[$i][40] & @CRLF & _
                        "Size: " & $HDDInfo[$i][41] & @CRLF & _
                        "Status: " & $HDDInfo[$i][42] & @CRLF & _
                        "StatusInfo: " & $HDDInfo[$i][43] & @CRLF & _
                        "SystemCreationClassName: " & $HDDInfo[$i][44] & @CRLF & _
                        "SystemName: " & $HDDInfo[$i][45] & @CRLF & _
                        "TotalCylinders: " & $HDDInfo[$i][46] & @CRLF & _
                        "TotalHeads: " & $HDDInfo[$i][47] & @CRLF & _
                        "TotalSectors: " & $HDDInfo[$i][48] & @CRLF & _
                        "TotalTracks: " & $HDDInfo[$i][49] & @CRLF & _
                        "TracksPerCylinder: " & $HDDInfo[$i][50] & @CRLF & @CRLF, 1)
            Next
        Case "Keyboard"
            _ComputerGetKeyboard($Keyboard)
            For $i = 1 To $Keyboard[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $Keyboard[$i][0] & @CRLF & _
                        "Availability: " & $Keyboard[$i][1] & @CRLF & _
                        "Config Manager Error Code: " & $Keyboard[$i][2] & @CRLF & _
                        "Config Manager User Config: " & $Keyboard[$i][3] & @CRLF & _
                        "Description: " & $Keyboard[$i][4] & @CRLF & _
                        "Creation Class Name: " & $Keyboard[$i][5] & @CRLF & _
                        "Device ID: " & $Keyboard[$i][6] & @CRLF & _
                        "Error Cleared: " & $Keyboard[$i][7] & @CRLF & _
                        "Error Description: " & $Keyboard[$i][8] & @CRLF & _
                        "Is Locked: " & $Keyboard[$i][9] & @CRLF & _
                        "Last Error Code: " & $Keyboard[$i][10] & @CRLF & _
                        "Layout: " & $Keyboard[$i][11] & @CRLF & _
                        "Number of Function Keys: " & $Keyboard[$i][12] & @CRLF & _
                        "Password: " & $Keyboard[$i][13] & @CRLF & _
                        "PNP Device ID: " & $Keyboard[$i][14] & @CRLF & _
                        "Power Management Capabilities: " & $Keyboard[$i][15] & @CRLF & _
                        "Power Management Supported: " & $Keyboard[$i][16] & @CRLF & _
                        "Status: " & $Keyboard[$i][17] & @CRLF & _
                        "Status Info: " & $Keyboard[$i][18] & @CRLF & _
                        "System Creation Class Name: " & $Keyboard[$i][19] & @CRLF & _
                        "System Name: " & $Keyboard[$i][20] & @CRLF & @CRLF, 1)
            Next
;~      Case "RAM (Memory)"
;~          _ComputerGetMemory($Memory)
;~          For $i = 1 To $Memory[0][0] Step 1
;~              GUICtrlSetData($AboutEditbox, "Name: " & $Memory[$i][0] & @CRLF & _
;~                      "BankLabel: " & $Memory[$i][1] & @CRLF & _
;~                      "Capacity: " & $Memory[$i][2] & @CRLF & _
;~                      "CreationClassName: " & $Memory[$i][3] & @CRLF & _
;~                      "Description: " & $Memory[$i][4] & @CRLF & _
;~                      "DataWidth: " & $Memory[$i][5] & @CRLF & _
;~                      "DeviceLocator: " & $Memory[$i][6] & @CRLF & _
;~                      "FormFactor: " & $Memory[$i][7] & @CRLF & _
;~                      "HotSwappable: " & $Memory[$i][8] & @CRLF & _
;~                      "InterleaveDataDepth: " & $Memory[$i][9] & @CRLF & _
;~                      "InterleavePosition: " & $Memory[$i][10] & @CRLF & _
;~                      "Manufacturer: " & $Memory[$i][11] & @CRLF & _
;~                      "MemoryType: " & $Memory[$i][12] & @CRLF & _
;~                      "Model: " & $Memory[$i][13] & @CRLF & _
;~                      "OtherIdentifyingInfo: " & $Memory[$i][14] & @CRLF & _
;~                      "PartNumber: " & $Memory[$i][15] & @CRLF & _
;~                      "PositionInRow: " & $Memory[$i][16] & @CRLF & _
;~                      "PoweredOn: " & $Memory[$i][17] & @CRLF & _
;~                      "Removable: " & $Memory[$i][18] & @CRLF & _
;~                      "Replaceable: " & $Memory[$i][19] & @CRLF & _
;~                      "SerialNumber: " & $Memory[$i][20] & @CRLF & _
;~                      "SKU: " & $Memory[$i][21] & @CRLF & _
;~                      "Speed: " & $Memory[$i][22] & @CRLF & _
;~                      "Status: " & $Memory[$i][23] & @CRLF & _
;~                      "Tag: " & $Memory[$i][24] & @CRLF & _
;~                      "TotalWidth: " & $Memory[$i][25] & @CRLF & _
;~                      "TypeDetail: " & $Memory[$i][26] & @CRLF & _
;~                      "Version: " & $Memory[$i][27] & @CRLF & @CRLF, 1)
        Case "RAM (Memory)"
            _ComputerGetMemory($Memory)
            For $i = 1 To $Memory[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Caption: " & $Memory[$i][0] & @CRLF & _
                        "CreationClassName: " & $Memory[$i][1] & @CRLF & _
                        "Depth: " & $Memory[$i][2] & @CRLF & _
                        "Description: " & $Memory[$i][3] & @CRLF & _
                        "Height: " & $Memory[$i][4] & @CRLF & _
                        "HotSwappable: " & $Memory[$i][5] & @CRLF & _
                        "InstallDate: " & $Memory[$i][6] & @CRLF & _
                        "Location: " & $Memory[$i][7] & @CRLF & _
                        "Manufacturer: " & $Memory[$i][8] & @CRLF & _
                        "MaxCapacity: " & $Memory[$i][9] & @CRLF & _
                        "MemoryDevices: " & $Memory[$i][10] & @CRLF & _
                        "MemoryErrorCorrection: " & $Memory[$i][11] & @CRLF & _
                        "Model: " & $Memory[$i][12] & @CRLF & _
                        "Name: " & $Memory[$i][13] & @CRLF & _
                        "OtherIdentifyingInfo: " & $Memory[$i][14] & @CRLF & _
                        "PartNumber: " & $Memory[$i][15] & @CRLF & _
                        "PoweredOn: " & $Memory[$i][16] & @CRLF & _
                        "Removable: " & $Memory[$i][17] & @CRLF & _
                        "Replaceable: " & $Memory[$i][18] & @CRLF & _
                        "SerialNumber: " & $Memory[$i][19] & @CRLF & _
                        "SKU: " & $Memory[$i][20] & @CRLF & _
                        "Status: " & $Memory[$i][21] & @CRLF & _
                        "Tag: " & $Memory[$i][22] & @CRLF & _
                        "Use: " & $Memory[$i][23] & @CRLF & _
                        "Version: " & $Memory[$i][24] & @CRLF & _
                        "Weight: " & $Memory[$i][25] & @CRLF & _
                        "Width: " & $Memory[$i][26] & @CRLF & @CRLF, 1)
            Next
        Case "Monitor"
            _ComputerGetMonitors($Monitor)
            For $i = 1 To $Monitor[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $Monitor[$i][0] & @CRLF & _
                        "Availability: " & $Monitor[$i][1] & @CRLF & _
                        "Bandwidth: " & $Monitor[$i][2] & @CRLF & _
                        "ConfigManagerErrorCode: " & $Monitor[$i][3] & @CRLF & _
                        "Description: " & $Monitor[$i][4] & @CRLF & _
                        "ConfigManagerUserConfig: " & $Monitor[$i][5] & @CRLF & _
                        "CreationClassName: " & $Monitor[$i][6] & @CRLF & _
                        "DeviceID: " & $Monitor[$i][7] & @CRLF & _
                        "DisplayType: " & $Monitor[$i][8] & @CRLF & _
                        "ErrorCleared: " & $Monitor[$i][9] & @CRLF & _
                        "ErrorDescription: " & $Monitor[$i][10] & @CRLF & _
                        "IsLocked: " & $Monitor[$i][11] & @CRLF & _
                        "LastErrorCode: " & $Monitor[$i][12] & @CRLF & _
                        "MonitorManufacturer: " & $Monitor[$i][13] & @CRLF & _
                        "MonitorType: " & $Monitor[$i][14] & @CRLF & _
                        "PixelsPerXLogicalInch: " & $Monitor[$i][15] & @CRLF & _
                        "PixelsPerYLogicalInch: " & $Monitor[$i][16] & @CRLF & _
                        "PNPDeviceID: " & $Monitor[$i][17] & @CRLF & _
                        "PowerManagementCapabilities: " & $Monitor[$i][18] & @CRLF & _
                        "PowerManagementSupported: " & $Monitor[$i][19] & @CRLF & _
                        "ScreenHeight: " & $Monitor[$i][20] & @CRLF & _
                        "ScreenWidth: " & $Monitor[$i][21] & @CRLF & _
                        "Status: " & $Monitor[$i][22] & @CRLF & _
                        "StatusInfo: " & $Monitor[$i][23] & @CRLF & _
                        "SystemCreationClassName: " & $Monitor[$i][24] & @CRLF & _
                        "SystemName: " & $Monitor[$i][25] & @CRLF & @CRLF, 1)
            Next
        Case "Motherboard"
            _ComputerGetMotherboard($Motherboard)
            For $i = 1 To $Motherboard[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $Motherboard[$i][0] & @CRLF & _
                        "Availability: " & $Motherboard[$i][1] & @CRLF & _
                        "ConfigManagerErrorCode: " & $Motherboard[$i][2] & @CRLF & _
                        "ConfigManagerUserConfig: " & $Motherboard[$i][3] & @CRLF & _
                        "Description: " & $Motherboard[$i][4] & @CRLF & _
                        "CreationClassName: " & $Motherboard[$i][5] & @CRLF & _
                        "DeviceID: " & $Motherboard[$i][6] & @CRLF & _
                        "ErrorCleared: " & $Motherboard[$i][7] & @CRLF & _
                        "ErrorDescription: " & $Motherboard[$i][8] & @CRLF & _
                        "LastErrorCode: " & $Motherboard[$i][9] & @CRLF & _
                        "PNPDeviceID: " & $Motherboard[$i][10] & @CRLF & _
                        "PowerManagementCapabilities: " & $Motherboard[$i][11] & @CRLF & _
                        "PowerManagementSupported: " & $Motherboard[$i][12] & @CRLF & _
                        "PrimaryBusType: " & $Motherboard[$i][13] & @CRLF & _
                        "RevisionNumber: " & $Motherboard[$i][14] & @CRLF & _
                        "SecondaryBusType: " & $Motherboard[$i][15] & @CRLF & _
                        "Status: " & $Motherboard[$i][16] & @CRLF & _
                        "StatusInfo: " & $Motherboard[$i][17] & @CRLF & _
                        "SystemCreationClassName: " & $Motherboard[$i][18] & @CRLF & _
                        "SystemName: " & $Motherboard[$i][19] & @CRLF & @CRLF, 1)
            Next
        Case "Mouse"
            _ComputerGetMouse($Mouse)
            For $i = 1 To $Mouse[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $Mouse[$i][0] & @CRLF & _
                        "Availability: " & $Mouse[$i][1] & @CRLF & _
                        "Config Manager Error Code: " & $Mouse[$i][2] & @CRLF & _
                        "Config Manager User Config: " & $Mouse[$i][3] & @CRLF & _
                        "Description: " & $Mouse[$i][4] & @CRLF & _
                        "Creation Class Name: " & $Mouse[$i][5] & @CRLF & _
                        "Device ID: " & $Mouse[$i][6] & @CRLF & _
                        "Device Interface: " & $Mouse[$i][7] & @CRLF & _
                        "Double Speed Threshold: " & $Mouse[$i][8] & @CRLF & _
                        "Error Cleared: " & $Mouse[$i][9] & @CRLF & _
                        "Error Description: " & $Mouse[$i][10] & @CRLF & _
                        "Handedness: " & $Mouse[$i][11] & @CRLF & _
                        "Hardware Type: " & $Mouse[$i][12] & @CRLF & _
                        "Inf File Name: " & $Mouse[$i][13] & @CRLF & _
                        "Inf Section: " & $Mouse[$i][14] & @CRLF & _
                        "Is Locked: " & $Mouse[$i][15] & @CRLF & _
                        "Last Error Code: " & $Mouse[$i][16] & @CRLF & _
                        "Manufacturer: " & $Mouse[$i][17] & @CRLF & _
                        "Number Of Buttons: " & $Mouse[$i][18] & @CRLF & _
                        "PNP Device ID: " & $Mouse[$i][19] & @CRLF & _
                        "Pointing Type: " & $Mouse[$i][20] & @CRLF & _
                        "Power Management Capabilities: " & $Mouse[$i][21] & @CRLF & _
                        "Power Management Supported: " & $Mouse[$i][22] & @CRLF & _
                        "Quad Speed Threshold: " & $Mouse[$i][23] & @CRLF & _
                        "Resolution: " & $Mouse[$i][24] & @CRLF & _
                        "Sample Rate: " & $Mouse[$i][25] & @CRLF & _
                        "Status: " & $Mouse[$i][26] & @CRLF & _
                        "Status Info: " & $Mouse[$i][27] & @CRLF & _
                        "Synch: " & $Mouse[$i][28] & @CRLF & _
                        "System Creation Class Name: " & $Mouse[$i][29] & @CRLF & _
                        "System Name: " & $Mouse[$i][30] & @CRLF & @CRLF, 1)
            Next
        Case "Network"
            _ComputerGetNetworkCards($NetworkCards)
            For $i = 1 To $NetworkCards[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $NetworkCards[$i][0] & @CRLF & _
                        "Adapter Type: " & $NetworkCards[$i][1] & @CRLF & _
                        "Adapter Type ID: " & $NetworkCards[$i][2] & @CRLF & _
                        "Auto Sense: " & $NetworkCards[$i][3] & @CRLF & _
                        "Description: " & $NetworkCards[$i][4] & @CRLF & _
                        "Availability: " & $NetworkCards[$i][5] & @CRLF & _
                        "Config Manager Error Code: " & $NetworkCards[$i][6] & @CRLF & _
                        "Config Manager User Config: " & $NetworkCards[$i][7] & @CRLF & _
                        "Creation Class Name: " & $NetworkCards[$i][8] & @CRLF & _
                        "Device ID: " & $NetworkCards[$i][9] & @CRLF & _
                        "Error Cleared: " & $NetworkCards[$i][10] & @CRLF & _
                        "Error Description: " & $NetworkCards[$i][11] & @CRLF & _
                        "Index: " & $NetworkCards[$i][12] & @CRLF & _
                        "Installed: " & $NetworkCards[$i][13] & @CRLF & _
                        "Last Error Code: " & $NetworkCards[$i][14] & @CRLF & _
                        "MAC Address: " & $NetworkCards[$i][15] & @CRLF & _
                        "Manufacturer: " & $NetworkCards[$i][16] & @CRLF & _
                        "Max Number Controlled: " & $NetworkCards[$i][17] & @CRLF & _
                        "Max Speed: " & $NetworkCards[$i][18] & @CRLF & _
                        "Net Connection ID: " & $NetworkCards[$i][19] & @CRLF & _
                        "Net Connection Status: " & $NetworkCards[$i][20] & @CRLF & _
                        "Network Addresses: " & $NetworkCards[$i][21] & @CRLF & _
                        "Permanent Address: " & $NetworkCards[$i][22] & @CRLF & _
                        "PNP Device ID: " & $NetworkCards[$i][23] & @CRLF & _
                        "Power Management Capabilities: " & $NetworkCards[$i][24] & @CRLF & _
                        "Power Management Supported: " & $NetworkCards[$i][25] & @CRLF & _
                        "Product Name: " & $NetworkCards[$i][26] & @CRLF & _
                        "Service Name: " & $NetworkCards[$i][27] & @CRLF & _
                        "Speed: " & $NetworkCards[$i][28] & @CRLF & _
                        "Status: " & $NetworkCards[$i][29] & @CRLF & _
                        "Status Info: " & $NetworkCards[$i][30] & @CRLF & _
                        "System Creation Class Name: " & $NetworkCards[$i][31] & @CRLF & _
                        "System Name: " & $NetworkCards[$i][32] & @CRLF & _
                        "Time Of Last Reset: " & $NetworkCards[$i][33] & @CRLF & @CRLF, 1)
            Next
        Case "System"
            _ComputerGetSystem($System)
            For $i = 1 To $System[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $System[$i][0] & @CRLF & _
                        "Admin Password Status: " & $System[$i][1] & @CRLF & _
                        "Automatic Reset Boot Option: " & $System[$i][2] & @CRLF & _
                        "Automatic Reset Capability: " & $System[$i][3] & @CRLF & _
                        "Description: " & $System[$i][4] & @CRLF & _
                        "Boot Option On Limit: " & $System[$i][5] & @CRLF & _
                        "Boot Option On WatchDog: " & $System[$i][6] & @CRLF & _
                        "Boot ROM Supported: " & $System[$i][7] & @CRLF & _
                        "Bootup State: " & $System[$i][8] & @CRLF & _
                        "Last Load Info: " & $System[$i][20] & @CRLF & _
                        "Manufacturer: " & $System[$i][21] & @CRLF & _
                        "Model: " & $System[$i][22] & @CRLF & _
                        "Name Format: " & $System[$i][23] & @CRLF & _
                        "Network Server Mode Enabled: " & $System[$i][24] & @CRLF & _
                        "Number Of Processors: " & $System[$i][25] & @CRLF & _
                        "OEM Logo Bitmap: " & $System[$i][26] & @CRLF & _
                        "OEM String Array: " & $System[$i][27] & @CRLF & _
                        "Part Of Domain: " & $System[$i][28] & @CRLF & _
                        "Pause After Reset: " & $System[$i][29] & @CRLF & _
                        "Power Management Capabilities: " & $System[$i][30] & @CRLF & _
                        "Power Management Supported: " & $System[$i][31] & @CRLF & _
                        "Power On Password Status: " & $System[$i][32] & @CRLF & _
                        "Power State: " & $System[$i][33] & @CRLF & _
                        "Power Supply State: " & $System[$i][34] & @CRLF & _
                        "Primary Owner Contact: " & $System[$i][35] & @CRLF & _
                        "Primary Owner Name: " & $System[$i][36] & @CRLF & _
                        "Reset Capability: " & $System[$i][37] & @CRLF & _
                        "Reset Count: " & $System[$i][38] & @CRLF & _
                        "Reset Limit: " & $System[$i][39] & @CRLF & _
                        "Roles: " & $System[$i][40] & @CRLF & _
                        "Status: " & $System[$i][41] & @CRLF & _
                        "Support Contact Description: " & $System[$i][42] & @CRLF & _
                        "System Startup Delay: " & $System[$i][43] & @CRLF & _
                        "System Startup Options: " & $System[$i][44] & @CRLF & _
                        "System Startup Setting: " & $System[$i][45] & @CRLF & _
                        "System Type: " & $System[$i][46] & @CRLF & _
                        "Thermal State: " & $System[$i][47] & @CRLF & _
                        "Total Physical Memory: " & Round($System[$i][48] / 1024 / 1024 / 1024, 3) & @CRLF & _
                        "User Name: " & $System[$i][49] & @CRLF & _
                        "Wake Up Type: " & $System[$i][50] & @CRLF & _
                        "Workgroup: " & $System[$i][51] & @CRLF & @CRLF, 1)
            Next
        Case "Processor"
            _ComputerGetProcessors($Processors)
            For $i = 1 To $Processors[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $Processors[$i][0] & @CRLF & _
                        "Address Width: " & $Processors[$i][1] & @CRLF & _
                        "Architecture: " & $Processors[$i][2] & @CRLF & _
                        "Availability: " & $Processors[$i][3] & @CRLF & _
                        "Description: " & $Processors[$i][4] & @CRLF & _
                        "Config Manager Error Code: " & $Processors[$i][5] & @CRLF & _
                        "Config Manager User Config: " & $Processors[$i][6] & @CRLF & _
                        "CPU Status: " & $Processors[$i][7] & @CRLF & _
                        "Creation Class Name: " & $Processors[$i][8] & @CRLF & _
                        "Current Clock Speed: " & $Processors[$i][9] & @CRLF & _
                        "Current Voltage: " & $Processors[$i][10] & @CRLF & _
                        "Data Width: " & $Processors[$i][11] & @CRLF & _
                        "Device ID: " & $Processors[$i][12] & @CRLF & _
                        "Error Cleared: " & $Processors[$i][13] & @CRLF & _
                        "Error Description: " & $Processors[$i][14] & @CRLF & _
                        "Ext Clock: " & $Processors[$i][15] & @CRLF & _
                        "Family: " & $Processors[$i][16] & @CRLF & _
                        "L2 Cache Size: " & $Processors[$i][17] & @CRLF & _
                        "L2 Cache Speed: " & $Processors[$i][18] & @CRLF & _
                        "Last Error Code: " & $Processors[$i][19] & @CRLF & _
                        "Level: " & $Processors[$i][20] & @CRLF & _
                        "Load Percentage: " & $Processors[$i][21] & @CRLF & _
                        "Manufacturer: " & $Processors[$i][22] & @CRLF & _
                        "Max Clock Speed: " & $Processors[$i][23] & @CRLF & _
                        "Other Family Description: " & $Processors[$i][24] & @CRLF & _
                        "PNP Device ID: " & $Processors[$i][25] & @CRLF & _
                        "Power Management Capabilities: " & $Processors[$i][26] & @CRLF & _
                        "Power Management Supported: " & $Processors[$i][27] & @CRLF & _
                        "Processor ID: " & $Processors[$i][28] & @CRLF & _
                        "Processor Type: " & $Processors[$i][29] & @CRLF & _
                        "Revision: " & $Processors[$i][30] & @CRLF & _
                        "Role: " & $Processors[$i][31] & @CRLF & _
                        "Socket Designation: " & $Processors[$i][32] & @CRLF & _
                        "Status: " & $Processors[$i][33] & @CRLF & _
                        "Status Info: " & $Processors[$i][34] & @CRLF & _
                        "Stepping: " & $Processors[$i][35] & @CRLF & _
                        "System Creation Class Name: " & $Processors[$i][36] & @CRLF & _
                        "System Name: " & $Processors[$i][37] & @CRLF & _
                        "Unique ID: " & $Processors[$i][38] & @CRLF & _
                        "Upgrade Method: " & $Processors[$i][39] & @CRLF & _
                        "Version: " & $Processors[$i][40] & @CRLF & _
                        "Voltage Caps: " & $Processors[$i][41] & @CRLF & @CRLF, 1)
            Next
        Case "Sound Card"
            _ComputerGetSoundCards($SoundCards)
            For $i = 1 To $SoundCards[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $SoundCards[$i][0] & @CRLF & _
                        "Availability: " & $SoundCards[$i][1] & @CRLF & _
                        "Config Manager Error Code: " & $SoundCards[$i][2] & @CRLF & _
                        "Config Manager User Config: " & $SoundCards[$i][3] & @CRLF & _
                        "Description: " & $SoundCards[$i][4] & @CRLF & _
                        "Creation Class Name: " & $SoundCards[$i][5] & @CRLF & _
                        "Device ID: " & $SoundCards[$i][6] & @CRLF & _
                        "DMA Buffer Size: " & $SoundCards[$i][7] & @CRLF & _
                        "Error Cleared: " & $SoundCards[$i][8] & @CRLF & _
                        "Error Description: " & $SoundCards[$i][9] & @CRLF & _
                        "Last Error Code: " & $SoundCards[$i][10] & @CRLF & _
                        "Manufacturer: " & $SoundCards[$i][11] & @CRLF & _
                        "MPU 401 Address: " & $SoundCards[$i][12] & @CRLF & _
                        "PNP Device ID: " & $SoundCards[$i][13] & @CRLF & _
                        "Power Management Capabilities: " & $SoundCards[$i][14] & @CRLF & _
                        "Power Management Supported: " & $SoundCards[$i][15] & @CRLF & _
                        "Product Name: " & $SoundCards[$i][16] & @CRLF & _
                        "Status: " & $SoundCards[$i][17] & @CRLF & _
                        "Status Info: " & $SoundCards[$i][18] & @CRLF & _
                        "System Creation Class Name: " & $SoundCards[$i][19] & @CRLF & _
                        "System Name: " & $SoundCards[$i][20] & @CRLF & @CRLF, 1)
            Next
        Case "Graphics Card"
            _ComputerGetVideoCards($VideoCards)
            For $i = 1 To $VideoCards[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $VideoCards[$i][0] & @CRLF & _
                        "Accelerator Capabilities: " & $VideoCards[$i][1] & @CRLF & _
                        "Adapter Compatibility: " & $VideoCards[$i][2] & @CRLF & _
                        "Adapter DAC Type: " & $VideoCards[$i][3] & @CRLF & _
                        "Description: " & $VideoCards[$i][4] & @CRLF & _
                        "Adapter RAM: " & $VideoCards[$i][5] & @CRLF & _
                        "Availability: " & $VideoCards[$i][6] & @CRLF & _
                        "Capability Descriptions: " & $VideoCards[$i][7] & @CRLF & _
                        "Color Table Entries: " & $VideoCards[$i][8] & @CRLF & _
                        "Config Manager Error Code: " & $VideoCards[$i][9] & @CRLF & _
                        "Config Manager User Config: " & $VideoCards[$i][10] & @CRLF & _
                        "Creation Class Name: " & $VideoCards[$i][11] & @CRLF & _
                        "Current Bits Per Pixel: " & $VideoCards[$i][12] & @CRLF & _
                        "Current Horizontal Resolution: " & $VideoCards[$i][13] & @CRLF & _
                        "Current Number Of Colors: " & $VideoCards[$i][14] & @CRLF & _
                        "Current Number Of Columns: " & $VideoCards[$i][15] & @CRLF & _
                        "Current Number Of Rows: " & $VideoCards[$i][16] & @CRLF & _
                        "Current Refresh Rate: " & $VideoCards[$i][17] & @CRLF & _
                        "Current Scan Mode: " & $VideoCards[$i][18] & @CRLF & _
                        "Current Vertical Resolution: " & $VideoCards[$i][19] & @CRLF & _
                        "Device ID: " & $VideoCards[$i][20] & @CRLF & _
                        "Device Specific Pens: " & $VideoCards[$i][21] & @CRLF & _
                        "Dither Type: " & $VideoCards[$i][22] & @CRLF & _
                        "Driver Date: " & $VideoCards[$i][23] & @CRLF & _
                        "Driver Version: " & $VideoCards[$i][24] & @CRLF & _
                        "Error Cleared: " & $VideoCards[$i][25] & @CRLF & _
                        "Error Description: " & $VideoCards[$i][26] & @CRLF & _
                        "ICM Intent: " & $VideoCards[$i][27] & @CRLF & _
                        "ICM Method: " & $VideoCards[$i][28] & @CRLF & _
                        "Inf Filename: " & $VideoCards[$i][29] & @CRLF & _
                        "Inf Section: " & $VideoCards[$i][30] & @CRLF & _
                        "Installed Display Drivers: " & $VideoCards[$i][31] & @CRLF & _
                        "Last Error Code: " & $VideoCards[$i][32] & @CRLF & _
                        "Max Memory Supported: " & $VideoCards[$i][33] & @CRLF & _
                        "Max Number Controlled: " & $VideoCards[$i][34] & @CRLF & _
                        "Max Refresh Rate: " & $VideoCards[$i][35] & @CRLF & _
                        "Min Refresh Rate: " & $VideoCards[$i][36] & @CRLF & _
                        "Monochrome: " & $VideoCards[$i][37] & @CRLF & _
                        "Number Of Color Planes: " & $VideoCards[$i][38] & @CRLF & _
                        "Number Of Video Pages: " & $VideoCards[$i][39] & @CRLF & _
                        "PNP Device ID: " & $VideoCards[$i][40] & @CRLF & _
                        "Power Management Capabilities: " & $VideoCards[$i][41] & @CRLF & _
                        "Power Management Supported: " & $VideoCards[$i][42] & @CRLF & _
                        "Protocol Supported: " & $VideoCards[$i][43] & @CRLF & _
                        "Reserved System Palette Entries: " & $VideoCards[$i][44] & @CRLF & _
                        "Specification Version: " & $VideoCards[$i][45] & @CRLF & _
                        "Status: " & $VideoCards[$i][46] & @CRLF & _
                        "Status Info: " & $VideoCards[$i][47] & @CRLF & _
                        "System Creation Class Name: " & $VideoCards[$i][48] & @CRLF & _
                        "System Name: " & $VideoCards[$i][49] & @CRLF & _
                        "System Palette Entries: " & $VideoCards[$i][50] & @CRLF & _
                        "Time Of Last Reset: " & $VideoCards[$i][51] & @CRLF & _
                        "Video Architecture: " & $VideoCards[$i][52] & @CRLF & _
                        "Video Memory Type: " & $VideoCards[$i][53] & @CRLF & _
                        "Video Mode: " & $VideoCards[$i][54] & @CRLF & _
                        "Video Mode Description: " & $VideoCards[$i][55] & @CRLF & _
                        "Video Processor: " & $VideoCards[$i][56] & @CRLF & @CRLF, 1)
            Next
        Case "Operating System"
            _ComputerGetOSs($OSs)
            For $i = 1 To $OSs[0][0] Step 1
                GUICtrlSetData($AboutEditbox, "Name: " & $OSs[$i][0] & @CRLF & _
                        "Boot Device: " & $OSs[$i][1] & @CRLF & _
                        "Build Number: " & $OSs[$i][2] & @CRLF & _
                        "Build Type: " & $OSs[$i][3] & @CRLF & _
                        "Description: " & $OSs[$i][4] & @CRLF & _
                        "Code Set: " & $OSs[$i][5] & @CRLF & _
                        "Country Code: " & $OSs[$i][6] & @CRLF & _
                        "Creation Class Name: " & $OSs[$i][7] & @CRLF & _
                        "CSCreation Class Name: " & $OSs[$i][8] & @CRLF & _
                        "CSD Version: " & $OSs[$i][9] & @CRLF & _
                        "CS Name: " & $OSs[$i][10] & @CRLF & _
                        "Current Time Zone: " & $OSs[$i][11] & @CRLF & _
                        "Data Execution Prevention_32BitApplications: " & $OSs[$i][12] & @CRLF & _
                        "Data Execution Prevention_Available: " & $OSs[$i][13] & @CRLF & _
                        "Data Execution Prevention_Drivers: " & $OSs[$i][14] & @CRLF & _
                        "Data Execution Prevention_SupportPolicy: " & $OSs[$i][15] & @CRLF & _
                        "Debug: " & $OSs[$i][16] & @CRLF & _
                        "Distributed: " & $OSs[$i][17] & @CRLF & _
                        "Encryption Level: " & $OSs[$i][18] & @CRLF & _
                        "Foreground Application Boost: " & $OSs[$i][19] & @CRLF & _
                        "Free Physical Memory: " & $OSs[$i][20] & @CRLF & _
                        "Free Space In Paging Files: " & $OSs[$i][21] & @CRLF & _
                        "Free Virtual Memory: " & $OSs[$i][22] & @CRLF & _
                        "Install Date: " & $OSs[$i][23] & @CRLF & _
                        "Large System Cache: " & $OSs[$i][24] & @CRLF & _
                        "Last Boot Up Time: " & $OSs[$i][25] & @CRLF & _
                        "Local Date Time: " & $OSs[$i][26] & @CRLF & _
                        "Locale: " & $OSs[$i][27] & @CRLF & _
                        "Manufacturer: " & $OSs[$i][28] & @CRLF & _
                        "Max Number Of Processes: " & $OSs[$i][29] & @CRLF & _
                        "Max Process Memory Size: " & $OSs[$i][30] & @CRLF & _
                        "Number Of Licensed Users: " & $OSs[$i][31] & @CRLF & _
                        "Number Of Processes: " & $OSs[$i][32] & @CRLF & _
                        "Number Of Users: " & $OSs[$i][33] & @CRLF & _
                        "Organization: " & $OSs[$i][34] & @CRLF & _
                        "OS Language: " & $OSs[$i][35] & @CRLF & _
                        "OS Product Suite: " & $OSs[$i][36] & @CRLF & _
                        "OS Type: " & $OSs[$i][37] & @CRLF & _
                        "Other Type Description: " & $OSs[$i][38] & @CRLF & _
                        "Plus Product ID: " & $OSs[$i][39] & @CRLF & _
                        "Plus Version Number: " & $OSs[$i][40] & @CRLF & _
                        "Primary: " & $OSs[$i][41] & @CRLF & _
                        "Product Type: " & $OSs[$i][42] & @CRLF & _
                        "Quantum Length: " & $OSs[$i][43] & @CRLF & _
                        "Quantum Type: " & $OSs[$i][44] & @CRLF & _
                        "Registered User: " & $OSs[$i][45] & @CRLF & _
                        "Serial Number: " & $OSs[$i][46] & @CRLF & _
                        "Service Pack Major Version: " & $OSs[$i][47] & @CRLF & _
                        "Service Pack Minor Version: " & $OSs[$i][48] & @CRLF & _
                        "Size Stored In Paging Files: " & $OSs[$i][49] & @CRLF & _
                        "Status: " & $OSs[$i][50] & @CRLF & _
                        "Suite Mask: " & $OSs[$i][51] & @CRLF & _
                        "System Device: " & $OSs[$i][52] & @CRLF & _
                        "System Directory: " & $OSs[$i][53] & @CRLF & _
                        "System Drive: " & $OSs[$i][54] & @CRLF & _
                        "Total Swap Space Size: " & $OSs[$i][55] & @CRLF & _
                        "Total Virtual Memory Size: " & $OSs[$i][56] & @CRLF & _
                        "Total Visible Memory Size: " & $OSs[$i][57] & @CRLF & _
                        "Version: " & $OSs[$i][58] & @CRLF & _
                        "Windows Directory: " & $OSs[$i][59] & @CRLF & @CRLF, 1)
            Next
    EndSwitch

    $oShell = ObjCreate("Shell.Explorer.2")
    $iCtrlID = GUICtrlCreateObj($oShell, 0, 275, 300, 20)

    $oShell.navigate("about:blank")
    While $oShell.busy
        Sleep(100)
    WEnd

    With $oShell.document
        .write('<header><center><a href="'& $MSDNLink &'"  target="_blank">What does this information mean?</a></center></header>')
        .body.scroll = "no"
        .body.topmargin = 0
        .body.leftmargin = 0
        .body.bgcolor = 0xF0F0F0
        .body.style.color = 0x000000
        .body.style.fontSize = 16
    EndWith

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                GUIDelete($HardwareGUI)
                GUISetState(@SW_SHOW, $MainGUI)
                WinActivate($MainGUI)
                ExitLoop
            Case $Close
                GUIDelete($HardwareGUI)
                GUISetState(@SW_SHOW, $MainGUI)
                WinActivate($MainGUI)
                ExitLoop
            Case $GUI_EVENT_PRIMARYDOWN
                On_Drag($HardwareGUI, $HardwareLabel)
         EndSwitch
    WEnd

EndFunc   ;==>HardwareGUI
Func _ComputerGetBattery(ByRef $aBatteryInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aBatteryInfo[1][31], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Battery", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394074(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aBatteryInfo[UBound($aBatteryInfo) + 1][31]
            $aBatteryInfo[$i][0] = $objItem.Name
            $aBatteryInfo[$i][1] = $objItem.Availability
            $aBatteryInfo[$i][2] = $objItem.BatteryRechargeTime
            $aBatteryInfo[$i][3] = $objItem.BatteryStatus
            $aBatteryInfo[$i][4] = $objItem.Description
            $aBatteryInfo[$i][5] = $objItem.Chemistry
            $aBatteryInfo[$i][6] = $objItem.ConfigManagerErrorCode
            $aBatteryInfo[$i][7] = $objItem.ConfigManagerUserConfig
            $aBatteryInfo[$i][8] = $objItem.CreationClassName
            $aBatteryInfo[$i][9] = $objItem.DesignCapacity
            $aBatteryInfo[$i][10] = $objItem.DesignVoltage
            $aBatteryInfo[$i][11] = $objItem.DeviceID
            $aBatteryInfo[$i][12] = $objItem.ErrorCleared
            $aBatteryInfo[$i][13] = $objItem.ErrorDescription
            $aBatteryInfo[$i][14] = $objItem.EstimatedChargeRemaining
            $aBatteryInfo[$i][15] = $objItem.EstimatedRunTime
            $aBatteryInfo[$i][16] = $objItem.ExpectedBatteryLife
            $aBatteryInfo[$i][17] = $objItem.ExpectedLife
            $aBatteryInfo[$i][18] = $objItem.FullChargeCapacity
            $aBatteryInfo[$i][19] = $objItem.LastErrorCode
            $aBatteryInfo[$i][20] = $objItem.MaxRechargeTime
            $aBatteryInfo[$i][21] = $objItem.PNPDeviceID
            $aBatteryInfo[$i][22] = $objItem.PowerManagementCapabilities(0)
            $aBatteryInfo[$i][23] = $objItem.PowerManagementSupported
            $aBatteryInfo[$i][24] = $objItem.SmartBatteryVersion
            $aBatteryInfo[$i][25] = $objItem.Status
            $aBatteryInfo[$i][26] = $objItem.StatusInfo
            $aBatteryInfo[$i][27] = $objItem.SystemCreationClassName
            $aBatteryInfo[$i][28] = $objItem.SystemName
            $aBatteryInfo[$i][29] = $objItem.TimeOnBattery
            $aBatteryInfo[$i][30] = $objItem.TimeToFullCharge
            $i += 1
        Next
        $aBatteryInfo[0][0] = UBound($aBatteryInfo) - 1
        If $aBatteryInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetBattery

Func _ComputerGetHDD(ByRef $aHDDInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aHDDInfo[1][51], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394132(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aHDDInfo[UBound($aHDDInfo) + 1][51]
            $aHDDInfo[$i][0] = $objItem.Name
            $aHDDInfo[$i][1] = $objItem.Availability
            $aHDDInfo[$i][2] = $objItem.BytesPerSector
            $aHDDInfo[$i][3] = $objItem.Capabilities(0)
            $aHDDInfo[$i][4] = $objItem.CapabilityDescriptions(0)
            $aHDDInfo[$i][5] = $objItem.Caption
            $aHDDInfo[$i][6] = $objItem.CompressionMethod
            $aHDDInfo[$i][7] = $objItem.ConfigManagerErrorCode
            $aHDDInfo[$i][8] = $objItem.ConfigManagerUserConfig
            $aHDDInfo[$i][9] = $objItem.CreationClassName
            $aHDDInfo[$i][10] = $objItem.DefaultBlockSize
            $aHDDInfo[$i][11] = $objItem.Description
            $aHDDInfo[$i][12] = $objItem.DeviceID
            $aHDDInfo[$i][13] = $objItem.ErrorCleared
            $aHDDInfo[$i][14] = $objItem.ErrorDescription
            $aHDDInfo[$i][15] = $objItem.ErrorMethodology
            $aHDDInfo[$i][16] = $objItem.FirmwareRevision
            $aHDDInfo[$i][17] = $objItem.Index
            $aHDDInfo[$i][18] = __StringToDate($objItem.InstallDate)
            $aHDDInfo[$i][19] = $objItem.InterfaceType
            $aHDDInfo[$i][20] = $objItem.LastErrorCode
            $aHDDInfo[$i][21] = $objItem.Manufacturer
            $aHDDInfo[$i][22] = $objItem.MaxBlockSize
            $aHDDInfo[$i][23] = $objItem.MaxMediaSize
            $aHDDInfo[$i][24] = $objItem.MediaLoaded
            $aHDDInfo[$i][25] = $objItem.MediaType
            $aHDDInfo[$i][26] = $objItem.MinBlockSize
            $aHDDInfo[$i][27] = $objItem.Model
            $aHDDInfo[$i][28] = $objItem.NeedsCleaning
            $aHDDInfo[$i][29] = $objItem.NumberOfMediaSupported
            $aHDDInfo[$i][30] = $objItem.Partitions
            $aHDDInfo[$i][31] = $objItem.PNPDeviceID
            $aHDDInfo[$i][32] = $objItem.PowerManagementCapabilities
            $aHDDInfo[$i][33] = $objItem.PowerManagementSupported
            $aHDDInfo[$i][34] = $objItem.SCSIBus
            $aHDDInfo[$i][35] = $objItem.SCSILogicalUnit
            $aHDDInfo[$i][36] = $objItem.SCSIPort
            $aHDDInfo[$i][37] = $objItem.SCSITargetId
            $aHDDInfo[$i][38] = $objItem.SectorsPerTrack
            $aHDDInfo[$i][39] = $objItem.SerialNumber
            $aHDDInfo[$i][40] = $objItem.Signature
            $aHDDInfo[$i][41] = $objItem.Size
            $aHDDInfo[$i][42] = $objItem.Status
            $aHDDInfo[$i][43] = $objItem.StatusInfo
            $aHDDInfo[$i][44] = $objItem.SystemCreationClassName
            $aHDDInfo[$i][45] = $objItem.SystemName
            $aHDDInfo[$i][46] = $objItem.TotalCylinders
            $aHDDInfo[$i][47] = $objItem.TotalHeads
            $aHDDInfo[$i][48] = $objItem.TotalSectors
            $aHDDInfo[$i][49] = $objItem.TotalTracks
            $aHDDInfo[$i][50] = $objItem.TracksPerCylinder

            $i += 1
        Next
        $aHDDInfo[0][0] = UBound($aHDDInfo) - 1
        If $aHDDInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetHDD

Func _ComputerGetKeyboard(ByRef $aKeyboardInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aKeyboardInfo[1][21], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Keyboard", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394166(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aKeyboardInfo[UBound($aKeyboardInfo) + 1][21]
            $aKeyboardInfo[$i][0] = $objItem.Name
            $aKeyboardInfo[$i][1] = $objItem.Availability
            $aKeyboardInfo[$i][2] = $objItem.ConfigManagerErrorCode
            $aKeyboardInfo[$i][3] = $objItem.ConfigManagerUserConfig
            $aKeyboardInfo[$i][4] = $objItem.Description
            $aKeyboardInfo[$i][5] = $objItem.CreationClassName
            $aKeyboardInfo[$i][6] = $objItem.DeviceID
            $aKeyboardInfo[$i][7] = $objItem.ErrorCleared
            $aKeyboardInfo[$i][8] = $objItem.ErrorDescription
            $aKeyboardInfo[$i][9] = $objItem.IsLocked
            $aKeyboardInfo[$i][10] = $objItem.LastErrorCode
            $aKeyboardInfo[$i][11] = $objItem.Layout
            $aKeyboardInfo[$i][12] = $objItem.NumberOfFunctionKeys
            $aKeyboardInfo[$i][13] = $objItem.Password
            $aKeyboardInfo[$i][14] = $objItem.PNPDeviceID
            $aKeyboardInfo[$i][15] = $objItem.PowerManagementCapabilities(0)
            $aKeyboardInfo[$i][16] = $objItem.PowerManagementSupported
            $aKeyboardInfo[$i][17] = $objItem.Status
            $aKeyboardInfo[$i][18] = $objItem.StatusInfo
            $aKeyboardInfo[$i][19] = $objItem.SystemCreationClassName
            $aKeyboardInfo[$i][20] = $objItem.SystemName
            $i += 1
        Next
        $aKeyboardInfo[0][0] = UBound($aKeyboardInfo) - 1
        If $aKeyboardInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetKeyboard

;~ Func _ComputerGetMemory(ByRef $aMemoryInfo)
;~  Local $colItems, $objWMIService, $objItem
;~  Dim $aMemoryInfo[1][28], $i = 1

;~  $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
;~  $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemory", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
;~  $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394347(v=vs.85).aspx"

;~  If IsObj($colItems) Then
;~      For $objItem In $colItems
;~          ReDim $aMemoryInfo[UBound($aMemoryInfo) + 1][28]
;~          $aMemoryInfo[$i][0] = $objItem.Name
;~          $aMemoryInfo[$i][1] = $objItem.BankLabel
;~          $aMemoryInfo[$i][2] = $objItem.Capacity
;~          $aMemoryInfo[$i][3] = $objItem.CreationClassName
;~          $aMemoryInfo[$i][4] = $objItem.Description
;~          $aMemoryInfo[$i][5] = $objItem.DataWidth
;~          $aMemoryInfo[$i][6] = $objItem.DeviceLocator
;~          $aMemoryInfo[$i][7] = $objItem.FormFactor
;~          $aMemoryInfo[$i][8] = $objItem.HotSwappable
;~          $aMemoryInfo[$i][9] = $objItem.InterleaveDataDepth
;~          $aMemoryInfo[$i][10] = $objItem.InterleavePosition
;~          $aMemoryInfo[$i][11] = $objItem.Manufacturer
;~          $aMemoryInfo[$i][12] = $objItem.MemoryType
;~          $aMemoryInfo[$i][13] = $objItem.Model
;~          $aMemoryInfo[$i][14] = $objItem.OtherIdentifyingInfo
;~          $aMemoryInfo[$i][15] = $objItem.PartNumber
;~          $aMemoryInfo[$i][16] = $objItem.PositionInRow
;~          $aMemoryInfo[$i][17] = $objItem.PoweredOn
;~          $aMemoryInfo[$i][18] = $objItem.Removable
;~          $aMemoryInfo[$i][19] = $objItem.Replaceable
;~          $aMemoryInfo[$i][20] = $objItem.SerialNumber
;~          $aMemoryInfo[$i][21] = $objItem.SKU
;~          $aMemoryInfo[$i][22] = $objItem.Speed
;~          $aMemoryInfo[$i][23] = $objItem.Status
;~          $aMemoryInfo[$i][24] = $objItem.Tag
;~          $aMemoryInfo[$i][25] = $objItem.TotalWidth
;~          $aMemoryInfo[$i][26] = $objItem.TypeDetail
;~          $aMemoryInfo[$i][27] = $objItem.Version
;~          $i += 1
;~      Next
;~      $aMemoryInfo[0][0] = UBound($aMemoryInfo) - 1
;~      If $aMemoryInfo[0][0] < 1 Then
;~          SetError(1, 1, 0)
;~      EndIf
;~  Else
;~      SetError(1, 2, 0)
;~  EndIf
;~ EndFunc   ;==>_ComputerGetMemory

Func _ComputerGetMemory(ByRef $aMemoryInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aMemoryInfo[1][27], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemoryArray", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394347(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aMemoryInfo[UBound($aMemoryInfo) + 1][27]
            $aMemoryInfo[$i][0] = $objItem.Caption
            $aMemoryInfo[$i][1] = $objItem.CreationClassName
            $aMemoryInfo[$i][2] = $objItem.Depth
            $aMemoryInfo[$i][3] = $objItem.Description
            $aMemoryInfo[$i][4] = $objItem.Height
            $aMemoryInfo[$i][5] = $objItem.HotSwappable
            $aMemoryInfo[$i][6] = $objItem.InstallDate
            $aMemoryInfo[$i][7] = $objItem.Location
            $aMemoryInfo[$i][8] = $objItem.Manufacturer
            $aMemoryInfo[$i][9] = $objItem.MaxCapacity
            $aMemoryInfo[$i][10] = $objItem.MemoryDevices
            $aMemoryInfo[$i][11] = $objItem.MemoryErrorCorrection
            $aMemoryInfo[$i][12] = $objItem.Model
            $aMemoryInfo[$i][13] = $objItem.Name
            $aMemoryInfo[$i][14] = $objItem.OtherIdentifyingInfo
            $aMemoryInfo[$i][15] = $objItem.PartNumber
            $aMemoryInfo[$i][16] = $objItem.PoweredOn
            $aMemoryInfo[$i][17] = $objItem.Removable
            $aMemoryInfo[$i][18] = $objItem.Replaceable
            $aMemoryInfo[$i][19] = $objItem.SerialNumber
            $aMemoryInfo[$i][20] = $objItem.SKU
            $aMemoryInfo[$i][21] = $objItem.Status
            $aMemoryInfo[$i][22] = $objItem.Tag
            $aMemoryInfo[$i][23] = $objItem.Use
            $aMemoryInfo[$i][24] = $objItem.Version
            $aMemoryInfo[$i][25] = $objItem.Weight
            $aMemoryInfo[$i][26] = $objItem.Width
            $i += 1
        Next
        $aMemoryInfo[0][0] = UBound($aMemoryInfo) - 1
        If $aMemoryInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetMemory

Func _ComputerGetMonitors(ByRef $aMonitorInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aMonitorInfo[1][26], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DesktopMonitor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394122(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aMonitorInfo[UBound($aMonitorInfo) + 1][26]
            $aMonitorInfo[$i][0] = $objItem.Name
            $aMonitorInfo[$i][1] = $objItem.Availability
            $aMonitorInfo[$i][2] = $objItem.Bandwidth
            $aMonitorInfo[$i][3] = $objItem.ConfigManagerErrorCode
            $aMonitorInfo[$i][4] = $objItem.Description
            $aMonitorInfo[$i][5] = $objItem.ConfigManagerUserConfig
            $aMonitorInfo[$i][6] = $objItem.CreationClassName
            $aMonitorInfo[$i][7] = $objItem.DeviceID
            $aMonitorInfo[$i][8] = $objItem.DisplayType
            $aMonitorInfo[$i][9] = $objItem.ErrorCleared
            $aMonitorInfo[$i][10] = $objItem.ErrorDescription
            $aMonitorInfo[$i][11] = $objItem.IsLocked
            $aMonitorInfo[$i][12] = $objItem.LastErrorCode
            $aMonitorInfo[$i][13] = $objItem.MonitorManufacturer
            $aMonitorInfo[$i][14] = $objItem.MonitorType
            $aMonitorInfo[$i][15] = $objItem.PixelsPerXLogicalInch
            $aMonitorInfo[$i][16] = $objItem.PixelsPerYLogicalInch
            $aMonitorInfo[$i][17] = $objItem.PNPDeviceID
            $aMonitorInfo[$i][18] = $objItem.PowerManagementCapabilities(0)
            $aMonitorInfo[$i][19] = $objItem.PowerManagementSupported
            $aMonitorInfo[$i][20] = $objItem.ScreenHeight
            $aMonitorInfo[$i][21] = $objItem.ScreenWidth
            $aMonitorInfo[$i][22] = $objItem.Status
            $aMonitorInfo[$i][23] = $objItem.StatusInfo
            $aMonitorInfo[$i][24] = $objItem.SystemCreationClassName
            $aMonitorInfo[$i][25] = $objItem.SystemName
            $i += 1
        Next
        $aMonitorInfo[0][0] = UBound($aMonitorInfo) - 1
        If $aMonitorInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetMonitors

Func _ComputerGetMotherboard(ByRef $aMotherboardInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aMotherboardInfo[1][20], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_MotherboardDevice", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394204(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aMotherboardInfo[UBound($aMotherboardInfo) + 1][20]
            $aMotherboardInfo[$i][0] = $objItem.Name
            $aMotherboardInfo[$i][1] = $objItem.Availability
            $aMotherboardInfo[$i][2] = $objItem.ConfigManagerErrorCode
            $aMotherboardInfo[$i][3] = $objItem.ConfigManagerUserConfig
            $aMotherboardInfo[$i][4] = $objItem.Description
            $aMotherboardInfo[$i][5] = $objItem.CreationClassName
            $aMotherboardInfo[$i][6] = $objItem.DeviceID
            $aMotherboardInfo[$i][7] = $objItem.ErrorCleared
            $aMotherboardInfo[$i][8] = $objItem.ErrorDescription
            $aMotherboardInfo[$i][9] = $objItem.LastErrorCode
            $aMotherboardInfo[$i][10] = $objItem.PNPDeviceID
            $aMotherboardInfo[$i][11] = $objItem.PowerManagementCapabilities(0)
            $aMotherboardInfo[$i][12] = $objItem.PowerManagementSupported
            $aMotherboardInfo[$i][13] = $objItem.PrimaryBusType
            $aMotherboardInfo[$i][14] = $objItem.RevisionNumber
            $aMotherboardInfo[$i][15] = $objItem.SecondaryBusType
            $aMotherboardInfo[$i][16] = $objItem.Status
            $aMotherboardInfo[$i][17] = $objItem.StatusInfo
            $aMotherboardInfo[$i][18] = $objItem.SystemCreationClassName
            $aMotherboardInfo[$i][19] = $objItem.SystemName
            $i += 1
        Next
        $aMotherboardInfo[0][0] = UBound($aMotherboardInfo) - 1
        If $aMotherboardInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetMotherboard

Func _ComputerGetMouse(ByRef $aMouseInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aMouseInfo[1][31], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PointingDevice", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394356(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aMouseInfo[UBound($aMouseInfo) + 1][31]
            $aMouseInfo[$i][0] = $objItem.Name
            $aMouseInfo[$i][1] = $objItem.Availability
            $aMouseInfo[$i][2] = $objItem.ConfigManagerErrorCode
            $aMouseInfo[$i][3] = $objItem.ConfigManagerUserConfig
            $aMouseInfo[$i][4] = $objItem.Description
            $aMouseInfo[$i][5] = $objItem.CreationClassName
            $aMouseInfo[$i][6] = $objItem.DeviceID
            $aMouseInfo[$i][7] = $objItem.DeviceInterface
            $aMouseInfo[$i][8] = $objItem.DoubleSpeedThreshold
            $aMouseInfo[$i][9] = $objItem.ErrorCleared
            $aMouseInfo[$i][10] = $objItem.ErrorDescription
            $aMouseInfo[$i][11] = $objItem.Handedness
            $aMouseInfo[$i][12] = $objItem.HardwareType
            $aMouseInfo[$i][13] = $objItem.InfFileName
            $aMouseInfo[$i][14] = $objItem.InfSection
            $aMouseInfo[$i][15] = $objItem.IsLocked
            $aMouseInfo[$i][16] = $objItem.LastErrorCode
            $aMouseInfo[$i][17] = $objItem.Manufacturer
            $aMouseInfo[$i][18] = $objItem.NumberOfButtons
            $aMouseInfo[$i][19] = $objItem.PNPDeviceID
            $aMouseInfo[$i][20] = $objItem.PointingType
            $aMouseInfo[$i][21] = $objItem.PowerManagementCapabilities(0)
            $aMouseInfo[$i][22] = $objItem.PowerManagementSupported
            $aMouseInfo[$i][23] = $objItem.QuadSpeedThreshold
            $aMouseInfo[$i][24] = $objItem.Resolution
            $aMouseInfo[$i][25] = $objItem.SampleRate
            $aMouseInfo[$i][26] = $objItem.Status
            $aMouseInfo[$i][27] = $objItem.StatusInfo
            $aMouseInfo[$i][28] = $objItem.Synch
            $aMouseInfo[$i][29] = $objItem.SystemCreationClassName
            $aMouseInfo[$i][30] = $objItem.SystemName
            $i += 1
        Next
        $aMouseInfo[0][0] = UBound($aMouseInfo) - 1
        If $aMouseInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetMouse

Func _ComputerGetNetworkCards(ByRef $aNetworkInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aNetworkInfo[1][34], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aNetworkInfo[UBound($aNetworkInfo) + 1][34]
            $aNetworkInfo[$i][0] = $objItem.Name
            $aNetworkInfo[$i][1] = $objItem.AdapterType
            $aNetworkInfo[$i][2] = $objItem.AdapterTypeId
            $aNetworkInfo[$i][3] = $objItem.AutoSense
            $aNetworkInfo[$i][4] = $objItem.Description
            $aNetworkInfo[$i][5] = $objItem.Availability
            $aNetworkInfo[$i][6] = $objItem.ConfigManagerErrorCode
            $aNetworkInfo[$i][7] = $objItem.ConfigManagerUserConfig
            $aNetworkInfo[$i][8] = $objItem.CreationClassName
            $aNetworkInfo[$i][9] = $objItem.DeviceID
            $aNetworkInfo[$i][10] = $objItem.ErrorCleared
            $aNetworkInfo[$i][11] = $objItem.ErrorDescription
            $aNetworkInfo[$i][12] = $objItem.Index
            $aNetworkInfo[$i][13] = $objItem.Installed
            $aNetworkInfo[$i][14] = $objItem.LastErrorCode
            $aNetworkInfo[$i][15] = $objItem.MACAddress
            $aNetworkInfo[$i][16] = $objItem.Manufacturer
            $aNetworkInfo[$i][17] = $objItem.MaxNumberControlled
            $aNetworkInfo[$i][18] = $objItem.MaxSpeed
            $aNetworkInfo[$i][19] = $objItem.NetConnectionID
            $aNetworkInfo[$i][20] = $objItem.NetConnectionStatus
            $aNetworkInfo[$i][21] = $objItem.NetworkAddresses(0)
            $aNetworkInfo[$i][22] = $objItem.PermanentAddress
            $aNetworkInfo[$i][23] = $objItem.PNPDeviceID
            $aNetworkInfo[$i][24] = $objItem.PowerManagementCapabilities(0)
            $aNetworkInfo[$i][25] = $objItem.PowerManagementSupported
            $aNetworkInfo[$i][26] = $objItem.ProductName
            $aNetworkInfo[$i][27] = $objItem.ServiceName
            $aNetworkInfo[$i][28] = $objItem.Speed
            $aNetworkInfo[$i][29] = $objItem.Status
            $aNetworkInfo[$i][30] = $objItem.StatusInfo
            $aNetworkInfo[$i][31] = $objItem.SystemCreationClassName
            $aNetworkInfo[$i][32] = $objItem.SystemName
            $aNetworkInfo[$i][33] = __StringToDate($objItem.TimeOfLastReset)
            $i += 1
        Next
        $aNetworkInfo[0][0] = UBound($aNetworkInfo) - 1
        If $aNetworkInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetNetworkCards

Func _ComputerGetProcessors(ByRef $aProcessorInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aProcessorInfo[1][42], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394373(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aProcessorInfo[UBound($aProcessorInfo) + 1][42]
            $aProcessorInfo[$i][0] = StringStripWS($objItem.Name, 1)
            $aProcessorInfo[$i][1] = $objItem.AddressWidth
            $aProcessorInfo[$i][2] = $objItem.Architecture
            $aProcessorInfo[$i][3] = $objItem.Availability
            $aProcessorInfo[$i][4] = $objItem.Description
            $aProcessorInfo[$i][5] = $objItem.ConfigManagerErrorCode
            $aProcessorInfo[$i][6] = $objItem.ConfigManagerUserConfig
            $aProcessorInfo[$i][7] = $objItem.CpuStatus
            $aProcessorInfo[$i][8] = $objItem.CreationClassName
            $aProcessorInfo[$i][9] = $objItem.CurrentClockSpeed
            $aProcessorInfo[$i][10] = $objItem.CurrentVoltage
            $aProcessorInfo[$i][11] = $objItem.DataWidth
            $aProcessorInfo[$i][12] = $objItem.DeviceID
            $aProcessorInfo[$i][13] = $objItem.ErrorCleared
            $aProcessorInfo[$i][14] = $objItem.ErrorDescription
            $aProcessorInfo[$i][15] = $objItem.ExtClock
            $aProcessorInfo[$i][16] = $objItem.Family
            $aProcessorInfo[$i][17] = $objItem.L2CacheSize
            $aProcessorInfo[$i][18] = $objItem.L2CacheSpeed
            $aProcessorInfo[$i][19] = $objItem.LastErrorCode
            $aProcessorInfo[$i][20] = $objItem.Level
            $aProcessorInfo[$i][21] = $objItem.LoadPercentage
            $aProcessorInfo[$i][22] = $objItem.Manufacturer
            $aProcessorInfo[$i][23] = $objItem.MaxClockSpeed
            $aProcessorInfo[$i][24] = $objItem.OtherFamilyDescription
            $aProcessorInfo[$i][25] = $objItem.PNPDeviceID
            $aProcessorInfo[$i][26] = $objItem.PowerManagementCapabilities(0)
            $aProcessorInfo[$i][27] = $objItem.PowerManagementSupported
            $aProcessorInfo[$i][28] = $objItem.ProcessorId
            $aProcessorInfo[$i][29] = $objItem.ProcessorType
            $aProcessorInfo[$i][30] = $objItem.Revision
            $aProcessorInfo[$i][31] = $objItem.Role
            $aProcessorInfo[$i][32] = $objItem.SocketDesignation
            $aProcessorInfo[$i][33] = $objItem.Status
            $aProcessorInfo[$i][34] = $objItem.StatusInfo
            $aProcessorInfo[$i][35] = $objItem.Stepping
            $aProcessorInfo[$i][36] = $objItem.SystemCreationClassName
            $aProcessorInfo[$i][37] = $objItem.SystemName
            $aProcessorInfo[$i][38] = $objItem.UniqueId
            $aProcessorInfo[$i][39] = $objItem.UpgradeMethod
            $aProcessorInfo[$i][40] = $objItem.Version
            $aProcessorInfo[$i][41] = $objItem.VoltageCaps
            $i += 1
        Next
        $aProcessorInfo[0][0] = UBound($aProcessorInfo) - 1
        If $aProcessorInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetProcessors

Func _ComputerGetSoundCards(ByRef $aSoundCardInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aSoundCardInfo[1][21], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_SoundDevice", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394463(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aSoundCardInfo[UBound($aSoundCardInfo) + 1][21]
            $aSoundCardInfo[$i][0] = $objItem.Name
            $aSoundCardInfo[$i][1] = $objItem.Availability
            $aSoundCardInfo[$i][2] = $objItem.ConfigManagerErrorCode
            $aSoundCardInfo[$i][3] = $objItem.ConfigManagerUserConfig
            $aSoundCardInfo[$i][4] = $objItem.Description
            $aSoundCardInfo[$i][5] = $objItem.CreationClassName
            $aSoundCardInfo[$i][6] = $objItem.DeviceID
            $aSoundCardInfo[$i][7] = $objItem.DMABufferSize
            $aSoundCardInfo[$i][8] = $objItem.ErrorCleared
            $aSoundCardInfo[$i][9] = $objItem.ErrorDescription
            $aSoundCardInfo[$i][10] = $objItem.LastErrorCode
            $aSoundCardInfo[$i][11] = $objItem.Manufacturer
            $aSoundCardInfo[$i][12] = $objItem.MPU401Address
            $aSoundCardInfo[$i][13] = $objItem.PNPDeviceID
            $aSoundCardInfo[$i][14] = $objItem.PowerManagementCapabilities(0)
            $aSoundCardInfo[$i][15] = $objItem.PowerManagementSupported
            $aSoundCardInfo[$i][16] = $objItem.ProductName
            $aSoundCardInfo[$i][17] = $objItem.Status
            $aSoundCardInfo[$i][18] = $objItem.StatusInfo
            $aSoundCardInfo[$i][19] = $objItem.SystemCreationClassName
            $aSoundCardInfo[$i][20] = $objItem.SystemName
            $i += 1
        Next
        $aSoundCardInfo[0][0] = UBound($aSoundCardInfo) - 1
        If $aSoundCardInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetSoundCards

Func _ComputerGetVideoCards(ByRef $aVideoInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aVideoInfo[1][59], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_VideoController", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394512(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aVideoInfo[UBound($aVideoInfo) + 1][59]
            $aVideoInfo[$i][0] = $objItem.Name
            $aVideoInfo[$i][1] = $objItem.AcceleratorCapabilities(0)
            $aVideoInfo[$i][2] = $objItem.AdapterCompatibility
            $aVideoInfo[$i][3] = $objItem.AdapterDACType
            $aVideoInfo[$i][4] = $objItem.Description
            $aVideoInfo[$i][5] = $objItem.AdapterRAM
            $aVideoInfo[$i][6] = $objItem.Availability
            $aVideoInfo[$i][7] = $objItem.CapabilityDescriptions(0)
            $aVideoInfo[$i][8] = $objItem.ColorTableEntries
            $aVideoInfo[$i][9] = $objItem.ConfigManagerErrorCode
            $aVideoInfo[$i][10] = $objItem.ConfigManagerUserConfig
            $aVideoInfo[$i][11] = $objItem.CreationClassName
            $aVideoInfo[$i][12] = $objItem.CurrentBitsPerPixel
            $aVideoInfo[$i][13] = $objItem.CurrentHorizontalResolution
            $aVideoInfo[$i][14] = $objItem.CurrentNumberOfColors
            $aVideoInfo[$i][15] = $objItem.CurrentNumberOfColumns
            $aVideoInfo[$i][16] = $objItem.CurrentNumberOfRows
            $aVideoInfo[$i][17] = $objItem.CurrentRefreshRate
            $aVideoInfo[$i][18] = $objItem.CurrentScanMode
            $aVideoInfo[$i][19] = $objItem.CurrentVerticalResolution
            $aVideoInfo[$i][20] = $objItem.DeviceID
            $aVideoInfo[$i][21] = $objItem.DeviceSpecificPens
            $aVideoInfo[$i][22] = $objItem.DitherType
            $aVideoInfo[$i][23] = __StringToDate($objItem.DriverDate)
            $aVideoInfo[$i][24] = $objItem.DriverVersion
            $aVideoInfo[$i][25] = $objItem.ErrorCleared
            $aVideoInfo[$i][26] = $objItem.ErrorDescription
            $aVideoInfo[$i][27] = $objItem.ICMIntent
            $aVideoInfo[$i][28] = $objItem.ICMMethod
            $aVideoInfo[$i][29] = $objItem.InfFilename
            $aVideoInfo[$i][30] = $objItem.InfSection
            $aVideoInfo[$i][31] = $objItem.InstalledDisplayDrivers
            $aVideoInfo[$i][32] = $objItem.LastErrorCode
            $aVideoInfo[$i][33] = $objItem.MaxMemorySupported
            $aVideoInfo[$i][34] = $objItem.MaxNumberControlled
            $aVideoInfo[$i][35] = $objItem.MaxRefreshRate
            $aVideoInfo[$i][36] = $objItem.MinRefreshRate
            $aVideoInfo[$i][37] = $objItem.Monochrome
            $aVideoInfo[$i][38] = $objItem.NumberOfColorPlanes
            $aVideoInfo[$i][39] = $objItem.NumberOfVideoPages
            $aVideoInfo[$i][40] = $objItem.PNPDeviceID
            $aVideoInfo[$i][41] = $objItem.PowerManagementCapabilities(0)
            $aVideoInfo[$i][42] = $objItem.PowerManagementSupported
            $aVideoInfo[$i][43] = $objItem.ProtocolSupported
            $aVideoInfo[$i][44] = $objItem.ReservedSystemPaletteEntries
            $aVideoInfo[$i][45] = $objItem.SpecificationVersion
            $aVideoInfo[$i][46] = $objItem.Status
            $aVideoInfo[$i][47] = $objItem.StatusInfo
            $aVideoInfo[$i][48] = $objItem.SystemCreationClassName
            $aVideoInfo[$i][49] = $objItem.SystemName
            $aVideoInfo[$i][50] = $objItem.SystemPaletteEntries
            $aVideoInfo[$i][51] = __StringToDate($objItem.TimeOfLastReset)
            $aVideoInfo[$i][52] = $objItem.VideoArchitecture
            $aVideoInfo[$i][53] = $objItem.VideoMemoryType
            $aVideoInfo[$i][54] = $objItem.VideoMode
            $aVideoInfo[$i][55] = $objItem.VideoModeDescription
            $aVideoInfo[$i][56] = $objItem.VideoProcessor
            $i += 1
        Next
        $aVideoInfo[0][0] = UBound($aVideoInfo) - 1
        If $aVideoInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetVideoCards

Func _ComputerGetBIOS(ByRef $aBIOSInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aBIOSInfo[1][25], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394077(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aBIOSInfo[UBound($aBIOSInfo) + 1][25]
            $aBIOSInfo[$i][0] = $objItem.Name
            $aBIOSInfo[$i][1] = $objItem.Status
            $aBIOSInfo[$i][2] = $objItem.BiosCharacteristics(0)
            $aBIOSInfo[$i][3] = $objItem.BIOSVersion(0)
            $aBIOSInfo[$i][4] = $objItem.Description
            $aBIOSInfo[$i][5] = $objItem.BuildNumber
            $aBIOSInfo[$i][6] = $objItem.CodeSet
            $aBIOSInfo[$i][7] = $objItem.CurrentLanguage
            $aBIOSInfo[$i][8] = $objItem.IdentificationCode
            $aBIOSInfo[$i][9] = $objItem.InstallableLanguages
            $aBIOSInfo[$i][10] = $objItem.LanguageEdition
            $aBIOSInfo[$i][11] = $objItem.ListOfLanguages(0)
            $aBIOSInfo[$i][12] = $objItem.Manufacturer
            $aBIOSInfo[$i][13] = $objItem.OtherTargetOS
            $aBIOSInfo[$i][14] = $objItem.PrimaryBIOS
            $aBIOSInfo[$i][16] = $objItem.SerialNumber
            $aBIOSInfo[$i][17] = $objItem.SMBIOSBIOSVersion
            $aBIOSInfo[$i][18] = $objItem.SMBIOSMajorVersion
            $aBIOSInfo[$i][19] = $objItem.SMBIOSMinorVersion
            $aBIOSInfo[$i][20] = $objItem.SMBIOSPresent
            $aBIOSInfo[$i][21] = $objItem.SoftwareElementID
            $aBIOSInfo[$i][22] = $objItem.SoftwareElementState
            $aBIOSInfo[$i][23] = $objItem.TargetOperatingSystem
            $aBIOSInfo[$i][24] = $objItem.Version
            $i += 1
        Next
        $aBIOSInfo[0][0] = UBound($aBIOSInfo) - 1
        If $aBIOSInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
    Return ($aBIOSInfo[1][16])
EndFunc   ;==>_ComputerGetBIOS

Func _ComputerGetSystem(ByRef $aSystemInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aSystemInfo[1][52], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394102(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aSystemInfo[UBound($aSystemInfo) + 1][52]
            $aSystemInfo[$i][0] = $objItem.Name
            $aSystemInfo[$i][1] = $objItem.AdminPasswordStatus
            $aSystemInfo[$i][2] = $objItem.AutomaticResetBootOption
            $aSystemInfo[$i][3] = $objItem.AutomaticResetCapability
            $aSystemInfo[$i][4] = $objItem.Description
            $aSystemInfo[$i][5] = $objItem.BootOptionOnLimit
            $aSystemInfo[$i][6] = $objItem.BootOptionOnWatchDog
            $aSystemInfo[$i][7] = $objItem.BootROMSupported
            $aSystemInfo[$i][8] = $objItem.BootupState
            $aSystemInfo[$i][9] = $objItem.ChassisBootupState
            $aSystemInfo[$i][10] = $objItem.CreationClassName
            $aSystemInfo[$i][11] = $objItem.CurrentTimeZone
            $aSystemInfo[$i][12] = $objItem.DaylightInEffect
            $aSystemInfo[$i][13] = $objItem.Domain
            $aSystemInfo[$i][14] = $objItem.DomainRole
            $aSystemInfo[$i][15] = $objItem.EnableDaylightSavingsTime
            $aSystemInfo[$i][16] = $objItem.FrontPanelResetStatus
            $aSystemInfo[$i][17] = $objItem.InfraredSupported
            $aSystemInfo[$i][18] = $objItem.InitialLoadInfo(0)
            $aSystemInfo[$i][19] = $objItem.KeyboardPasswordStatus
            $aSystemInfo[$i][20] = $objItem.LastLoadInfo
            $aSystemInfo[$i][21] = $objItem.Manufacturer
            $aSystemInfo[$i][22] = $objItem.Model
            $aSystemInfo[$i][23] = $objItem.NameFormat
            $aSystemInfo[$i][24] = $objItem.NetworkServerModeEnabled
            $aSystemInfo[$i][25] = $objItem.NumberOfProcessors
            $aSystemInfo[$i][26] = $objItem.OEMLogoBitmap(0)
            $aSystemInfo[$i][27] = $objItem.OEMStringArray(0)
            $aSystemInfo[$i][28] = $objItem.PartOfDomain
            $aSystemInfo[$i][29] = $objItem.PauseAfterReset
            $aSystemInfo[$i][30] = $objItem.PowerManagementCapabilities(0)
            $aSystemInfo[$i][31] = $objItem.PowerManagementSupported
            $aSystemInfo[$i][32] = $objItem.PowerOnPasswordStatus
            $aSystemInfo[$i][33] = $objItem.PowerState
            $aSystemInfo[$i][34] = $objItem.PowerSupplyState
            $aSystemInfo[$i][35] = $objItem.PrimaryOwnerContact
            $aSystemInfo[$i][36] = $objItem.PrimaryOwnerName
            $aSystemInfo[$i][37] = $objItem.ResetCapability
            $aSystemInfo[$i][38] = $objItem.ResetCount
            $aSystemInfo[$i][39] = $objItem.ResetLimit
            $aSystemInfo[$i][40] = $objItem.Roles(0)
            $aSystemInfo[$i][41] = $objItem.Status
            $aSystemInfo[$i][42] = $objItem.SupportContactDescription(0)
            $aSystemInfo[$i][43] = $objItem.SystemStartupDelay
            $aSystemInfo[$i][44] = $objItem.SystemStartupOptions(0)
            $aSystemInfo[$i][45] = $objItem.SystemStartupSetting
            $aSystemInfo[$i][46] = $objItem.SystemType
            $aSystemInfo[$i][47] = $objItem.ThermalState
            $aSystemInfo[$i][48] = $objItem.TotalPhysicalMemory
            $aSystemInfo[$i][49] = $objItem.UserName
            $aSystemInfo[$i][50] = $objItem.WakeUpType
            $aSystemInfo[$i][51] = $objItem.Workgroup
            $i += 1
        Next
        $aSystemInfo[0][0] = UBound($aSystemInfo) - 1
        If $aSystemInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetSystem

Func _ComputerGetOSs(ByRef $aOSInfo)
    Local $colItems, $objWMIService, $objItem
    Dim $aOSInfo[1][60], $i = 1

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394239(v=vs.85).aspx"

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aOSInfo[UBound($aOSInfo) + 1][60]
            $aOSInfo[$i][0] = $objItem.Name
            $aOSInfo[$i][1] = $objItem.BootDevice
            $aOSInfo[$i][2] = $objItem.BuildNumber
            $aOSInfo[$i][3] = $objItem.BuildType
            $aOSInfo[$i][4] = $objItem.Description
            $aOSInfo[$i][5] = $objItem.CodeSet
            $aOSInfo[$i][6] = $objItem.CountryCode
            $aOSInfo[$i][7] = $objItem.CreationClassName
            $aOSInfo[$i][8] = $objItem.CSCreationClassName
            $aOSInfo[$i][9] = $objItem.CSDVersion
            $aOSInfo[$i][10] = $objItem.CSName
            $aOSInfo[$i][11] = $objItem.CurrentTimeZone
            $aOSInfo[$i][12] = $objItem.DataExecutionPrevention_32BitApplications
            $aOSInfo[$i][13] = $objItem.DataExecutionPrevention_Available
            $aOSInfo[$i][14] = $objItem.DataExecutionPrevention_Drivers
            $aOSInfo[$i][15] = $objItem.DataExecutionPrevention_SupportPolicy
            $aOSInfo[$i][16] = $objItem.Debug
            $aOSInfo[$i][17] = $objItem.Distributed
            $aOSInfo[$i][18] = $objItem.EncryptionLevel
            $aOSInfo[$i][19] = $objItem.ForegroundApplicationBoost
            $aOSInfo[$i][20] = $objItem.FreePhysicalMemory
            $aOSInfo[$i][21] = $objItem.FreeSpaceInPagingFiles
            $aOSInfo[$i][22] = $objItem.FreeVirtualMemory
            $aOSInfo[$i][23] = __StringToDate($objItem.InstallDate)
            $aOSInfo[$i][24] = $objItem.LargeSystemCache
            $aOSInfo[$i][25] = __StringToDate($objItem.LastBootUpTime)
            $aOSInfo[$i][26] = __StringToDate($objItem.LocalDateTime)
            $aOSInfo[$i][27] = $objItem.Locale
            $aOSInfo[$i][28] = $objItem.Manufacturer
            $aOSInfo[$i][29] = $objItem.MaxNumberOfProcesses
            $aOSInfo[$i][30] = $objItem.MaxProcessMemorySize
            $aOSInfo[$i][31] = $objItem.NumberOfLicensedUsers
            $aOSInfo[$i][32] = $objItem.NumberOfProcesses
            $aOSInfo[$i][33] = $objItem.NumberOfUsers
            $aOSInfo[$i][34] = $objItem.Organization
            $aOSInfo[$i][35] = $objItem.OSLanguage
            $aOSInfo[$i][36] = $objItem.OSProductSuite
            $aOSInfo[$i][37] = $objItem.OSType
            $aOSInfo[$i][38] = $objItem.OtherTypeDescription
            $aOSInfo[$i][39] = $objItem.PlusProductID
            $aOSInfo[$i][40] = $objItem.PlusVersionNumber
            $aOSInfo[$i][41] = $objItem.Primary
            $aOSInfo[$i][42] = $objItem.ProductType
            $aOSInfo[$i][43] = '';$objItem.QuantumLength
            $aOSInfo[$i][44] = '';$objItem.QuantumType
            $aOSInfo[$i][45] = $objItem.RegisteredUser
            $aOSInfo[$i][46] = $objItem.SerialNumber
            $aOSInfo[$i][47] = $objItem.ServicePackMajorVersion
            $aOSInfo[$i][48] = $objItem.ServicePackMinorVersion
            $aOSInfo[$i][49] = $objItem.SizeStoredInPagingFiles
            $aOSInfo[$i][50] = $objItem.Status
            $aOSInfo[$i][51] = $objItem.SuiteMask
            $aOSInfo[$i][52] = $objItem.SystemDevice
            $aOSInfo[$i][53] = $objItem.SystemDirectory
            $aOSInfo[$i][54] = $objItem.SystemDrive
            $aOSInfo[$i][55] = $objItem.TotalSwapSpaceSize
            $aOSInfo[$i][56] = $objItem.TotalVirtualMemorySize
            $aOSInfo[$i][57] = $objItem.TotalVisibleMemorySize
            $aOSInfo[$i][58] = $objItem.Version
            $aOSInfo[$i][59] = $objItem.WindowsDirectory
            $i += 1
        Next
        $aOSInfo[0][0] = UBound($aOSInfo) - 1
        If $aOSInfo[0][0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
EndFunc   ;==>_ComputerGetOSs
#endregion - Computer Get -
#region - Network Traffic -
Func _UpdateStats()

    Local $aEnd_Values, $iRecived, $iSent, $sNew_Label, $iLargest_Value

    $aEnd_Values = _GetAllTraffic()
    $iRecived = $aEnd_Values[0] - $aStart_Values[0]
    $iSent = $aEnd_Values[1] - $aStart_Values[1]

    If Not ($iRecived + $iSent) Then ; No Activity
        Local $sZero = 'DL: 0.0 kB/sec  UL: 0.0 kB/sec'
        If $sLast_Label <> $sZero Then GUICtrlSetData($NetSpeed, $sZero)
        $aStart_Values = $aEnd_Values
        $sLast_Label = $sZero
        Return
    EndIf

    If $iRecived >= 1048576 Then
        $sDL_Label = 'DL: ' & StringFormat('%.2f', Round($iRecived / 1048576, 2)) & ' mB/sec  '
    Else
        $sDL_Label = 'DL: ' & StringFormat('%.1f', Round($iRecived / 1024, 1)) & ' kB/sec  '
    EndIf

    If $iSent >= 1048576 Then
        $sUL_Label = 'UL: ' & StringFormat('%.2f', Round($iSent / 1048576, 2)) & ' mB/sec  '
    Else
        $sUL_Label = 'UL: ' & StringFormat('%.1f', Round($iSent / 1024, 1)) & ' kB/sec  '
    EndIf

    $sNew_Label = $sDL_Label & $sUL_Label
    If $sNew_Label <> $sLast_Label Then GUICtrlSetData($NetSpeed, $sNew_Label)

    $sLast_Label = $sNew_Label
    $aStart_Values = $aEnd_Values

EndFunc   ;==>_UpdateStats

Func _GetAllTraffic()

    Local $Total_Values[2], $Adapter_Values
    Local $ifcount = _GetNumberofInterfaces()

    If $Global_IF_Count <> $ifcount Then
        $Global_IF_Count = $ifcount
        $Table_Data = _WinAPI_GetIfTable()
        $aStart_Values = _GetAllTraffic()
    EndIf

    If IsArray($Table_Data) Then
        For $i = 1 To $Table_Data[0][0]
            $Adapter_Values = _WinAPI_GetIfEntry($Table_Data[$i][1])
            If IsArray($Adapter_Values) Then
                $Total_Values[0] += $Adapter_Values[0];Recived
                $Total_Values[1] += $Adapter_Values[1];Sent
            Else
                $Table_Data = _WinAPI_GetIfTable()
            EndIf
        Next
    EndIf

    Return $Total_Values

EndFunc   ;==>_GetAllTraffic

Func _WinAPI_GetIfEntry($iIndex)

    Local $Ret, $Stats[2]
    Static $tMIB_IFROW = DllStructCreate($tagMIB_IFROW)

    DllStructSetData($tMIB_IFROW, 2, $iIndex)

    $Ret = DllCall($IPHlpApi_Dll, 'dword', 'GetIfEntry', 'ptr', DllStructGetPtr($tMIB_IFROW))
    If (@error) Or ($Ret[0]) Then Return SetError($Ret[0], 0, 0)

    $Stats[0] = DllStructGetData($tMIB_IFROW, 'InOctets');Recived
    $Stats[1] = DllStructGetData($tMIB_IFROW, 'OutOctets');Sent

    Return $Stats

EndFunc   ;==>_WinAPI_GetIfEntry

Func _GetNumberofInterfaces()
    Local $Adaptor_Count = DllCall($IPHlpApi_Dll, 'int', 'GetNumberOfInterfaces', 'dword*', 0)
    Return $Adaptor_Count[1]
EndFunc   ;==>_GetNumberofInterfaces

Func _WinAPI_GetIfTable($iType = 0)

    Local $Ret, $Row, $Type, $Tag, $Tab, $Addr, $Count, $Lenght, $tMIB_IFTABLE
    Local $tMIB_IFROW = DllStructCreate($tagMIB_IFROW)

    $Row = 'byte[' & DllStructGetSize($tMIB_IFROW) & ']'
    $Tag = 'dword;'
    For $i = 1 To 32
        $Tag &= $Row & ';'
    Next
    $tMIB_IFTABLE = DllStructCreate($Tag)
    $Ret = DllCall($IPHlpApi_Dll, 'dword', 'GetIfTable', 'ptr', DllStructGetPtr($tMIB_IFTABLE), 'long*', DllStructGetSize($tMIB_IFTABLE), 'int', 1)
    If (@error) Or ($Ret[0]) Then Return SetError($Ret[0], 0, 0)

    $Count = DllStructGetData($tMIB_IFTABLE, 1)
    Dim $Tab[$Count + 1][20]
    $Tab[0][0] = 0
    $Tab[0][1] = 'Index'
    $Tab[0][2] = 'Type'
    $Tab[0][3] = 'Mtu'
    $Tab[0][4] = 'Speed'
    $Tab[0][5] = 'Address'
    $Tab[0][6] = 'AdminStatus'
    $Tab[0][7] = 'OperStatus'
    $Tab[0][8] = 'InOctets'
    $Tab[0][9] = 'InUcastPkts'
    $Tab[0][10] = 'InNUcastPkts'
    $Tab[0][11] = 'InDiscards'
    $Tab[0][12] = 'InErrors'
    $Tab[0][13] = 'InUnknownProtos'
    $Tab[0][14] = 'OutOctets'
    $Tab[0][15] = 'OutUcastPkts'
    $Tab[0][16] = 'OutNUcastPkts'
    $Tab[0][17] = 'OutDiscards'
    $Tab[0][18] = 'OutErrors'

    For $i = 1 To $Count
        $tMIB_IFROW = DllStructCreate($tagMIB_IFROW, DllStructGetPtr($tMIB_IFTABLE, $i + 1))
        $Type = DllStructGetData($tMIB_IFROW, 'Type')
        If $Type <> $MIB_IF_TYPE_SOFTWARE_LOOPBACK Then
            $Tab[0][0] += 1

            $Lenght = DllStructGetData($tMIB_IFROW, 'PhysAddrLen')
            $Addr = ''
            For $j = 1 To $Lenght
                $Addr &= Hex(DllStructGetData($tMIB_IFROW, 'PhysAddr', $j), 2) & '-'
            Next
            $Addr = StringTrimRight($Addr, 1)

            _ArraySearch($Tab, $Addr, 1, $Tab[0][0] - 1, 1, 0, 1, 5)
            If @error <> 6 Or $Addr = '' Or StringLen($Addr) > 17 Then
                $Tab[0][0] -= 1
                ContinueLoop
            EndIf

            $Tab[$Tab[0][0]][0] = DllStructGetData($tMIB_IFROW, 'Name')
            $Tab[$Tab[0][0]][1] = DllStructGetData($tMIB_IFROW, 'Index')
            $Tab[$Tab[0][0]][2] = $Type
            $Tab[$Tab[0][0]][3] = DllStructGetData($tMIB_IFROW, 'Mtu')
            $Tab[$Tab[0][0]][4] = DllStructGetData($tMIB_IFROW, 'Speed')
            $Tab[$Tab[0][0]][5] = $Addr
            $Tab[$Tab[0][0]][6] = DllStructGetData($tMIB_IFROW, 'AdminStatus')
            $Tab[$Tab[0][0]][7] = DllStructGetData($tMIB_IFROW, 'OperStatus')
            $Tab[$Tab[0][0]][8] = DllStructGetData($tMIB_IFROW, 'InOctets')
            $Tab[$Tab[0][0]][9] = DllStructGetData($tMIB_IFROW, 'InUcastPkts')
            $Tab[$Tab[0][0]][10] = DllStructGetData($tMIB_IFROW, 'InNUcastPkts')
            $Tab[$Tab[0][0]][11] = DllStructGetData($tMIB_IFROW, 'InDiscards')
            $Tab[$Tab[0][0]][12] = DllStructGetData($tMIB_IFROW, 'InErrors')
            $Tab[$Tab[0][0]][13] = DllStructGetData($tMIB_IFROW, 'InUnknownProtos')
            $Tab[$Tab[0][0]][14] = DllStructGetData($tMIB_IFROW, 'OutOctets')
            $Tab[$Tab[0][0]][15] = DllStructGetData($tMIB_IFROW, 'OutUcastPkts')
            $Tab[$Tab[0][0]][16] = DllStructGetData($tMIB_IFROW, 'OutNUcastPkts')
            $Tab[$Tab[0][0]][17] = DllStructGetData($tMIB_IFROW, 'OutDiscards')
            $Tab[$Tab[0][0]][18] = DllStructGetData($tMIB_IFROW, 'OutErrors')
            $Tab[$Tab[0][0]][19] = StringLeft(DllStructGetData($tMIB_IFROW, 'Descr'), DllStructGetData($tMIB_IFROW, 'DescrLen') - 1)
        EndIf
    Next

    If $Tab[0][0] < $Count Then ReDim $Tab[$Tab[0][0] + 1][20]

    Return $Tab
EndFunc   ;==>_WinAPI_GetIfTable
#endregion - Network Traffic -
#region - Marquee -
Func _GUICtrlMarquee_SetScroll($iLoop = 0, $sMove = 'scroll', $sDirection = 'left', $iScroll = 6, $iDelay = 85)

    If IsNumber($iLoop) Then $iMarquee_Loop = Int(Abs($iLoop))

    Switch $sMove
        Case 'alternate', 'slide'
            $sMarquee_Move = $sMove
        Case Else
            $sMarquee_Move = 'scroll'
    EndSwitch

    Switch $sDirection
        Case 'right', 'up', 'down'
            $sMarquee_Direction = $sDirection
        Case Else
            $sMarquee_Direction = 'left'
    EndSwitch

    If IsNumber($iScroll) Then $iMarquee_Scroll = Int(Abs($iScroll))

    If IsNumber($iDelay) Then $iMarquee_Delay = Int(Abs($iDelay))

EndFunc   ;==>_GUICtrlMarquee_SetScroll

Func _GUICtrlMarquee_SetDisplay($iBorder = Default, $vTxtCol = Default, $vBkCol = Default, $iPoint = Default, $sFont = Default)
    Select
        Case $iBorder = Default
            $iMarquee_Border = 0
        Case $iBorder >= 0 And $iBorder <= 3
            $iMarquee_Border = Int(Abs($iBorder))
        Case Else
    EndSelect

    Select
        Case $vTxtCol = Default
            $vMarquee_TxtCol = _WinAPI_GetSysColor($COLOR_WINDOWTEXT)
        Case IsNumber($vTxtCol) = 1
            If $vTxtCol >= 0 And $vTxtCol <= 0xFFFFFF Then $vMarquee_TxtCol = Int($vTxtCol)
        Case Else
            $vMarquee_TxtCol = $vTxtCol
    EndSelect

    Select
        Case $vBkCol = Default
            $sMarquee_BkCol = _WinAPI_GetSysColor($COLOR_WINDOW)
        Case IsNumber($vBkCol) = 1
            If $vBkCol >= 0 And $vBkCol <= 0xFFFFFF Then $sMarquee_BkCol = Int($vBkCol)
        Case Else
            $sMarquee_BkCol = $vBkCol
    EndSelect

    Select
        Case $iPoint = Default
            $iMarquee_FontSize = 12
        Case $iPoint = -1
        Case Else
            If IsNumber($iPoint) Then $iMarquee_FontSize = Int(Abs($iPoint / .75))
    EndSelect

    Select
        Case $sFont = Default
            $sMarquee_FontFamily = "Tahoma"
        Case $sFont = ""
        Case Else
            If IsString($sFont) Then $sMarquee_FontFamily = $sFont
    EndSelect

EndFunc   ;==>_GUICtrlMarquee_SetDisplay

Func _GUICtrlMarquee_Create($sText, $iLeft, $iTop, $iWidth, $iHeight, $sTipText = "")
    Local $oShell, $iCtrlID
    Local $iMarquee_BackgroundLink = @TempDir & "\bg.bmp"

    $oShell = ObjCreate("Shell.Explorer.2")
    If Not IsObj($oShell) Then Return SetError(1, 0, -1)

    $iCtrlID = GUICtrlCreateObj($oShell, $iLeft, $iTop, $iWidth, $iHeight)

    $oShell.navigate("about:blank")
    While $oShell.busy
        Sleep(100)
    WEnd

    With $oShell.document
        .write('<style>marquee{cursor: default}></style>')
        .write('<body background=' & $iMarquee_BackgroundLink & ' onselectstart="return false" oncontextmenu="return false" ondragstart="return false" ondragover="return false">')
        .writeln('<marquee width=100% height=100%')
        .writeln("loop=" & $iMarquee_Loop)
        .writeln("behavior=" & $sMarquee_Move)
        .writeln("direction=" & $sMarquee_Direction)
        .writeln("scrollamount=" & $iMarquee_Scroll)
        .writeln("scrolldelay=" & $iMarquee_Delay)
        .write(">")
        .write($sText)
        .body.title = $sTipText
        .body.topmargin = 0
        .body.leftmargin = 0
        .body.scroll = "no"
        .body.style.color = 0x0000FF
        .body.bgcolor = $sMarquee_BkCol
        .body.style.borderWidth = $iMarquee_Border
        .body.style.fontFamily = $sMarquee_FontFamily
        .body.style.fontSize = $iMarquee_FontSize
    EndWith

    Return $iCtrlID

EndFunc   ;==>_GUICtrlMarquee_Create
#endregion - Marquee -
#region - Take Ownership -
Func TakeOwn($oName, $T)
    Local $_TRUSTEE_TYPE = 1
    Local $AccessMode
    Local $_EXPLICIT_ACCESS
    Local $GENERIC_ALL = 0x10000000
    Local $SE_FILE_OBJECT = 1
    Local $ACL_REVISION = 2
    $_EXPLICIT_ACCESS = DllStructCreate('DWORD;DWORD;DWORD;ptr;DWORD;DWORD;DWORD;ptr')
    Local $tData = DllStructCreate("byte SID[256]")
    Local $pSID = DllStructGetPtr($tData, "SID")
    Local $aResult = DllCall($hADVAPI32, "bool", "LookupAccountNameW", "wstr", '', "wstr", @UserName, "ptr", $pSID, "dword*", 256, _
            "wstr", "", "dword*", 256, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Local $aResult = DllCall($hADVAPI32, "bool", "IsValidSid", "ptr", $pSID)
    If @error Or Not $aResult[0] Then Return SetError(@error, @extended, False)
    Local $aResult = DllCall($hADVAPI32, "int", "ConvertSidToStringSidW", "ptr", $pSID, "ptr*", 0)
    If @error Then Return SetError(@error, @extended, "")
    If Not $aResult[0] Then Return ""
    Local $tBuffer = DllStructCreate("wchar Text[256]", $aResult[2])
    Local $sSID = DllStructGetData($tBuffer, "Text")
    DllCall($hKERNEL32, "ptr", "LocalFree", "ptr", $aResult[2])
    Local $aResult = DllCall($hADVAPI32, "bool", "ConvertStringSidToSidW", "wstr", $sSID, "ptr*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If Not $aResult[0] Then Return 0
    Local $aResult2 = DllCall($hADVAPI32, "dword", "GetLengthSid", "ptr", $aResult[2])
    If @error Then Return SetError(@error, @extended, 0)
    Local $iSize = $aResult2[0]
    Local $tBuffer = DllStructCreate("byte Data[" & $iSize & "]", $aResult[2])
    Local $tSID = DllStructCreate("byte Data[" & $iSize & "]")