Detre
Новичок
- Сообщения
- 70
- Репутация
- 0
Всем привет.Очень нужна помощь.Есть скриптец, который помогали собирать на этом форуме.(Отдельное спасибо lnnl и seestars). Я думаю это будет кому-то тоже полезно. Задача такая - нужно отображение информации по каждой плашке оперативки(В данный момент только суммарка по ним и это исходник 1) как видеокарты, жесткие диски, сетевухи и монитор. Есть нечто подобное(исходник 2). Пример написания в файле : RAM...................1: Слот: DIMM_A1...Память: 8GB....Марка: Kingston........S\N: KHX1600C10D3/8GB....Частота: 1600
Исходник 1
Исходник 2
Не требую написать все за меня .Хотя бы направить, как выполняется скрипт на последующее дополнение строк, я очень не опытен в этом деле. Заранее огромнейшее спасибо.
Исходник 1
Код:
#RequireAdmin
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
Opt("MustDeclareVars",1)
;Все что написано, после ';' является комментарием и ни как не влияет на работу скрипта.
Global $idComboBox ;объявляем переменные, которые будут использоваться в цикле
Global $hFile, $sInfo,$idComboBox ,$CopyBtn , $sComboRead, $fFile = @ScriptDir & "\" & "(" & @MDAY & "." & @MON & "." & @YEAR & ")" & ".txt"
$hFile = FileOpen(@ScriptDir & "\" & "(" & @MDAY & "." & @MON & "." & @YEAR & ")" & ".txt", 1)
While 1
Switch GUIGetMsg()
Case Else
$sInfo &= _InfoPC()
FileWrite($hFile, $sInfo)
FileClose($hFile)
EndSwitch
WEnd
Func _InfoPC()
Local $ObjService = ObjGet('winmgmts:{impersonationLevel = impersonate}!\\' & @ComputerName & '\root\cimv2')
Local $ObjMB = $ObjService.ExecQuery('SELECT * FROM Win32_BaseBoard', 'WQL', 0x30)
Local $ObjProcessor = $ObjService.ExecQuery('SELECT * FROM Win32_Processor', 'WQL', 0x30)
Local $ObjMemory = $ObjService.ExecQuery('SELECT * FROM Win32_PhysicalMemory')
Local $ObjNet = $ObjService.ExecQuery('SELECT * FROM Win32_NetworkAdapter', 'WQL', 0x30)
Local $ObjGraph = $ObjService.ExecQuery('SELECT * FROM Win32_VideoController', 'WQL', 0x30)
Local $ObjDrive = $ObjService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', 0x30)
Local $ObjCDDrive = $ObjService.ExecQuery('SELECT * FROM Win32_CDROMDrive', 'WQL', 0x30)
Local $ObjRam = $ObjService.ExecQuery('SELECT * FROM Win32_ComputerSystem')
Local $sNameComput = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\DataStore\Machine\0', 'szTargetName')
Local $sProduct = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName')
Local $sBuild = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ReleaseId')
Local $sItemM, $sInfo = '[КОНФИГУРАЦИЯ:]' & @CRLF & @TAB & 'Имя компьютера............' & @ComputerName & @CRLF & @TAB &'Операционная система: ... ' & $sProduct & ' ' & $sBuild & ' ' & '(' & @OSArch & ')' & @CRLF
If IsObj($ObjService) Then
For $objItemP In $ObjProcessor
$sInfo &= @TAB & 'Процессор: .............. ' & $objItemP.Name & @CRLF
Next
For $objItemMB In $ObjMB
$sInfo &= @TAB & 'Материнская плата: ...... ' & $objItemMB.Product & @CRLF
Next
For $ObjItemM In $ObjMemory
$sItemM = $objItemM.Speed
Next
For $objItemR In $ObjRam
$sInfo &= @TAB & 'RAM: .................... ' & Round($objItemR.TotalPhysicalMemory / 1024 / 1024 ^ 2, 0) & ' GB | ' & $ObjMemory.Count & ' слот | ' & $sItemM & ' Mhz' & @CRLF
Next
For $ObjItemG In $ObjGraph
$sInfo &= @TAB & 'Видеокарта: ............. ' & $ObjItemG.Name & ' | RAM: ' & $ObjItemG.AdapterRAM / 1024 ^ 2 & ' Mb' & @CRLF
Next
For $ObjItemD In $ObjDrive
$sInfo &= @TAB & 'Жесткие диск: ........... ' & $ObjItemD.Model & ' | Объем: ' & Round($ObjItemD.Size / 1024 / 1024 / 1024) & ' Gb' & @CRLF
Next
For $ObjItemCD In $ObjCDDrive
$sInfo &= @TAB & 'Дисковод: ............... ' & $ObjItemCD.Name & @CRLF
Next
For $ObjItemN In $ObjNet
If $ObjItemN.PhysicalAdapter = True Then
$sInfo &= @TAB & 'Сетевой адаптер: ........ ' & $ObjItemN.Name & @CRLF
EndIf
Next
EndIf
Local $aDisplayInfo = Display_Info()
if $aDisplayInfo = "" then
ConsoleWrite("$aDisplayInfo is not an array" & @crlf)
Else
for $i = 0 to (ubound($aDisplayInfo)/2)-1
$sInfo &= @TAB & "Монитор: ........ " & $i+1 & ": Модель: " & $aDisplayInfo[(2*$i)] & @CRLF
$sInfo &= @TAB & "Монитор: ........ " & $i+1 & ": Серийный номер: " & $aDisplayInfo[(2*$i)+1] & @CRLF
Next
EndIf
$sInfo &= @CRLF
Return $sInfo
EndFunc ;==>_InfoPC
Func _hide() ;функция. отключает элементы ввода и кнопку, пока работает скрипт
GUICtrlSetState($iConnect, $GUI_disable)
GUICtrlSetState($iKabina, $GUI_disable)
GUICtrlSetState($iType, $GUI_disable)
GUICtrlSetState($iModel, $GUI_disable)
GUICtrlSetState($iSerialNum, $GUI_disable)
GUICtrlSetState($iInv, $GUI_disable)
EndFunc ;==>_hide
Func _show() ;функция. включает элементы ввода и кнопку, когда скрипт отработал
GUICtrlSetState($iConnect, $GUI_enable)
GUICtrlSetState($iKabina, $GUI_enable)
GUICtrlSetState($iType, $GUI_enable)
GUICtrlSetState($iModel, $GUI_enable)
GUICtrlSetState($iSerialNum, $GUI_enable)
GUICtrlSetState($iInv, $GUI_enable)
EndFunc ;==>_show
Func _a()
Local $sls=ObjGet("winmgmts:{impersonationLevel=impersonate," _
&"authenticationLevel=Pkt}!\\"& _
@ComputerName&'\root\wmi'),$lss=$sls.ExecQuery _
('SELECT * FROM WmiMonitorID'), _
$lll,$sll,$sss="",$lsl,$lls,$i,$z
For $z In $lss
$lsl=$z.UserFriendlyName
For $i=0 To Ubound($lsl)-1
if ($lsl[$i]) Then $lll&=Chr($lsl[$i])
Next
$lls=$z.SerialNumberID
For $i=0 To Ubound($lls)-1
if ($lls[$i]) Then $sll&=Chr($lls[$i])
Next
$sss&="Модель"&@TAB&@TAB&": "&$lll&@CR&"Серийный номер"&@TAB&": "&$sll&@CR&@CR
$lll=""
$sll=""
Next
$lss=Null
$sls=Null
$sInfo &= @CRLF
EndFunc
Func Display_Info()
Local $oComErr, $oWmi, $oInstances
$oComErr = ObjEvent("AutoIt.Error", comm_error_handler)
#forceref $oComErr
;Get WMI object
$oWmi = ObjGet("winmgmts:\root\WMI")
If Not IsObj($oWmi) Then Exit MsgBox($MB_ICONERROR, "ERROR", "Unable to create WMI object")
;Select object instances
$oInstances = $oWmi.ExecQuery("SELECT * FROM WMIMonitorID")
If $oInstances.Count = 0 Then Exit MsgBox($MB_ICONWARNING,"Warning","No objects found")
; Changed part
Local $aReturn[2] ; change number if you want to return more info
Local $iDisplayCount = 1
;Display instance properties
For $oInstance in $oInstances
With $oInstance
ConsoleWrite(@CRLF)
if ubound($aReturn) < $iDisplayCount * 2 then redim $aReturn[2*$iDisplayCount]
If IsArray(.UserFriendlyName) Then $aReturn[2*($iDisplayCount-1)] = convert_uint16_array_to_string(.UserFriendlyName) ;StringFormat("UserFriendlyName = %s", convert_uint16_array_to_string(.UserFriendlyName))
If IsArray(.SerialNumberId) Then $aReturn[2*($iDisplayCount-1)+1] = convert_uint16_array_to_string(.SerialNumberId) ;StringFormat("SerialNumberId = %s", convert_uint16_array_to_string(.SerialNumberId))
$iDisplayCount += 1
EndWith
Next
Return $aReturn
EndFunc
Func convert_uint16_array_to_string($aBytes)
Local $s = ""
For $i in $aBytes
If $i <> 0 Then $s &= Chr($i)
Next
Return $s
EndFunc
Func comm_error_handler($oComError)
ConsoleWrite(@CRLF)
ConsoleWrite(StringFormat("Script Line = %s", $oComError.ScriptLine) & @CRLF)
ConsoleWrite(StringFormat("Win Err Desc = %s", StringStripWS($oComError.WinDescription, $STR_STRIPTRAILING)) & @CRLF)
ConsoleWrite(StringFormat("Error Number = %i (0x%x)", $oComError.Number, $oComError.Number) & @CRLF)
ConsoleWrite(StringFormat("Error Desc = %s", $oComError.Description) & @CRLF)
Exit
EndFunc
Исходник 2
Код:
#Include<array.au3>
$objWMIService = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2')
$colItems = $objWMIService.ExecQuery('Select * From Win32_PhysicalMemory')
Dim $aResults[$colItems.Count][7]
$Count = 0
For $ObjItem In $colItems
$aResults[$Count][0 ] = $objItem.Tag
$aResults[$Count][1 ] = $objItem.BankLabel
$aResults[$Count][2 ] = $ObjItem.Capacity / 1024^2
$aResults[$Count][3 ] = $objItem.Manufacturer
$aResults[$Count][4] = $objItem.PartNumber
$aResults[$Count][5] = $objItem.DeviceLocator
$aResults[$Count][6] = $objItem.Speed
$Count +=1
Next
_ArrayDisplay($aResults, 'RAM Info')
Не требую написать все за меня .Хотя бы направить, как выполняется скрипт на последующее дополнение строк, я очень не опытен в этом деле. Заранее огромнейшее спасибо.