Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 12/12/2024 in all areas

  1. Get system information and Create reports in HTML and CSV format: ;#NoTrayIcon ;Opt("MustDeclareVars", 1) Global $oMyError = ObjEvent("AutoIt.Error", "__PCinfo_ObjErrorFunc") Global Const $cI_CompName = @ComputerName, $sBlankMAC = "00:00:00:00:00:00", $ERR_NO_INFO = "Array contains no information", $ERR_NOT_OBJ = "$colItems isnt an object" Global $isWin64 = False, $softCount = 0, $sAdapterInfo If StringInStr(@OSArch, "64") Then $isWin64 = True Global $Report_SaveDir = @ScriptDir If Not __PCinfo_Singleton("PC_Scan_Info") Then Exit If Not FileExists($Report_SaveDir) Then DirCreate($Report_SaveDir) Global $sHTML_Content, $sFilePath_SaveHTML = $Report_SaveDir & "\" & @ComputerName & "_HTML.htm" Global $sLogs_Content, $sFilePath_SaveLog = $Report_SaveDir & "\" & @ComputerName & "_Csv.log" _Get_PCinformation() Func _Get_PCinformation() ToolTip('System Info Getting...', (@DesktopWidth / 2) - 20, 10) __PCinfo_HTML_AddHeader(@ComputerName & " System Information") Local $error, $extended, $sPC_Info $sPC_Info &= @CRLF Local $__PCinfo_Get_SysOverview = __PCinfo_Get_SysOverview() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_SysOverview') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_SysOverview') EndSwitch Else __Write_PCinfo($__PCinfo_Get_SysOverview, 'System_Overview', @ComputerName & ',System Infomation') EndIf Local $Network_Adapters = __PCinfo_Get_AdaptersInfo() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_AdaptersInfo') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_AdaptersInfo') EndSwitch Else __Write_PCinfo($Network_Adapters, 'Network_Adapters', 'Index,Network_Adapters,Name,Status,IPType,IP,SubNetIP,MAC,GetwayIP,MAC,Speed,DNS1,DNS2,DNS3,DNS4,DNS5,DNS6,DNS7,DNS8,DNS_Num') EndIf $sPC_Info &= @CRLF Local $Drives = __PCinfo_Get_Drives() If @error Then $error = @error $extended = @extended __PCinfo_DebugMsg("DriveGetDrive Error!", '__PCinfo_Get_Drives') Else __Write_PCinfo($Drives, 'Drives', 'Drive,DriveType,DriveStatus,FileSystem,Label,Serial,SpaceFree(GB),SpaceTotal(GB),DriveBusType,MapTo,IsSSD') EndIf $sPC_Info &= @CRLF Local $SystemProduct = __PCinfo_Get_SystemProduct() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_SystemProduct') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_SystemProduct') EndSwitch Else __Write_PCinfo($SystemProduct, 'SystemProduct', 'Name,IdentifyingNumber,SKUNumber,UUID,Description,Vendor,Version') EndIf $sPC_Info &= @CRLF Local $OSs = __PCinfo_Get_OSs() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_OSs') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_OSs') EndSwitch Else __Write_PCinfo($OSs, 'OS', 'Name,BootDevice,BuildNumber,BuildType,Description,CodeSet,CountryCode,CreationClassName,CSCreationClassName,CSDVersion,CSName,CurrentTimeZone,DataExecutionPrevention_32BitApplications,DataExecutionPrevention_Available,DataExecutionPrevention_Drivers,DataExecutionPrevention_SupportPolicy,Debug,Distributed,EncryptionLevel,ForegroundApplicationBoost,FreePhysicalMemory,FreeSpaceInPagingFiles,FreeVirtualMemory,InstALLDate,LargeSystemCache,LastBootUpTime,LocalDateTime,Locale,Manufacturer,MaxNumberOfProcesses,MaxProcessMemorySize,NumberOfLicensedUsers,NumberOfProcesses,NumberOfUsers,Organization,OSLanguage,OSProductSuite,OSType,OtherTypeDescription,PlusProductID,PlusVersionNumber,Primary,ProductType,QuantumLength,QuantumType,RegisteredUser,SerialNumber,ServicePackMajorVersion,ServicePackMinorVersion,SizeStoredInPagingFiles,Status,SuiteMask,SystemDevice,SystemDirectory,SystemDrive,TotalSwapSpaceSize,TotalVirtualMemorySize,TotalVisibleMemorySize,Version,WindowsDirectory') EndIf $sPC_Info &= @CRLF Local $Users = __PCinfo_Get_Users() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Users') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Users') EndSwitch Else __Write_PCinfo($Users, 'Users', 'Name,Domain,Status,LocalAccount,SID,SIDType,Description,FullName,Disabled,Lockout,PasswordChangeable,PasswordExpires,PasswordRequired,AccountType') EndIf $sPC_Info &= @CRLF Local $Groups = __PCinfo_Get_Groups() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Groups') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Groups') EndSwitch Else __Write_PCinfo($Groups, 'Groups', 'Name,Domain,Status,LocalAccount,SID,SIDType,Description') EndIf $sPC_Info &= @CRLF Local $sFilePath_SaveHTMLgedOnUser = __PCinfo_Get_LoggedOnUsers() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_LoggedOnUsers') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_LoggedOnUsers') EndSwitch Else __Write_PCinfo($sFilePath_SaveHTMLgedOnUser, 'Logged Users', 'DomainName,UserName,LogonID') EndIf Local $Desktop = __PCinfo_Get_Desktops() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Desktops') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Desktops') EndSwitch Else __Write_PCinfo($Desktop, 'Desktops', 'Name,BorderWidth,CoolSwitch,CursorBlinkRate,Description,DragFullWindows,GridGranularity,IconSpacing,IconTitleFaceName,IconTitleSize,IconTitleWrap,Pattern,ScreenSaverActive,ScreenSaverExecutable,ScreenSaverSecure,ScreenSaverTimeout,SettingID,WALLpaper,WALLpaperStretched,WALLpaperTiled') EndIf $sPC_Info &= @CRLF Local $Shares = __PCinfo_Get_Shares() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Shares') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Shares') EndSwitch Else __Write_PCinfo($Shares, 'Shares', 'Name,AccessMask,ALLowMaximum,MaximumALLowed,Description,Path,Status,Type') EndIf $sPC_Info &= @CRLF Local $Startup = __PCinfo_Get_Startup() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Startup') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Startup') EndSwitch Else __Write_PCinfo($Startup, 'Startup', 'Name,User,Location,Command,Description,SettingID') EndIf $sPC_Info &= @CRLF Local $System = __PCinfo_Get_System() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_System') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_System') EndSwitch Else __Write_PCinfo($System, 'System', 'Name,AdminPasswordStatus,AutomaticResetBootOption,AutomaticResetCapability,Description,BootOptionOnLimit,BootOptionOnWatchDog,BootROMSupported,BootupState,ChassisBootupState,CreationClassName,CurrentTimeZone,DaylightInEffect,Domain,DomainRole,EnableDaylightSavingsTime,FrontPanelResetStatus,InfraredSupported,InitiALLoadInfo,KeyboardPasswordStatus,LastLoadInfo,Manufacturer,Model,NameFormat,NetworkServerModeEnabled,NumberOfProcessors,OEMLogoBitmap,OEMStringArray,PartOfDomain,PauseAfterReset,PowerManagementCapabilities,PowerManagementSupported,PowerOnPasswordStatus,PowerState,PowerSupplyState,PrimaryOwnerContact,PrimaryOwnerName,ResetCapability,ResetCount,ResetLimit,Roles,Status,SupportContactDescription,SystemStartupDelay,SystemStartupOptions,SystemStartupSetting,SystemType,ThermalState,TotalPhysicalMemory,UserName,WakeUpType,Workgroup') EndIf $sPC_Info &= @CRLF Local $BIOS = __PCinfo_Get_BIOS() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_BIOS') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_BIOS') EndSwitch Else __Write_PCinfo($BIOS, 'BIOS', 'Name,Status,BIOSCharacteristics,BIOSVersion,Description,BuildNumber,CodeSet,CurrentLanguage,IdentificationCode,InstALLableLanguages,LanguageEdition,ListofLanguages,Manufacturer,OtherTargetOS,PrimaryBIOS,ReleaseDate,SerialNumber,SMBIOSBIOSVersion,SMBIOSMajorVersion,SMBIOSMinorVersion,SMBIOSPresent,SoftwareElementID,SoftwareElementState,TargetOperatingSystem,Version') EndIf $sPC_Info &= @CRLF Local $Keyboard = __PCinfo_Get_Keyboard() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Keyboard') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Keyboard') EndSwitch Else __Write_PCinfo($Keyboard, 'Keyboard', 'Name,Availability,ConfigManagerErrorCode,ConfigManagerUserConfig,Description,CreationClassName,DeviceID,ErrorCleared,ErrorDescription,IsLocked,LastErrorCode,Layout,NumberofFunctionKeys,Password,PNPDeviceID,PowerManagementCapabilities,PowerManagementSupported,Status,StatusInfo,SystemCreationClassName,SystemName') EndIf $sPC_Info &= @CRLF Local $Memory = __PCinfo_Get_Memory() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Memory') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Memory') EndSwitch Else __Write_PCinfo($Memory, 'Memory', 'Name,BankLabel,Capacity,CreationClassName,Description,DataWidth,DeviceLocator,FormFactor,HotSwappable,InterleaveDataDepth,InterleavePosition,Manufacturer,MemoryType,Model,OtherIdentifyingInfo,PartNumber,PositionInRow,PoweredOn,Removable,Replaceable,SerialNumber,SKU,Speed,Status,Tag,TotalWidth,TypeDetail,Version') EndIf $sPC_Info &= @CRLF Local $Monitor = __PCinfo_Get_Monitors() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Monitors') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Monitors') EndSwitch Else __Write_PCinfo($Monitor, 'Monitor', 'Name,Availability,Bandwidth,ConfigManagerErrorCode,Description,ConfigManagerUserConfig,CreationClassName,DeviceID,DisplayType,ErrorCleared,ErrorDescription,IsLocked,LastErrorCode,MonitorManufacturer,MonitorType,PixelsPerXLogicalInch,PixelsPerYLogicalInch,PNPDeviceID,PowerManagementCapabilities,PowerManagementSupported,ScreenHeight,ScreenWidth,Status,StatusInfo,SystemCreationClassName,SystemName') EndIf $sPC_Info &= @CRLF Local $Motherboard = __PCinfo_Get_Motherboard() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Motherboard') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Motherboard') EndSwitch Else __Write_PCinfo($Motherboard, 'Motherboard', 'Name,Availability,ConfigManagerErrorCode,ConfigManagerUserConfig,Description,CreationClassName,DeviceID,ErrorCleared,ErrorDescription,LastErrorCode,PNPDeviceID,PowerManagementCapabilities,PowerManagementSupported,PrimaryBusType,RevisionNumber,SecondaryBusType,Status,StatusInfo,SystemCreationClassName,SystemName') EndIf $sPC_Info &= @CRLF Local $Mouse = __PCinfo_Get_Mouse() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Mouse') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Mouse') EndSwitch Else __Write_PCinfo($Mouse, 'Mouse', 'Name,Availability,ConfigManagerErrorCode,ConfigManagerUserConfig,Description,CreationClassName,DeviceID,DeviceInterface,DoubleSpeedThreshold,ErrorCleared,ErrorDescription,Handedness,HardwareType,InfFileName,InfSection,IsLocked,LastErrorCode,Manufacturer,NumberOfButtons,PNPDeviceID,PointingType,PowerManagementCapabilities,PowerManagementSupported,QuadSpeedThreshold,Resolution,SampleRate,Status,StatusInfo,Synch,SystemCreationClassName,SystemName') EndIf $sPC_Info &= @CRLF Local $NetworkCards = __PCinfo_Get_NetworkCards() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_NetworkCards') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_NetworkCards') EndSwitch Else __Write_PCinfo($NetworkCards, 'NetworkCards', 'Name,AdapterType,AdapterTypeID,AutoSense,Description,Availability,ConfigManagerErrorCode,ConfigManagerUserConfig,CreationClassName,DeviceID,ErrorCleared,ErrorDescription,Index,InstALLed,LastErrorCode,MACAddress,Manufacturer,MaxNumberControlled,MaxSpeed,NetConnectionID,NetConnectionStatus,NetworkAddresses,PermanentAddress,PNPDeviceID,PowerManagementCapabilities,PowerManagementSupported,ProductName,ServiceName,Speed,Status,StatusInfo,SystemCreationClassName,SystemName,TimeOfLastReset') EndIf $sPC_Info &= @CRLF Local $Print = __PCinfo_Get_Printers() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Printers') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Printers') EndSwitch Else __Write_PCinfo($Print, 'Print', 'Name,Attributes,Availability,AvailableJobSheets,Description,AveragePagesPerMinute,Capabilities,CapabilityDescriptions,CharSetsSupported,Comment,ConfigManagerErrorCode,ConfigManagerUserConfig,CreationClassName,CurrentCapabilities,CurrentCharSet,CurrentLanguage,CurrentMimeType,CurrentNaturALLanguage,CurrentPaperType,Default,DefaultCapabilities,DefaultCopies,DefaultLanguage,DefaultMimeType,DefaultNumberUp,DefaultPaperType,DefaultPriority,DetectedErrorState,DeviceID,Direct,DoCompleteFirst,DriverName,EnableBIDI,EnableDevQueryPrint,ErrorCleared,ErrorDescription,ErrorInformation,ExtendedDetectedErrorState,ExtendedPrinttatus,Hidden,HorizontalResolution,JobCountSinceLastReset,KeepPrintedJobs,LanguagesSupported,LastErrorCode,Local,Location,MarkingTechnology,MaxCopies,MaxNumberUp,MaxSizeSupported,MimeTypesSupported,NaturALLanguagesSupported,Network,PaperSizesSupported,PaperTypesAvailable,Parameters,PNPDeviceID,PortName,PowerManagementCapabilities,PowerManagementSupported,PrinterPaperNames,Printtate,Printtatus,PrintJobDataType,PrintProcessor,Priority,Published,Queued,RawOnly,SeparatorFile,ServerName,Shared,ShareName,SpoolEnabled,Status,StatusInfo,SystemCreationClassName,SystemName,VerticalResolution,WorkOffline') EndIf $sPC_Info &= @CRLF Local $Processors = __PCinfo_Get_Processors() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Processors') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Processors') EndSwitch Else __Write_PCinfo($Processors, 'Processors', 'Name,AddressWidth,Architecture,Availability,Description,ConfigManagerErrorCode,ConfigManagerUserConfig,CPUStatus,CreationClassName,CurrentClockSpeed,CurrentVoltage,DataWidth,DeviceID,ErrorCleared,ErrorDescription,ExtClock,Family,L2CacheSize,L2CacheSpeed,LastErrorCode,Level,LoadPercentage,Manufacturer,MaxClockSpeed,OtherFamilyDescription,PNPDeviceID,PowerManagementCapabilities,PowerManagementSupported,ProcessorID,ProcessorType,Revision,Role,SocketDesignation,Status,StatusInfo,Stepping,SystemCreationClassName,SystemName,UniqueID,UpgradeMethod,Version,VoltageCaps') EndIf $sPC_Info &= @CRLF Local $SoundCards = __PCinfo_Get_SoundCards() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_SoundCards') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_SoundCards') EndSwitch Else __Write_PCinfo($SoundCards, 'SoundCards', 'Name,Availability,ConfigManagerErrorCode,ConfigManagerUserConfig,Description,CreationClassName,DeviceID,DMABufferSize,ErrorCleared,ErrorDescription,LastErrorCode,Manufacturer,MPU401Address,PNPDeviceID,PowerManagementCapabilities,PowerManagementSupported,ProductName,Status,StatusInfo,SystemCreationClassName,SystemName') EndIf $sPC_Info &= @CRLF Local $VideoCards = __PCinfo_Get_VideoCards() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_VideoCards') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_VideoCards') EndSwitch Else __Write_PCinfo($VideoCards, 'VideoCards', 'Name,AcceleratorCapabilities,AdapterCompatibility,AdapterDACType,Description,AdapterRAM,Availability,CapabilityDescriptions,ColorTableEntries,ConfigManagerErrorCode,ConfigManagerUserConfig,CreationClassName,CurrentBitsPerPixel,CurrentHorizontalResolution,CurrentNumberOfColors,CurrentNumberOfColumns,CurrentNumberOfRows,CurrentRefreshRate,CurrentScanMode,CurrentVerticalResolution,DeviceID,DeviceSpecificPens,DitherType,DriverDate,DriverVersion,ErrorCleared,ErrorDescription,ICMIntent,ICMMethod,InfFilename,InfSection,InstALLedDisplayDrivers,LastErrorCode,MaxMemorySupported,MaxNumberControlled,MaxRefreshRate,MinRefreshRate,Monochrome,NumberOfColorPlanes,NumberOfVideoPages,PNPDeviceID,PowerManagementCapabilities,PowerManagementSupported,ProtocolSupported,ReservedSystemPaletteEntries,SpecificationVersion,Status,StatusInfo,SystemCreationClassName,SystemName,SystemPaletteEntries,TimeOfLastReset,VideoArchitecture,VideoMemoryType,VideoMode,VideoModeDescription,VideoProcessor') EndIf $sPC_Info &= @CRLF Local $Software = __PCinfo_Get_Software() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Software') EndSwitch Else __Write_PCinfo($Software, 'Software', 'DisplayName,DisplayVersion,Publisher,InstALLDate,EstimatedSize,NoElevateOnModify,NoModify,NoRemove,NoRepair,InstALLLocation,UninstALLString') EndIf $sPC_Info &= @CRLF Local $Services = __PCinfo_Get_Services("ALL") If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Services') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Services') EndSwitch Else __Write_PCinfo($Services, 'Services', 'Name,State,Status,AcceptPause,AcceptStop,CheckPoint,CreationClassName,DesktopInteract,DisplayName,ErrorControl,ExitCode,PathName,ProcessId,ServiceSpecificExitCode,ServiceType,Started,StartMode,StartName,SystemCreationClassName,SystemName,TagId,WaitHint,Descriptiont') EndIf $sPC_Info &= @CRLF Local $Battery = __PCinfo_Get_Battery() If @error Then $error = @error $extended = @extended Switch $extended Case 1 __PCinfo_DebugMsg($ERR_NO_INFO, '__PCinfo_Get_Battery') Case 2 __PCinfo_DebugMsg($ERR_NOT_OBJ, '__PCinfo_Get_Battery') EndSwitch Else __Write_PCinfo($Battery, 'Battery', 'Name,Availability,BatteryRechargeTime,BatteryStatus,Description,Chemistry,ConfigManagerErrorCode,ConfigManagerUserConfig,CreationClassName,DesignCapacity,DesignVoltage,DeviceID,ErrorCleared,ErrorDescription,EstimatedChargeRemaining,EstimatedRunTime,ExpectedBatteryLife,ExpectedLife,FullChargeCapacity,LastErrorCode,MaxRechargeTime,PNPDeviceID,PowerManagementCapabilities,PowerManagementSupported,SmartBatteryVersion,Status,StatusInfo,SystemCreationClassName,SystemName,TimeOnBattery,TimeToFullCharge') EndIf __PCinfo_HTML_AddFooter() Global $hO_HTML = FileOpen($sFilePath_SaveHTML, 2 + 8 + 128) FileWrite($hO_HTML, $sHTML_Content) FileClose($hO_HTML) ShellExecute($sFilePath_SaveHTML) Global $hO_Logs = FileOpen($sFilePath_SaveLog, 2 + 8 + 128) FileWrite($hO_Logs, $sLogs_Content) FileClose($hO_Logs) ShellExecute($sFilePath_SaveLog) ToolTip('') Return $sPC_Info EndFunc ;==>_Get_PCinformation Func __Write_PCinfo(ByRef $iArray, $sTitle, $iHeader) __PCinfo_Write_Array2HTML($iArray, $sTitle, $iHeader) __PCinfo_Write_Array2CSVlog($iArray, $sTitle, $iHeader) EndFunc ;==>__Write_PCinfo Func __PCinfo_DebugMsg($message, $time = 0) ConsoleWrite("! Error: " & $message & ' - Time: ' & $time & @CRLF) EndFunc ;==>__PCinfo_DebugMsg Func __PCinfo_Get_Drives($sDriveType = "ALL") Local $cDrive Local $aArray = DriveGetDrive($sDriveType) If @error Then Return Else Dim $aDriveInfo[UBound($aArray)][11] $aDriveInfo[0][0] = $aArray[0] For $i = 1 To $aArray[0] $cDrive = StringUpper($aArray[$i]) $aDriveInfo[$i][0] = $cDrive & '\' $sDriveType = DriveGetType($cDrive) $aDriveInfo[$i][1] = $sDriveType $aDriveInfo[$i][2] = DriveStatus($cDrive) $aDriveInfo[$i][3] = DriveGetFileSystem($cDrive) $aDriveInfo[$i][4] = DriveGetLabel($cDrive) $aDriveInfo[$i][5] = DriveGetSerial($cDrive) $aDriveInfo[$i][6] = Round(DriveSpaceFree($cDrive) / 1024, 2) $aDriveInfo[$i][7] = Round(DriveSpaceTotal($cDrive) / 1024, 2) $aDriveInfo[$i][8] = DriveGetType($cDrive, 3) Switch $sDriveType Case "Network" $aDriveInfo[$i][9] = DriveMapGet($cDrive) $aDriveInfo[$i][8] = 'SMB' Case "Fixed" $aDriveInfo[$i][10] = (StringUpper(DriveGetType($cDrive, 2)) == 'SSD') ? True : False EndSwitch $sDriveType = '' Next Return $aDriveInfo EndIf Return SetError(1, 0, 0) EndFunc ;==>__PCinfo_Get_Drives Func __PCinfo_Get_Desktops() Local $colItems, $objWMIService, $objItem Dim $aDesktopInfo[1][20], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Desktop", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems ReDim $aDesktopInfo[UBound($aDesktopInfo) + 1][20] $aDesktopInfo[$i][0] = $objItem.Name $aDesktopInfo[$i][1] = $objItem.BorderWidth $aDesktopInfo[$i][2] = $objItem.CoolSwitch $aDesktopInfo[$i][3] = $objItem.CursorBlinkRate $aDesktopInfo[$i][4] = $objItem.Description $aDesktopInfo[$i][5] = $objItem.DragFullWindows $aDesktopInfo[$i][6] = $objItem.GridGranularity $aDesktopInfo[$i][7] = $objItem.IconSpacing $aDesktopInfo[$i][8] = $objItem.IconTitleFaceName $aDesktopInfo[$i][9] = $objItem.IconTitleSize $aDesktopInfo[$i][10] = $objItem.IconTitleWrap $aDesktopInfo[$i][11] = $objItem.Pattern $aDesktopInfo[$i][12] = $objItem.ScreenSaverActive $aDesktopInfo[$i][13] = $objItem.ScreenSaverExecutable $aDesktopInfo[$i][14] = $objItem.ScreenSaverSecure $aDesktopInfo[$i][15] = $objItem.ScreenSaverTimeout $aDesktopInfo[$i][16] = $objItem.SettingID $aDesktopInfo[$i][17] = $objItem.WALLpaper $aDesktopInfo[$i][18] = $objItem.WALLpaperStretched $aDesktopInfo[$i][19] = $objItem.WALLpaperTiled $i += 1 Next $aDesktopInfo[0][0] = UBound($aDesktopInfo) - 1 If $aDesktopInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aDesktopInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Desktops Func __PCinfo_Get_Groups() Local $colItems, $objWMIService, $objItem Dim $aGroupInfo[1][7], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Group", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems ReDim $aGroupInfo[UBound($aGroupInfo) + 1][7] $aGroupInfo[$i][0] = $objItem.Name $aGroupInfo[$i][1] = $objItem.Domain $aGroupInfo[$i][2] = $objItem.Status $aGroupInfo[$i][3] = $objItem.LocalAccount $aGroupInfo[$i][4] = $objItem.Description $aGroupInfo[$i][5] = $objItem.SID $aGroupInfo[$i][6] = $objItem.SIDType $i += 1 Next $aGroupInfo[0][0] = UBound($aGroupInfo) - 1 If $aGroupInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aGroupInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Groups Func __PCinfo_Get_LoggedOnUsers() Local $colItems, $objWMIService, $objItem Local $sFilePath_SaveHTMLgedOnUserInfo, $linePattern, $aExpRet Dim $aLoggedOnUserInfo[1][3], $i = 1 $linePattern = '(?i)(?:=")([^"]*)' $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_LoggedOnUser", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems $sFilePath_SaveHTMLgedOnUserInfo &= $objItem.Antecedent $sFilePath_SaveHTMLgedOnUserInfo &= $objItem.Dependent Next $aExpRet = StringRegExp($sFilePath_SaveHTMLgedOnUserInfo, $linePattern, 3) ReDim $aLoggedOnUserInfo[UBound($aExpRet) / 3 + 1][3] Local $j = 0 For $i = 1 To UBound($aLoggedOnUserInfo) - 1 Step 1 $aLoggedOnUserInfo[$i][0] = $aExpRet[$j] $aLoggedOnUserInfo[$i][1] = $aExpRet[$j + 1] $aLoggedOnUserInfo[$i][2] = $aExpRet[$j + 2] $j += 3 Next $aLoggedOnUserInfo[0][0] = UBound($aLoggedOnUserInfo) - 1 If $aLoggedOnUserInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aLoggedOnUserInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_LoggedOnUsers Func __PCinfo_Get_OSs() Local $colItems, $objWMIService, $objItem Dim $aOSInfo[1][60], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", 0x10 + 0x20) 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][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 Return $aOSInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_OSs Func __PCinfo_Get_Services($sState = "ALL") Local $wbemFlagReturnImmediately = 0x10, $wbemFlagForwardOnly = 0x20 Local $colItems, $objWMIService, $objItem Dim $aServicesInfo[1][23], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Service", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) Then For $objItem In $colItems If $sState <> "ALL" Then If $sState = "Stopped" And $objItem.State <> "Stopped" Then ContinueLoop If $sState = "Running" And $objItem.State <> "Running" Then ContinueLoop EndIf ReDim $aServicesInfo[UBound($aServicesInfo) + 1][23] $aServicesInfo[$i][0] = $objItem.Name $aServicesInfo[$i][1] = $objItem.State $aServicesInfo[$i][2] = $objItem.Status $aServicesInfo[$i][3] = $objItem.AcceptPause $aServicesInfo[$i][4] = $objItem.AcceptStop $aServicesInfo[$i][5] = $objItem.CheckPoint $aServicesInfo[$i][6] = $objItem.CreationClassName $aServicesInfo[$i][7] = $objItem.DesktopInteract $aServicesInfo[$i][8] = $objItem.DisplayName $aServicesInfo[$i][9] = $objItem.ErrorControl $aServicesInfo[$i][10] = $objItem.ExitCode $aServicesInfo[$i][11] = $objItem.PathName $aServicesInfo[$i][12] = $objItem.ProcessId $aServicesInfo[$i][13] = $objItem.ServiceSpecificExitCode $aServicesInfo[$i][14] = $objItem.ServiceType $aServicesInfo[$i][15] = $objItem.Started $aServicesInfo[$i][16] = $objItem.StartMode $aServicesInfo[$i][17] = $objItem.StartName $aServicesInfo[$i][18] = $objItem.SystemCreationClassName $aServicesInfo[$i][19] = $objItem.SystemName $aServicesInfo[$i][20] = $objItem.TagId $aServicesInfo[$i][21] = $objItem.WaitHint $aServicesInfo[$i][22] = $objItem.Description $i += 1 Next $aServicesInfo[0][0] = UBound($aServicesInfo) - 1 If $aServicesInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aServicesInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Services Func __PCinfo_Get_Shares() Local $colItems, $objWMIService, $objItem Dim $aShareInfo[1][8], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Share", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems ReDim $aShareInfo[UBound($aShareInfo) + 1][8] $aShareInfo[$i][0] = $objItem.Name $aShareInfo[$i][1] = $objItem.AccessMask $aShareInfo[$i][2] = $objItem.ALLowMaximum $aShareInfo[$i][3] = $objItem.MaximumALLowed $aShareInfo[$i][4] = $objItem.Description $aShareInfo[$i][5] = $objItem.Path $aShareInfo[$i][6] = $objItem.Status $aShareInfo[$i][7] = $objItem.Type $i += 1 Next $aShareInfo[0][0] = UBound($aShareInfo) - 1 If $aShareInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aShareInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Shares Func __PCinfo_Get_Software() Local Const $UnInstKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstALL" Local $i = 1, $SoftName, $Count = 1, $AppKey Dim $aSoftwareInfo[1][11] While 1 $AppKey = RegEnumKey($UnInstKey, $i) If @error <> 0 Then ExitLoop $SoftName = StringStripWS(StringReplace(RegRead($UnInstKey & "\" & $AppKey, "DisplayName"), "(remove only)", ""), 3) $i += 1 If ($SoftName == '') Then ContinueLoop ReDim $aSoftwareInfo[UBound($aSoftwareInfo) + 1][11] $aSoftwareInfo[$Count][0] = $SoftName $aSoftwareInfo[$Count][1] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "DisplayVersion"), 3) $aSoftwareInfo[$Count][2] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "Publisher"), 3) $aSoftwareInfo[$Count][3] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "InstALLDate"), 3) $aSoftwareInfo[$Count][4] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "EstimatedSize"), 3) $aSoftwareInfo[$Count][5] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "NoElevateOnModify"), 3) $aSoftwareInfo[$Count][6] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "NoModify"), 3) $aSoftwareInfo[$Count][7] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "NoRemove"), 3) $aSoftwareInfo[$Count][8] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "NoRepair"), 3) $aSoftwareInfo[$Count][9] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "InstALLLocation"), 3) $aSoftwareInfo[$Count][10] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "UninstALLString"), 3) $Count += 1 $AppKey = '' $SoftName = '' WEnd $aSoftwareInfo[0][0] = UBound($aSoftwareInfo, 1) - 1 If $aSoftwareInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aSoftwareInfo EndFunc ;==>__PCinfo_Get_Software Func __PCinfo_Get_Startup() Local $colItems, $objWMIService, $objItem Dim $aStartupInfo[1][6], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_StartupCommand", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems ReDim $aStartupInfo[UBound($aStartupInfo) + 1][6] $aStartupInfo[$i][0] = $objItem.Name $aStartupInfo[$i][1] = $objItem.User $aStartupInfo[$i][2] = $objItem.Location $aStartupInfo[$i][3] = $objItem.Command $aStartupInfo[$i][4] = $objItem.Description $aStartupInfo[$i][5] = $objItem.SettingID $i += 1 Next $aStartupInfo[0][0] = UBound($aStartupInfo) - 1 If $aStartupInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aStartupInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Startup Func __PCinfo_Get_Users() Local $colItems, $objWMIService, $objItem Dim $aUserInfo[1][14], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems ReDim $aUserInfo[UBound($aUserInfo) + 1][14] $aUserInfo[$i][0] = $objItem.Name $aUserInfo[$i][1] = $objItem.Domain $aUserInfo[$i][2] = $objItem.Status $aUserInfo[$i][3] = $objItem.LocalAccount $aUserInfo[$i][4] = $objItem.Description $aUserInfo[$i][5] = $objItem.SIDType $aUserInfo[$i][6] = $objItem.SID $aUserInfo[$i][7] = $objItem.FullName $aUserInfo[$i][8] = $objItem.Disabled $aUserInfo[$i][9] = $objItem.Lockout $aUserInfo[$i][10] = $objItem.PasswordChangeable $aUserInfo[$i][11] = $objItem.PasswordExpires $aUserInfo[$i][12] = $objItem.PasswordRequired $aUserInfo[$i][13] = $objItem.AccountType $i += 1 Next $aUserInfo[0][0] = UBound($aUserInfo) - 1 If $aUserInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aUserInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Users Func __PCinfo_Get_Battery() Local $colItems, $objWMIService, $objItem Dim $aBatteryInfo[1][31], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Battery", "WQL", 0x10 + 0x20) 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 Return $aBatteryInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Battery Func __PCinfo_Get_BIOS() Local $colItems, $objWMIService, $objItem Dim $aBIOSInfo[1][25], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", 0x10 + 0x20) 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][15] = __StringToDate($objItem.ReleaseDate) $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 Return $aBIOSInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_BIOS Func __PCinfo_Get_Keyboard() Local $colItems, $objWMIService, $objItem Dim $aKeyboardInfo[1][21], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Keyboard", "WQL", 0x10 + 0x20) 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 Return $aKeyboardInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Keyboard Func __PCinfo_Get_Memory() Local $colItems, $objWMIService, $objItem Dim $aMemoryInfo[1][28], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemory", "WQL", 0x10 + 0x20) 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 Return $aMemoryInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Memory Func __PCinfo_Get_Monitors() Local $colItems, $objWMIService, $objItem Dim $aMonitorInfo[1][26], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DesktopMonitor", "WQL", 0x10 + 0x20) 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 Return $aMonitorInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Monitors Func __PCinfo_Get_Motherboard() Local $colItems, $objWMIService, $objItem Dim $aMotherboardInfo[1][20], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_MotherboardDevice", "WQL", 0x10 + 0x20) 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 Return $aMotherboardInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Motherboard Func __PCinfo_Get_Mouse() Local $colItems, $objWMIService, $objItem Dim $aMouseInfo[1][31], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PointingDevice", "WQL", 0x10 + 0x20) 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 Return $aMouseInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Mouse Func __PCinfo_Get_NetworkCards() Local $colItems, $objWMIService, $objItem Dim $aNetworkInfo[1][34], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter", "WQL", 0x10 + 0x20) 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 Return $aNetworkInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_NetworkCards Func __PCinfo_Get_Printers() Local $colItems, $objWMIService, $objItem Dim $aPrinterInfo[1][85], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems ReDim $aPrinterInfo[UBound($aPrinterInfo) + 1][85] $aPrinterInfo[$i][0] = $objItem.Name $aPrinterInfo[$i][1] = $objItem.Attributes $aPrinterInfo[$i][2] = $objItem.Availability $aPrinterInfo[$i][3] = $objItem.AvailableJobSheets(0) $aPrinterInfo[$i][4] = $objItem.Description $aPrinterInfo[$i][5] = $objItem.AveragePagesPerMinute $aPrinterInfo[$i][6] = $objItem.Capabilities(0) $aPrinterInfo[$i][7] = $objItem.CapabilityDescriptions(0) $aPrinterInfo[$i][8] = $objItem.CharSetsSupported(0) $aPrinterInfo[$i][9] = $objItem.Comment $aPrinterInfo[$i][10] = $objItem.ConfigManagerErrorCode $aPrinterInfo[$i][11] = $objItem.ConfigManagerUserConfig $aPrinterInfo[$i][12] = $objItem.CreationClassName $aPrinterInfo[$i][13] = $objItem.CurrentCapabilities(0) $aPrinterInfo[$i][14] = $objItem.CurrentCharSet $aPrinterInfo[$i][15] = $objItem.CurrentLanguage $aPrinterInfo[$i][16] = $objItem.CurrentMimeType $aPrinterInfo[$i][17] = $objItem.CurrentNaturALLanguage $aPrinterInfo[$i][18] = $objItem.CurrentPaperType $aPrinterInfo[$i][19] = $objItem.Default $aPrinterInfo[$i][20] = $objItem.DefaultCapabilities(0) $aPrinterInfo[$i][21] = $objItem.DefaultCopies $aPrinterInfo[$i][22] = $objItem.DefaultLanguage $aPrinterInfo[$i][23] = $objItem.DefaultMimeType $aPrinterInfo[$i][24] = $objItem.DefaultNumberUp $aPrinterInfo[$i][25] = $objItem.DefaultPaperType $aPrinterInfo[$i][26] = $objItem.DefaultPriority $aPrinterInfo[$i][27] = $objItem.DetectedErrorState $aPrinterInfo[$i][28] = $objItem.DeviceID $aPrinterInfo[$i][29] = $objItem.Direct $aPrinterInfo[$i][30] = $objItem.DoCompleteFirst $aPrinterInfo[$i][31] = $objItem.DriverName $aPrinterInfo[$i][32] = $objItem.EnableBIDI $aPrinterInfo[$i][33] = $objItem.EnableDevQueryPrint $aPrinterInfo[$i][34] = $objItem.ErrorCleared $aPrinterInfo[$i][35] = $objItem.ErrorDescription $aPrinterInfo[$i][36] = $objItem.ErrorInformation(0) $aPrinterInfo[$i][37] = $objItem.ExtendedDetectedErrorState $aPrinterInfo[$i][38] = $objItem.ExtendedPrinterStatus $aPrinterInfo[$i][39] = $objItem.Hidden $aPrinterInfo[$i][40] = $objItem.HorizontalResolution $aPrinterInfo[$i][41] = __StringToDate($objItem.InstALLDate) $aPrinterInfo[$i][42] = $objItem.JobCountSinceLastReset $aPrinterInfo[$i][43] = $objItem.KeepPrintedJobs $aPrinterInfo[$i][44] = $objItem.LanguagesSupported(0) $aPrinterInfo[$i][45] = $objItem.LastErrorCode $aPrinterInfo[$i][46] = $objItem.Local $aPrinterInfo[$i][47] = $objItem.Location $aPrinterInfo[$i][48] = $objItem.MarkingTechnology $aPrinterInfo[$i][49] = $objItem.MaxCopies $aPrinterInfo[$i][50] = $objItem.MaxNumberUp $aPrinterInfo[$i][51] = $objItem.MaxSizeSupported $aPrinterInfo[$i][52] = $objItem.MimeTypesSupported(0) $aPrinterInfo[$i][53] = $objItem.NaturALLanguagesSupported(0) $aPrinterInfo[$i][54] = $objItem.Network $aPrinterInfo[$i][55] = $objItem.PaperSizesSupported(0) $aPrinterInfo[$i][56] = $objItem.PaperTypesAvailable(0) $aPrinterInfo[$i][57] = $objItem.Parameters $aPrinterInfo[$i][58] = $objItem.PNPDeviceID $aPrinterInfo[$i][59] = $objItem.PortName $aPrinterInfo[$i][60] = $objItem.PowerManagementCapabilities(0) $aPrinterInfo[$i][61] = $objItem.PowerManagementSupported $aPrinterInfo[$i][62] = $objItem.PrinterPaperNames(0) $aPrinterInfo[$i][63] = $objItem.PrinterState $aPrinterInfo[$i][64] = $objItem.PrinterStatus $aPrinterInfo[$i][65] = $objItem.PrintJobDataType $aPrinterInfo[$i][66] = $objItem.PrintProcessor $aPrinterInfo[$i][67] = $objItem.Priority $aPrinterInfo[$i][68] = $objItem.Published $aPrinterInfo[$i][69] = $objItem.Queued $aPrinterInfo[$i][70] = $objItem.RawOnly $aPrinterInfo[$i][71] = $objItem.SeparatorFile $aPrinterInfo[$i][72] = $objItem.ServerName $aPrinterInfo[$i][73] = $objItem.Shared $aPrinterInfo[$i][74] = $objItem.ShareName $aPrinterInfo[$i][75] = $objItem.SpoolEnabled $aPrinterInfo[$i][76] = __StringToDate($objItem.StartTime) $aPrinterInfo[$i][77] = $objItem.Status $aPrinterInfo[$i][78] = $objItem.StatusInfo $aPrinterInfo[$i][79] = $objItem.SystemCreationClassName $aPrinterInfo[$i][80] = $objItem.SystemName $aPrinterInfo[$i][81] = __StringToDate($objItem.TimeOfLastReset) $aPrinterInfo[$i][82] = __StringToDate($objItem.UntilTime) $aPrinterInfo[$i][83] = $objItem.VerticalResolution $aPrinterInfo[$i][84] = $objItem.WorkOffline $i += 1 Next $aPrinterInfo[0][0] = UBound($aPrinterInfo) - 1 If $aPrinterInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aPrinterInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Printers Func __PCinfo_Get_Processors() Local $colItems, $objWMIService, $objItem Dim $aProcessorInfo[1][42], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", 0x10 + 0x20) 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 Return $aProcessorInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_Processors Func __PCinfo_Get_SoundCards() Local $colItems, $objWMIService, $objItem Dim $aSoundCardInfo[1][21], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_SoundDevice", "WQL", 0x10 + 0x20) 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 Return $aSoundCardInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_SoundCards Func __PCinfo_Get_System() Local $colItems, $objWMIService, $objItem Dim $aSystemInfo[1][52], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", 0x10 + 0x20) 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 Return $aSystemInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_System Func __PCinfo_Get_SystemProduct() Local $colItems, $objWMIService, $objItem Dim $aSysProductInfo[1][7], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems ReDim $aSysProductInfo[UBound($aSysProductInfo) + 1][7] $aSysProductInfo[$i][0] = $objItem.Name $aSysProductInfo[$i][1] = $objItem.IdentifyingNumber $aSysProductInfo[$i][2] = $objItem.SKUNumber $aSysProductInfo[$i][3] = $objItem.UUID $aSysProductInfo[$i][4] = $objItem.Description $aSysProductInfo[$i][5] = $objItem.Vendor $aSysProductInfo[$i][6] = $objItem.Version $i += 1 Next $aSysProductInfo[0][0] = UBound($aSysProductInfo) - 1 If $aSysProductInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Return $aSysProductInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_SystemProduct Func __PCinfo_Get_VideoCards() Local $colItems, $objWMIService, $objItem Dim $aVideoInfo[1][59], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_VideoController", "WQL", 0x10 + 0x20) 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 Return $aVideoInfo Else SetError(1, 2, 0) EndIf EndFunc ;==>__PCinfo_Get_VideoCards Func __StringToDate($dtmDate) Return (StringMid($dtmDate, 5, 2) & "/" & StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2)) EndFunc ;==>__StringToDate Func __PCinfo_Write_Array2HTML($iArray, $sTitle = '', $TableHeader = '') Local $varRowColorValue, $xDim = UBound($iArray, 1) - 1 Local $yDim = UBound($iArray, 2) - 1 $sHTML_Content &= "<div class=""container""><h3><a href='#" & StringReplace($sTitle, " ", "_") & "' data-toggle='collapse'>" & $sTitle & "</a></h3>" & @CRLF $sHTML_Content &= "<div id='" & StringReplace($sTitle, " ", "_") & "' class='collapse'><table border='0'>" & @CRLF If ($TableHeader <> "") And ($TableHeader <> Default) Then If StringInStr($TableHeader, ',') Then Local $aHeader = StringSplit($TableHeader, ',', 1) If IsArray($aHeader) Then $sHTML_Content &= '<tr bgcolor="#C4E1FF">' & @CRLF For $h = 1 To $aHeader[0] If ($h == 1) Then $sHTML_Content &= "<td><center>" & $aHeader[$h] & "</center></td>" & @CRLF Else $sHTML_Content &= "<td>" & $aHeader[$h] & "</td>" & @CRLF EndIf Next $sHTML_Content &= "</tr>" & @CRLF EndIf EndIf EndIf Local $varRowColor = 0 For $x = 0 To $xDim If $varRowColor = 0 Then $varRowColor = 1 $varRowColorValue = "#9BCDFF" Else $varRowColor = 0 $varRowColorValue = "#C4E1FF" EndIf $sHTML_Content &= "<tr bgcolor='" & $varRowColorValue & "'>" & @CRLF For $y = 0 To $yDim If ($y == 0) Then $sHTML_Content &= "<td><center>" & StringReplace($iArray[$x][$y], '|', @CRLF) & "</center></td>" & @CRLF Else $sHTML_Content &= "<td>" & StringReplace($iArray[$x][$y], '|', @CRLF) & "</td>" & @CRLF EndIf Next $sHTML_Content &= "</tr>" & @CRLF Next $sHTML_Content &= "</table></div></div></br>" & @CRLF & @CRLF EndFunc ;==>__PCinfo_Write_Array2HTML Func __PCinfo_Write_Array2CSVlog($iArray, $sTitle = '', $LogHeader = '') Local $xDim = UBound($iArray, 1) - 1 Local $yDim = UBound($iArray, 2) - 1 $sLogs_Content &= @CRLF & '# ' & $sTitle & ' :---------------------------------------------\' & @CRLF If ($LogHeader <> "") And ($LogHeader <> Default) Then $sLogs_Content &= $LogHeader & @CRLF For $x = 0 To $xDim For $y = 0 To $yDim If (StringStripWS($iArray[$x][$y], 8) == '') Then ContinueLoop $sLogs_Content &= '"' & $iArray[$x][$y] & '"' If $y < $yDim Then $sLogs_Content &= "," Else $sLogs_Content &= @CRLF EndIf Next Next $sLogs_Content &= @CRLF & '# ' & $sTitle & ' :---------------------------------------------/' & @CRLF & @CRLF EndFunc ;==>__PCinfo_Write_Array2CSVlog Func __PCinfo_HTML_AddHeader($sTitle = @ComputerName & " System Info") $sHTML_Content &= '<html>' & @CRLF $sHTML_Content &= '<head><meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" /><title>' & $sTitle & '</title>' & @CRLF $sHTML_Content &= '<!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">' & @CRLF $sHTML_Content &= '<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>' & @CRLF $sHTML_Content &= '<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>' & @CRLF $sHTML_Content &= '<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>-->' & @CRLF $sHTML_Content &= '</head>' & @CRLF $sHTML_Content &= "<body><title>" & $sTitle & "</title>" & @CRLF & "<div class=""jumbotron jumbotron-fluid""><div class=""container""><center><h1>" & $sTitle & "</h1></div></div>" & "<div class=""container"">Scan Initiated: " & @MON & "/" & @MDAY & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & "</br></br></br></div>" & @CRLF EndFunc ;==>__PCinfo_HTML_AddHeader Func __PCinfo_HTML_AddFooter() $sHTML_Content &= "</div></br><div class=""container"">Scan Complete: " & @MON & "/" & @MDAY & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & "</div>" & @CRLF $sHTML_Content &= '</body></html>' & @CRLF EndFunc ;==>__PCinfo_HTML_AddFooter Func __PCinfo_Get_SysOverview() Dim $aWin_Info[13][2] $aWin_Info[0][0] = 12 $aWin_Info[1][0] = '' & 'ComputerName' $aWin_Info[1][1] = '' & @ComputerName $aWin_Info[2][0] = 'UserName' $aWin_Info[2][1] = @UserName Local $_winver = FileGetVersion(@SystemDir & "\ntoskrnl.exe") If @error Then $_winver = FileGetVersion(@SystemDir & "\winver.exe") If $isWin64 Then $aWin_Info[3][0] = '' & 'ProductName' $aWin_Info[3][1] = RegRead('HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName') & ' ' & RegRead('HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'DisplayVersion') & ' ' & $_winver & ' ' & @CPUArch & ((@OSServicePack <> '') ? ' ' & @OSServicePack : '') Else $aWin_Info[3][0] = '' & 'ProductName' $aWin_Info[3][1] = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName') & ' ' & RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'DisplayVersion') & ' ' & $_winver & ' ' & @CPUArch & ((@OSServicePack <> '') ? ' ' & @OSServicePack : '') EndIf Local $cpu_ProcessorName = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0', "ProcessorNameString") Local $cpu_Identifier = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0', "Identifier") If $cpu_ProcessorName = '' Then $cpu_ProcessorName = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\1', "ProcessorNameString") If $cpu_Identifier = '' Then $cpu_Identifier = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\1', "Identifier") Local $main_Manufacturer = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS', "BaseBoardManufacturer") If $main_Manufacturer <> '' Then $main_Manufacturer = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS', "BIOSVendor") If $main_Manufacturer <> '' Then $main_Manufacturer = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS', "SystemManufacturer") Local $main_Family = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS', "SystemFamily") If $main_Family = '' Then $main_Family = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS', "SystemVersion") Local $main_ProductName = RegRead('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS', "SystemProductName") If $cpu_ProcessorName <> '' Then If $cpu_Identifier <> '' Then $aWin_Info[4][0] = '' & 'ProcessorName' $aWin_Info[4][1] = '' & $cpu_ProcessorName & ' / ' & $cpu_Identifier Else $aWin_Info[4][0] = '' & 'ProcessorName' $aWin_Info[4][1] = '' & $cpu_ProcessorName EndIf EndIf Local $aMemStats = MemGetStats() If IsArray($aMemStats) Then If UBound($aMemStats) = 7 Then $aWin_Info[5][0] = '' & 'RAM' $aWin_Info[5][1] = 'Physical: ' & Round($aMemStats[1] / 1024 / 1024, 2) & ' GB (Free: ' & Round($aMemStats[2] / 1024 / 1024, 2) & ' GB) / Page Size: ' & Round($aMemStats[3] / 1024 / 1024, 2) & ' GB (Free: ' & Round($aMemStats[4] / 1024 / 1024, 2) & ' GB)' EndIf EndIf Local $sManufacturer If $main_Manufacturer <> '' Then If $main_Family <> '' Then $sManufacturer &= '' & $main_Manufacturer & ' / ' & $main_Family EndIf If $main_ProductName <> '' Then $sManufacturer &= '' & $main_Manufacturer & ' / ' & $main_Family & ' / ' & $main_ProductName EndIf $aWin_Info[6][0] = '' & 'Manufacturer' $aWin_Info[6][1] = $sManufacturer EndIf Local $tzinfo = __PCinfo_dtGetTimeZoneInformation() If IsArray($tzinfo) Then If $tzinfo[2] <> '' Then $aWin_Info[7][0] = 'TimeZone' $aWin_Info[7][1] = '' & $tzinfo[2] EndIf EndIf $aWin_Info[8][0] = '' & 'OS' $aWin_Info[8][1] = 'OSVersion: ' & @OSVersion & ' / OSArch: ' & @OSArch & ' / OSLang: ' & @OSLang & ' / OSType: ' & @OSType & ' / OSBuild: ' & @OSBuild & ' / MUILang: ' & @MUILang & ' / Keyboard Layout: ' & @KBLayout $aWin_Info[9][0] = '' & 'Desktop' $aWin_Info[9][1] = 'Width x Height: ' & @DesktopWidth & ' x ' & @DesktopHeight & ' / ColorDepth: ' & @DesktopDepth & ' / Refresh: ' & @DesktopRefresh $aWin_Info[10][0] = '' & 'Environment [Path]' $aWin_Info[10][1] = '' & EnvGet("Path") $aWin_Info[11][0] = '' & 'Home' $aWin_Info[11][1] = '[HomeDrive: ' & @HomeDrive & '] [HomePath: ' & @HomePath & '] [HomeShare: ' & @HomeShare & ']' $aWin_Info[12][0] = '' & 'Logon' $aWin_Info[12][1] = '[Domain: ' & @LogonDomain & '] [Server: ' & @LogonServer & '] [DNS: ' & @LogonDNSDomain & ']' Return $aWin_Info EndFunc ;==>__PCinfo_Get_SysOverview Func __PCinfo_StringStripCRWS($String, $removeSpace = 0) $String = StringStripCR($String) $String = StringStripWS($String, 7) $String = StringReplace($String, @LF, ' ') $String = StringReplace($String, @CRLF, ' ') $String = StringReplace($String, @CR, ' ') While StringInStr($String, ' ' & ' ') $String = StringReplace($String, ' ' & ' ', ' ') WEnd If $removeSpace > 0 Then Return StringStripWS($String, 8) If StringStripWS($String, 8) == '' Then Return '' Return $String EndFunc ;==>__PCinfo_StringStripCRWS Func __PCinfo_Get_AdaptersInfo($sComputer = ".") Local $Cols = 20, $strIndex, $objVAR, $objVARx, $zAdapter, $zAdapterName, $zSpeed, $zIndex, $zInterfaceIndex, $zGetIPType, $zAdapterStatus, $zIP, $zMAC, $zSubNetIP, $zGetwayIP, $zGetwayMAC Local $aReturn[1][$Cols] = [[0, $Cols]] If $sComputer = Default Then $sComputer = @ComputerName Local $sListIndexInterfaceName = __PCinfo_Get_ListIndexInterfaceName() Local $objwmi = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2") Local $objWQLx = $objwmi.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID != NULL", "WQL", 0x30) If Not @error And IsObj($objWQLx) Then For $objVARx In $objWQLx $zAdapterName = $objVARx.NetConnectionID If (__PCinfo_StringStripCRWS($zAdapterName) = "") Then ContinueLoop $zSpeed = __PCinfo_ByteSuffixRound($objVARx.Speed) If Int($zSpeed) <= 0 Then For $z = 0 To UBound($sListIndexInterfaceName) - 1 If $sListIndexInterfaceName[$z][1] = $zAdapterName Then $zSpeed = __PCinfo_ByteSuffixRound(__PCinfo_Get_InterfaceIndexSpeed($sListIndexInterfaceName[$z][0])) Next EndIf $zAdapterStatus = $objVARx.NetConnectionStatus Switch $zAdapterStatus Case 0, 3 $zAdapterStatus = "Disable" Case 1, 2 $zAdapterStatus = "Connected" Case $zAdapterStatus = 7 $zAdapterStatus = "unPlugged" Case Else $zAdapterStatus = "N/A" EndSwitch $strIndex = $objVARx.Index Local $objWQL = $objwmi.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration WHERE Index=' & $strIndex, "WQL", 0x30) If Not @error And IsObj($objWQL) Then For $objVAR In $objWQL $zAdapter = $objVAR.Description $aReturn[0][0] += 1 $zIndex = $aReturn[0][0] ReDim $aReturn[$zIndex * 2][$aReturn[0][1]] $zInterfaceIndex = $objVAR.InterfaceIndex If Int($zInterfaceIndex) <= 0 Then For $z = 0 To UBound($sListIndexInterfaceName) - 1 If $sListIndexInterfaceName[$z][1] = $zAdapterName Then $zInterfaceIndex = $sListIndexInterfaceName[$z][0] Next EndIf $aReturn[$zIndex][0] = $zInterfaceIndex $aReturn[$zIndex][1] = $zAdapter $aReturn[$zIndex][2] = $zAdapterName $aReturn[$zIndex][3] = $zAdapterStatus $zGetIPType = $objVAR.DHCPEnabled If $zGetIPType Then $zGetIPType = "DHCP" Else $zGetIPType = "StaticIP" EndIf $aReturn[$zIndex][4] = $zGetIPType $zIP = $objVAR.IPAddress(0) If __PCinfo_StringStripCRWS($zIP) = "" Then $zIP = "N/A" $aReturn[$zIndex][5] = $zIP $zSubNetIP = $objVAR.IPSubnet(0) If __PCinfo_StringStripCRWS($zSubNetIP) = "" Then $zSubNetIP = "N/A" $aReturn[$zIndex][6] = $zSubNetIP $zMAC = $objVAR.MACAddress If __PCinfo_StringStripCRWS($zMAC) = "" Then $zMAC = "N/A" $aReturn[$zIndex][7] = $zMAC $zGetwayIP = $objVAR.DefaultIPGateway(0) If __PCinfo_StringStripCRWS($zGetwayIP) = "" Then $zGetwayIP = "N/A" $aReturn[$zIndex][8] = $zGetwayIP $zGetwayMAC = "N/A" If __PCinfo_StringStripCRWS($zGetwayIP) <> "N/A" Then $zGetwayMAC = __PCinfo_Get_MACFromIP($zGetwayIP) $aReturn[$zIndex][9] = $zGetwayMAC If Number($zSpeed) = 0 Then $zSpeed = "N/A" $aReturn[$zIndex][10] = $zSpeed $aReturn[$zIndex][11] = "N/A" $aReturn[$zIndex][12] = "N/A" $aReturn[$zIndex][13] = "N/A" $aReturn[$zIndex][14] = "N/A" $aReturn[$zIndex][15] = "N/A" $aReturn[$zIndex][16] = "N/A" $aReturn[$zIndex][17] = "N/A" $aReturn[$zIndex][18] = "N/A" Local $zDNS = $objVAR.DNSServerSearchOrder() Local $dnsCount = UBound($zDNS) $aReturn[$zIndex][19] = $dnsCount If IsArray($zDNS) Then Switch $dnsCount Case 1 $aReturn[$zIndex][11] = $zDNS[0] Case 2 $aReturn[$zIndex][11] = $zDNS[0] $aReturn[$zIndex][12] = $zDNS[1] Case 3 $aReturn[$zIndex][11] = $zDNS[0] $aReturn[$zIndex][12] = $zDNS[1] $aReturn[$zIndex][13] = $zDNS[2] Case 4 $aReturn[$zIndex][11] = $zDNS[0] $aReturn[$zIndex][12] = $zDNS[1] $aReturn[$zIndex][13] = $zDNS[2] $aReturn[$zIndex][14] = $zDNS[3] Case 5 $aReturn[$zIndex][11] = $zDNS[0] $aReturn[$zIndex][12] = $zDNS[1] $aReturn[$zIndex][13] = $zDNS[2] $aReturn[$zIndex][14] = $zDNS[3] $aReturn[$zIndex][15] = $zDNS[4] Case 6 $aReturn[$zIndex][11] = $zDNS[0] $aReturn[$zIndex][12] = $zDNS[1] $aReturn[$zIndex][13] = $zDNS[2] $aReturn[$zIndex][14] = $zDNS[3] $aReturn[$zIndex][15] = $zDNS[4] $aReturn[$zIndex][16] = $zDNS[5] Case 7 $aReturn[$zIndex][11] = $zDNS[0] $aReturn[$zIndex][12] = $zDNS[1] $aReturn[$zIndex][13] = $zDNS[2] $aReturn[$zIndex][14] = $zDNS[3] $aReturn[$zIndex][15] = $zDNS[4] $aReturn[$zIndex][16] = $zDNS[5] $aReturn[$zIndex][17] = $zDNS[6] Case 8 $aReturn[$zIndex][11] = $zDNS[0] $aReturn[$zIndex][12] = $zDNS[1] $aReturn[$zIndex][13] = $zDNS[2] $aReturn[$zIndex][14] = $zDNS[3] $aReturn[$zIndex][15] = $zDNS[4] $aReturn[$zIndex][16] = $zDNS[5] $aReturn[$zIndex][17] = $zDNS[6] $aReturn[$zIndex][18] = $zDNS[7] Case Else $aReturn[$zIndex][11] = $zDNS[0] EndSwitch EndIf Next EndIf Next Return $aReturn EndIf Return SetError(1, 0, "") EndFunc ;==>__PCinfo_Get_AdaptersInfo Func __PCinfo_Get_ListIndexInterfaceName() Local Const $tagIP_ADAPTER_ADDRESSES = "ulong Length;dword IfIndex;ptr Next;ptr AdapterName;ptr FirstUnicastAddress;" & "ptr FirstAnycastAddress;ptr FirstMulticastAddress;ptr FirstDnsServerAddress;ptr DnsSuffix;ptr Description;" & "ptr FriendlyName;byte PhysicalAddress[8];dword PhysicalAddressLength;dword Flags;dword Mtu;dword IfType;int OperStatus;" & "dword Ipv6IfIndex;dword ZoneIndices[16];ptr FirstPrefix;" & "uint64 TransmitLinkSpeed;uint64 ReceiveLinkSpeed;ptr FirstWinsServerAddress;ptr FirstGatewayAddress;" & "ulong Ipv4Metric;ulong Ipv6Metric;uint64 Luid;STRUCT;ptr Dhcpv4ServerSockAddr;int Dhcpv4ServerSockAddrLen;ENDSTRUCT;" & "ulong CompartmentId;STRUCT;ulong NetworkGuidData1;word NetworkGuidData2;word NetworkGuidData3;byte NetworkGuidData4[8];ENDSTRUCT;" & "int ConnectionType;int TunnelType;STRUCT;ptr Dhcpv6ServerSockAddr;int Dhcpv6ServerSockAddrLen;ENDSTRUCT;byte Dhcpv6ClientDuid[130];" & "ulong Dhcpv6ClientDuidLength;ulong Dhcpv6Iaid;ptr FirstDnsSuffix;" Local $aret, $nBufSize, $stBuffer, $stIP_ADAPTER_ADDRESSES, $pIPAAStruct, $nIPAAStSize Local $pTemp, $nTemp, $nEntries, $aIndexEntries $aret = DllCall("iphlpapi.dll", "ulong", "GetAdaptersAddresses", "ulong", 0, "ulong", 0x86, "ptr", 0, "ptr", 0, "ulong*", 0) If @error Then Return SetError(1, @error, "") If $aret[0] Then If $aret[0] <> 111 Or Not $aret[5] Then Return SetError(2, $aret[0], "") EndIf $nBufSize = $aret[5] $stBuffer = DllStructCreate("int64;byte [" & $nBufSize & "];") $aret = DllCall("iphlpapi.dll", "ulong", "GetAdaptersAddresses", "ulong", 0, "ulong", 0x86, "ptr", 0, "ptr", DllStructGetPtr($stBuffer), "ulong*", $nBufSize) If @error Then Return SetError(1, @error, "") If $aret[0] Then Return SetError(2, $aret[0], "") Dim $aIndexEntries[Floor($nBufSize / 72)][2] $nEntries = 0 $pIPAAStruct = DllStructGetPtr($stBuffer) While $pIPAAStruct <> 0 $stIP_ADAPTER_ADDRESSES = DllStructCreate($tagIP_ADAPTER_ADDRESSES, $pIPAAStruct) $nIPAAStSize = DllStructGetData($stIP_ADAPTER_ADDRESSES, "Length") $nTemp = DllStructGetData($stIP_ADAPTER_ADDRESSES, "OperStatus") If ($nTemp = 2 And Not False) Or DllStructGetData($stIP_ADAPTER_ADDRESSES, "IfType") = 24 Then Else $pTemp = DllStructGetData($stIP_ADAPTER_ADDRESSES, "FirstUnicastAddress") If $pTemp <> 0 Then $aIndexEntries[$nEntries][0] = DllStructGetData($stIP_ADAPTER_ADDRESSES, "IfIndex") $aIndexEntries[$nEntries][1] = __PCinfo_Get_StringWFromPtr(DllStructGetData($stIP_ADAPTER_ADDRESSES, "FriendlyName")) $nEntries += 1 EndIf EndIf $pIPAAStruct = DllStructGetData($stIP_ADAPTER_ADDRESSES, "Next") WEnd If $nEntries = 0 Then Return SetError(-1, 0, "") ReDim $aIndexEntries[$nEntries][2] Return SetExtended($nEntries, $aIndexEntries) EndFunc ;==>__PCinfo_Get_ListIndexInterfaceName Func __PCinfo_Get_InterfaceIndexSpeed($IfIndex) Local $tBuffer, $pBuffer, $iResult, $iSpeed $tBuffer = DllStructCreate("wchar[256];dword[5];byte[8];dword[16];char[256]") $pBuffer = DllStructGetPtr($tBuffer) DllStructSetData($tBuffer, 2, $IfIndex, 1) $iResult = DllCall("iphlpapi.dll", "long", "GetIfEntry", "ptr", $pBuffer) If @error Then Return SetError(@error, @extended, 0) $iSpeed = DllStructGetData($tBuffer, 2, 4) $tBuffer = 0 Return SetError($iResult[0], $iSpeed / 1000 / 1000, $iSpeed) EndFunc ;==>__PCinfo_Get_InterfaceIndexSpeed Func __PCinfo_Get_StringWFromPtr($pStr) If Not IsPtr($pStr) Or $pStr = 0 Then Return SetError(1, 0, "") Local $aret = DllCall("kernel32.dll", "ptr", "lstrcpynW", "wstr", "", "ptr", $pStr, "int", 32767) If @error Or Not $aret[0] Then Return SetError(@error, 0, "") Return $aret[1] EndFunc ;==>__PCinfo_Get_StringWFromPtr Func __PCinfo_Get_MACFromIP($rMAC) If ($rMAC = "") Or ($rMAC = "N/A") Then Return "N/A" Local $sbMAC = DllStructCreate("byte[6]") Local $siMAC = DllStructCreate("int") DllStructSetData($siMAC, 1, 6) Local $rHexMAC = DllCall("Ws2_32.dll", "int", "inet_addr", "str", $rMAC) $rMAC = $rHexMAC[0] $rHexMAC = DllCall("iphlpapi.dll", "int", "SendARP", "int", $rMAC, "int", 0, "ptr", DllStructGetPtr($sbMAC), "ptr", DllStructGetPtr($siMAC)) $rMAC = "" For $i = 0 To 5 If $i Then $rMAC &= ":" $rMAC = $rMAC & Hex(DllStructGetData($sbMAC, 1, $i + 1), 2) Next If ($rMAC = "") Or ($rMAC = $sBlankMAC) Or ($rMAC = "N/A") Then Return "N/A" Return $rMAC EndFunc ;==>__PCinfo_Get_MACFromIP Func __PCinfo_ByteSuffixRound($iBytes, $iRound = 2) $iBytes = Number($iBytes) If $iBytes > 1000000000 Then Return "N/A" Local $a, $aArray[5] = ["Bps", "Kbps", "Mbps", "Gbps", "Tbps"] While $iBytes > 999 $a += 1 If $a > 3 Then ExitLoop $iBytes /= 1000 WEnd Return Round($iBytes, $iRound) & " " & $aArray[$a] EndFunc ;==>__PCinfo_ByteSuffixRound Func __PCinfo_Singleton($sOccurrenceName, $iFlag = 0) Local Const $ERROR_ALREADY_EXISTS = 183 Local Const $SECURITY_DESCRIPTOR_REVISION = 1 Local $tSecurityAttributes = 0 If BitAND($iFlag, 2) Then Local $tSecurityDescriptor = DllStructCreate("byte;byte;word;ptr[4]") Local $aCALL = DllCall("advapi32.dll", "bool", "InitializeSecurityDescriptor", "struct*", $tSecurityDescriptor, "dword", $SECURITY_DESCRIPTOR_REVISION) If @error Then Return SetError(@error, @extended, 0) If $aCALL[0] Then $aCALL = DllCall("advapi32.dll", "bool", "SetSecurityDescriptorDacl", "struct*", $tSecurityDescriptor, "bool", 1, "ptr", 0, "bool", 0) If @error Then Return SetError(@error, @extended, 0) If $aCALL[0] Then $tSecurityAttributes = DllStructCreate("dword Length;ptr Descriptor;bool InheritHandle") DllStructSetData($tSecurityAttributes, 1, DllStructGetSize($tSecurityAttributes)) DllStructSetData($tSecurityAttributes, 2, DllStructGetPtr($tSecurityDescriptor)) DllStructSetData($tSecurityAttributes, 3, 0) EndIf EndIf EndIf Local $aHandle = DllCall("kernel32.dll", "handle", "CreateMutexW", "struct*", $tSecurityAttributes, "bool", 1, "wstr", $sOccurrenceName) If @error Then Return SetError(@error, @extended, 0) Local $aLastError = DllCall("kernel32.dll", "dword", "GetLastError") If @error Then Return SetError(@error, @extended, 0) If $aLastError[0] = $ERROR_ALREADY_EXISTS Then If BitAND($iFlag, 1) Then DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $aHandle[0]) If @error Then Return SetError(@error, @extended, 0) Return SetError($aLastError[0], $aLastError[0], 0) Else Exit -1 EndIf EndIf Return $aHandle[0] EndFunc ;==>__PCinfo_Singleton Func __PCinfo_dtCloneSystemTime($pSystemTime) Local $tagSYSTEMTIME = "struct;word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds;endstruct" Local $tSystemTime1 = DllStructCreate($tagSYSTEMTIME, $pSystemTime) Local $tSystemTime2 = DllStructCreate($tagSYSTEMTIME) DllStructSetData($tSystemTime2, "Month", DllStructGetData($tSystemTime1, "Month")) DllStructSetData($tSystemTime2, "Day", DllStructGetData($tSystemTime1, "Day")) DllStructSetData($tSystemTime2, "Year", DllStructGetData($tSystemTime1, "Year")) DllStructSetData($tSystemTime2, "Hour", DllStructGetData($tSystemTime1, "Hour")) DllStructSetData($tSystemTime2, "Minute", DllStructGetData($tSystemTime1, "Minute")) DllStructSetData($tSystemTime2, "Second", DllStructGetData($tSystemTime1, "Second")) DllStructSetData($tSystemTime2, "MSeconds", DllStructGetData($tSystemTime1, "MSeconds")) DllStructSetData($tSystemTime2, "DOW", DllStructGetData($tSystemTime1, "DOW")) Return $tSystemTime2 EndFunc ;==>__PCinfo_dtCloneSystemTime Func __PCinfo_dtGetTimeZoneInformation() Local $tagTIME_ZONE_INFORMATION = "struct;long Bias;wchar StdName[32];word StdDate[8];long StdBias;wchar DayName[32];word DayDate[8];long DayBias;endstruct" Local $tTimeZone = DllStructCreate($tagTIME_ZONE_INFORMATION) Local $aCALL = DllCall("kernel32.dll", "dword", "GetTimeZoneInformation", "struct*", $tTimeZone) If @error Then Return SetError(@error, @extended, 0) If $aCALL[0] = -1 Then Return SetError(10, 0, 0) Local $aInfo[8] $aInfo[0] = $aCALL[0] $aInfo[1] = DllStructGetData($tTimeZone, "Bias") $aInfo[2] = DllStructGetData($tTimeZone, "StdName") $aInfo[3] = __PCinfo_dtCloneSystemTime(DllStructGetPtr($tTimeZone, "StdDate")) $aInfo[4] = DllStructGetData($tTimeZone, "StdBias") $aInfo[5] = DllStructGetData($tTimeZone, "DayName") $aInfo[6] = __PCinfo_dtCloneSystemTime(DllStructGetPtr($tTimeZone, "DayDate")) $aInfo[7] = DllStructGetData($tTimeZone, "DayBias") Return $aInfo EndFunc ;==>__PCinfo_dtGetTimeZoneInformation Func __PCinfo_ObjErrorFunc() ConsoleWrite("! AutoItCOM Test - We intercepted a COM Error !" & @CRLF & @CRLF & "! Error.description is: " & @TAB & $oMyError.description & @CRLF & "! Error.windescription:" & @TAB & $oMyError.windescription & @CRLF & "! Error.number is: " & @TAB & Hex($oMyError.number, 8) & @CRLF & "! Error.lastdllError is: " & @TAB & $oMyError.lastdllError & @CRLF & "! Error.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & "! Error.source is: " & @TAB & $oMyError.source & @CRLF & "! Error.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & "! Error.helpcontext is: " & @TAB & $oMyError.helpcontext & @CRLF & @CRLF) EndFunc ;==>__PCinfo_ObjErrorFunc #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=iCon.ico #AutoIt3Wrapper_Compile_Both=y #AutoIt3Wrapper_UseX64=y #AutoIt3Wrapper_Res_Comment=Dao Van Trong - TRONG.PRO #AutoIt3Wrapper_Res_Description=Get PC Information by Dao Van Trong - TRONG.PRO #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_ProductName=Get PC Information #AutoIt3Wrapper_Res_ProductVersion=1.0.0.0 #AutoIt3Wrapper_Res_CompanyName=TRONG.PRO #AutoIt3Wrapper_Res_LegalCopyright=Dao Van Trong - TRONG.PRO #AutoIt3Wrapper_Res_LegalTradeMarks=Dao Van Trong - TRONG.PRO #AutoIt3Wrapper_Res_SaveSource=y #AutoIt3Wrapper_Res_Language=1066 #AutoIt3Wrapper_Res_requestedExecutionLevel=highestAvailable #AutoIt3Wrapper_Add_Constants=n #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    1 point
  2. Ok that all made me curious. I tested my own version of it : #RequireAdmin ; needed to access services ; elevated - another process #include <WinAPIProc.au3> #include <ProcessConstants.au3> #include <Constants.au3> #include <Array.au3> Example() Func Example() ConsoleWrite("Start : " & _WinAPI_GetProcessHandleCount() & @CRLF) Local $aList = ProcessList(), $t1, $t2, $iCount = _WinAPI_GetProcessHandleCount() For $i = 3 To $aList[0][0] $t1 = IsProcessElevated($aList[$i][1]) If @error Then ConsoleWrite("error c " & $aList[$i][0] & "/" & @error & @CRLF) If $iCount <> _WinAPI_GetProcessHandleCount() Then $iCount = _WinAPI_GetProcessHandleCount() ConsoleWrite($iCount & "/" & $aList[$i][0] & "/" & $aList[$i][1] & @CRLF) EndIf Next ConsoleWrite("End : " & _WinAPI_GetProcessHandleCount() & @CRLF) EndFunc ;==>Example Func IsProcessElevated($iPID) Local $aRet, $iError = 0 Local $hProcess = _WinAPI_OpenProcess($PROCESS_QUERY_LIMITED_INFORMATION, False, $iPID, True) If Not $hProcess Then Return SetError(1, 0, False) Local $hToken = _WinAPI_OpenProcessToken($TOKEN_QUERY, $hProcess) If Not $hToken Then $iError = 2 Else $aRet = DllCall('advapi32.dll', 'bool', 'GetTokenInformation', 'handle', $hToken, 'uint', 20, 'uint*', 0, 'dword', 4, 'dword*', 0) ; TOKEN_ELEVATION If @error Or Not $aRet[0] Then $iError = 3 EndIf _WinAPI_CloseHandle($hToken) _WinAPI_CloseHandle($hProcess) If $iError Then Return SetError($iError, 0, False) Return $aRet[3] = 1 EndFunc ;==>IsProcessElevated And in my case, only a single process creates a one shot 7 handles. After digging, it has to do with one API LookupPrivilegeValueW that does it. Nothing I can do about it, that seems to be a Windows "issue".
    1 point
  3. New version available.
    1 point
  4. AZJIO

    Make a splitter

    Pull for a red strip. Elements disappear. The _GUICtrlListView_Create functions have to be required. Updated the corrected example: #include <Constants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GuiListView.au3> Global $hLV_Dubl Opt("GUIOnEventMode", 1) Opt("GUIResizeMode", 802) $Gui = GUICreate('', 555, 444, -1, -1, $WS_OVERLAPPEDWINDOW + $WS_POPUP + $WS_CLIPCHILDREN, $WS_EX_ACCEPTFILES + $WS_EX_COMPOSITED) GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") $hLV_Sourse = _GUICtrlListView_Create($Gui, ' ', 10, 25, 555 - 20, 95, BitOR($LVS_NOCOLUMNHEADER, $LVS_REPORT, $LVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE, True) _GUICtrlListView_SetExtendedListViewStyle($hLV_Sourse, BitOR($LVS_EX_FULLROWSELECT, $LVS_OWNERDRAWFIXED)) _Dubl() $ReLbl = GUICtrlCreateLabel('', 10, 120, 555 - 20, 3) GUICtrlSetBkColor(-1, 0xff0000) GUICtrlSetResizing(-1, 2 + 4 + 32 + 512) GUICtrlSetCursor(-1, 11) GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_ResizeField") GUISetState() While 1 Sleep(10000) WEnd Func _Exit() Exit EndFunc ;==>_Exit Func _Dubl() $GuiPos = WinGetClientSize($Gui) $hLV_Dubl = _GUICtrlListView_Create($Gui, ' ', 10, 150, $GuiPos[0] - 20, $GuiPos[1] - 198, BitOR($LVS_NOCOLUMNHEADER, $LVS_REPORT, $LVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE, True) _GUICtrlListView_SetExtendedListViewStyle($hLV_Dubl, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_OWNERDRAWFIXED)) _GUICtrlListView_SetBkColor($hLV_Dubl, 0xf0f0f0) EndFunc ;==>_Dubl Func _ResizeField() Local $aClientSize, $aCur_Info, $aID_Pos, $dY, $tmp $aCur_Info = GUIGetCursorInfo($Gui) If $aCur_Info[4] = $ReLbl Then $aID_Pos = ControlGetPos($Gui, '', $ReLbl) $aClientSize = WinGetClientSize($Gui) $aClientSize[1] -= 60 ; высчитываем разницу координат $dY = $aID_Pos[1] - $aCur_Info[1] While 1 Sleep(10) $aCur_Info = GUIGetCursorInfo($Gui) ; получаем новую инфу $aCur_Info[1] += $dY If Not ($aCur_Info[1] < 60 Or $aClientSize[1] - $aCur_Info[1] < 60 Or $tmp = $aCur_Info[1]) Then GUICtrlSetPos($ReLbl, 10, $aCur_Info[1]) ; устанавливаем новые координаты _WinAPI_MoveWindow($hLV_Sourse, 10, 25, $aID_Pos[2], $aCur_Info[1] - 25) _WinAPI_MoveWindow($hLV_Dubl, 10, $aCur_Info[1] + 30, $aID_Pos[2], $aClientSize[1] - $aCur_Info[1] - 18) $tmp = $aCur_Info[1] EndIf If Not $aCur_Info[2] Then ExitLoop ; выход если курсор отпущен WEnd EndIf EndFunc ;==>_ResizeField
    1 point
  5. I found that the return message for tcpsend() and tcprecv() is not reliable, so I improved on it. The purpose of this is to send large amount of data with error checking in between. Basically, the data that is being sent is converted from a string to binary and then compressed. The compressed binary is then split into an array, each element being 1000 character in length. Each element is then sent to the receiver and expect the receiver to reply with a confirmation before continue sending the rest. On the receiving end, each element is compiled back into an array, and then from the array back into binary and finally decompressed back to string. This works well with files smaller than 5 megs. #include #include Global $skey = "blah123" ;Encryption key ; #FUNCTION# ==================================================================================================================== ; Name...........: SendData ; Description....: Send compress string using TCPSend() ; Syntax.........: SendData($iSock, $PacketSize, $sData, $msgBuffer, [1|0], n, [1|0], $progress) ; Parameters.....: $iSock - Socket ID ; $PacketSize - Size of receiving packets ; $sData - string to send ; $msgBuffer - Buffer storage for incoming data ; $iEncrytion - true|false to encryption $sData ; $iRetry - the number of time to retry sending data ; $iConfirmation - true|false if data is expected to be return from recipiant ; $progress - $progressbar id from GUICtrlCreateProgress() if used ; Return values..: Success: The uncompress data from ReceiveData() function ; Failure: -1 if error from socket ; 0 if $msgBuffer is not empty ; Remarks........: if string len of $sData < 100, the compressed binary size of $sData may be larger than original uncompressed ; Author.........: l4tran ; =============================================================================================================================== Func SendData(ByRef $iSock, $PacketSize, $sData, ByRef $msgBuffer, $iEncrypt = 0, $iRetry = 3, $iConfirmation = 0, $progress = 0) Local $aData[1] Local $sRecv = "" local $iSplitSize = 1000 $msgBuffer &amp;= TCPRecv($iSock,$PacketSize) ;check status of socket and check for incoming data if @error Then $iSock = -1 ConsoleWrite("Resetting Sock:"&amp;$iSock&amp;" to -1"&amp;@crlf) return -1 EndIf if $msgBuffer <> "" then return 0 ;do not send if there are incoming data $iCompressionBefore = BinaryLen(StringToBinary($sData)) $sData=Compress($sData) ;compression $sData using UDF from trancexx $iCompressionAfter = BinaryLen($sData) ;display compression ratio ConsoleWrite(@crlf&amp;"Compression ratio: "&amp;$iCompressionBefore&amp;':'&amp;$iCompressionAfter&amp;" Percentage: "&amp;100-Round($iCompressionAfter/$iCompressionBefore*100,2)&amp;'%'&amp;@CRLF) If $iEncrypt = 1 Then $sData = _StringEncrypt(1, $sData, $skey) ;Encrypt string if true If StringLen($sData) > $iSplitSize Then ;Split $sData into elements of string size 1000 and store it into an array While StringLen($sData) > $iSplitSize ReDim $aData[UBound($aData) + 1] $aData[UBound($aData) - 2] = StringLeft($sData, $iSplitSize) $sData = StringTrimLeft($sData, $iSplitSize) WEnd EndIf $aData[UBound($aData) - 1] = $sData If $iRetry = 0 Then Return 0 For $i = 0 To UBound($aData) - 1 ;Starting sending each element in the array GUICtrlSetData($progress, Round($i / (UBound($aData) - 1) * 100)) ConsoleWrite(".") ;send confirmation string | Encryption status | element of $sData | and iConfirmation bit TCPSend($iSock, UBound($aData) - 1 &amp; '~' &amp; $i &amp; '~' &amp; $iEncrypt &amp; '~' &amp; $aData[$i] &amp; '~' &amp; $iConfirmation &amp; @CRLF) $ConfirmSent = TimerInit() Do ;Check from recipiant if each element is received. $sRecv = TCPRecv($iSock, $PacketSize) If TimerDiff($ConfirmSent) > 2500 Then ExitLoop ;wait 2.5 seconds for return packet confirmation before attempting to resend element Until ($sRecv = UBound($aData) - 1 &amp; '~' &amp; $i) If $sRecv <> UBound($aData) - 1 &amp; '~' &amp; $i Then ;check for confirmation string from recipiant; confirmation string = size of array &amp; current counter ConsoleWrite(".") ;retry sending SendData($iSock, $PacketSize, $aData[$i], $msgBuffer, $iEncrypt = 0, $iRetry - 1, $iConfirmation, $progress) EndIf $sRecv = "" Next If $iConfirmation Then ;check if data is to be returned from recipiant $ConfirmSent = TimerInit() Do $sData = ReceiveData($iSock, $PacketSize, $msgBuffer, $progress) If TimerDiff($ConfirmSent) > 20000 Then ExitLoop Until ($sData) ;check for confirmation sent request has completed Return $sData ;return data that was sent back from recipiant EndIf EndFunc ;==>SendData Func getPacket($iSock, $PacketSize, ByRef $msgBuffer) $sRecv = TCPRecv($iSock, $PacketSize) If $sRecv <> "" Then $msgBuffer &amp;= $sRecv EndIf If StringInStr($msgBuffer, @CRLF) Then ;ConsoleWrite($msgBuffer &amp; @CRLF) If StringInStr($msgBuffer, '~') Then $aMsgRecv = StringSplit($msgBuffer, '~') $msgBuffer = "" Return $aMsgRecv EndIf EndIf EndFunc ;==>getPacket ; #FUNCTION# ==================================================================================================================== ; Name...........: ReceiveData ; Description....: Receive compress string from TCPRecv() ; Syntax.........: ReceiveData($iSock, $PacketSize, ByRef $msgBuffer, $progress = 0) ; Parameters.....: $iSock - Socket ID ; $PacketSize - Size of receiving packets ; $msgBuffer - Buffer storage for incoming data ; $progress - $progressbar id from GUICtrlCreateProgress() if used ; Return values..: Success: The uncompress data from ReceiveData() function ; Failure: 0 if receiving data is not formatted properly ; Remarks........: if string len of $sData < 100, the compressed binary size of $sData may be larger than original uncompressed ; Author.........: l4tran ; =============================================================================================================================== Func ReceiveData($iSock, $PacketSize, ByRef $msgBuffer, $progress = 0) Local $aData[1], $iSize = 1, $iCounter = 0 $aMsgRecv = getPacket($iSock, $PacketSize, $msgBuffer) ;get first element of array to determine the size of array If IsArray($aMsgRecv) Then If UBound($aData) - 1 <> $aMsgRecv[1] Then ReDim $aData[$aMsgRecv[1] + 1] ;resizing array based on confirmation string $aData[$aMsgRecv[2]] = $aMsgRecv[4] ;adding first element into array TCPSend($iSock, $aMsgRecv[1] &amp; '~' &amp; $aMsgRecv[2]) ;send confirmation string back to sender; packet received successfully If $aMsgRecv[1] > 0 Then Do ;completing the rest of array $aMsgRecv = getPacket($iSock, $PacketSize, $msgBuffer) ;getting more element of array If IsArray($aMsgRecv) Then If $progress <> 0 Then GUICtrlSetData($progress, Round($iCounter / $iSize * 100, 0)) ;Update progress bar status $iSize = $aMsgRecv[1] ;Size of array $iCounter = $aMsgRecv[2] ;Current counter $aData[$iCounter] = $aMsgRecv[4] TCPSend($iSock, $aMsgRecv[1] &amp; '~' &amp; $aMsgRecv[2]) ;send confirmation string back to sender; packet received successfully EndIf Until ($iSize = $iCounter) ;complete until counter reaches size of array EndIf EndIf $sData = "" ;convert array back to string For $i = 0 To UBound($aData) - 1 $sData &amp;= $aData[$i] Next If IsArray($aMsgRecv) Then ;check if string needs to be decrypted before returning If $aMsgRecv[3] = 1 Then Return BinaryToString(Decompress(_StringEncrypt(0,$sData, $skey))) &amp; '|' &amp; $aMsgRecv[5] ElseIf $aMsgRecv[3] = 0 Then Return BinaryToString(Decompress($sData)) &amp; '|' &amp; $aMsgRecv[5] EndIf EndIf $aMsgRecv = 0 Return 0 EndFunc ;==>ReceiveData Func Compress($binString, $iCompressionStrength = 1) If Not IsBinary($binString) Then $binString = Binary($binString) Local $tCompressed Local $tSource = DllStructCreate('byte[' &amp; BinaryLen($binString) &amp; ']') DllStructSetData($tSource, 1, $binString) _WinAPI_LZNTCompress($tSource, $tCompressed, $iCompressionStrength) Local $bincompressed = DllStructGetData($tCompressed, 1) $tSource = 0 Return Binary($bincompressed) EndFunc ;==>Compress Func Decompress($binString) If Not IsBinary($binString) Then $binString = Binary($binString) Local $tSource = DllStructCreate('byte[' &amp; BinaryLen($binString) &amp; ']') DllStructSetData($tSource, 1, $binString) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress) $tSource = 0 Local $bString = Binary(DllStructGetData($tDecompress, 1)) Return $bString EndFunc Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize = 0x800000) Local $tBuffer, $Ret $tOutput = 0 $tBuffer = DllStructCreate('byte[' &amp; $iBufferSize &amp; ']') If @error Then Return SetError(1, 0, 0) $Ret = DllCall('ntdll.dll', 'uint', 'RtlDecompressBuffer', 'ushort', 0x0002, 'ptr', DllStructGetPtr($tBuffer), 'ulong', $iBufferSize, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ulong*', 0) If @error Then Return SetError(2, 0, 0) If $Ret[0] Then Return SetError(3, $Ret[0], 0) $tOutput = DllStructCreate('byte[' &amp; $Ret[6] &amp; ']') If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $Ret[6]) Then $tOutput = 0 Return SetError(4, 0, 0) EndIf Return $Ret[6] EndFunc ;==>_WinAPI_LZNTDecompress ; #FUNCTION# ==================================================================================================================== ; Name...........: _WinAPI_LZNTCompress ; Description....: Compresses an input data. ; Syntax.........: _WinAPI_LZNTCompress ( $tInput, ByRef $tOutput [, $fMaximum] ) ; Parameters.....: $tInput - "byte[n]" or any other structure that contains the data to be compressed. ; $tOutput - "byte[n]" structure that is created by this function, and contain the compressed data. ; $fMaximum - Specifies whether use a maximum data compression, valid values: ; |TRUE - Uses an algorithm which provides maximum data compression but with relatively slower performance. ; |FALSE - Uses an algorithm which provides a balance between data compression and performance. (Default) ; Return values..: Success - The size of the compressed data, in bytes. ; Failure - 0 and sets the @error flag to non-zero, @extended flag may contain the NTSTATUS code. ; Author.........: trancexx ; Modified.......: Yashied, UEZ ; Remarks........: The input and output buffers must be different, otherwise, the function fails. ; Related........: ; Link...........: @@MsdnLink@@ RtlCompressBuffer ; Example........: Yes ; =============================================================================================================================== Func _WinAPI_LZNTCompress(ByRef $tInput, ByRef $tOutput, $fMaximum = True) Local $tBuffer, $tWorkSpace, $Ret Local $COMPRESSION_FORMAT_LZNT1 = 0x0002, $COMPRESSION_ENGINE_MAXIMUM = 0x0100 If $fMaximum Then $COMPRESSION_FORMAT_LZNT1 = BitOR($COMPRESSION_FORMAT_LZNT1, $COMPRESSION_ENGINE_MAXIMUM) $tOutput = 0 $Ret = DllCall('ntdll.dll', 'uint', 'RtlGetCompressionWorkSpaceSize', 'ushort', $COMPRESSION_FORMAT_LZNT1, 'ulong*', 0, 'ulong*', 0) If @error Then Return SetError(1, 0, 0) If $Ret[0] Then Return SetError(2, $Ret[0], 0) $tWorkSpace = DllStructCreate('byte[' &amp; $Ret[2] &amp; ']') $tBuffer = DllStructCreate('byte[' &amp; (2 * DllStructGetSize($tInput)) &amp; ']') $Ret = DllCall('ntdll.dll', 'uint', 'RtlCompressBuffer', 'ushort', $COMPRESSION_FORMAT_LZNT1, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ptr', DllStructGetPtr($tBuffer), 'ulong', DllStructGetSize($tBuffer), 'ulong', 4096, 'ulong*', 0, 'ptr', DllStructGetPtr($tWorkSpace)) If @error Then Return SetError(3, 0, 0) If $Ret[0] Then Return SetError(4, $Ret[0], 0) $tOutput = DllStructCreate('byte[' &amp; $Ret[7] &amp; ']') If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $Ret[7]) Then $tOutput = 0 Return SetError(5, 0, 0) EndIf Return $Ret[7] EndFunc ;==>_WinAPI_LZNTCompress Func _WinAPI_MoveMemory($pDestination, $pSource, $iLenght) DllCall('ntdll.dll', 'none', 'RtlMoveMemory', 'ptr', $pDestination, 'ptr', $pSource, 'ulong_ptr', $iLenght) If @error Then Return SetError(1, 0, 0) Return 1 EndFunc ;==>_WinAPI_MoveMemory
    1 point
×
×
  • Create New...