Что нового

Получение информации о компьютере.

Detre

Новичок
Сообщения
70
Репутация
0
Всем привет товарищи. Возникла необходимость в написании программы для записи конфигурации компьютера в текстовый файл. Возникла проблема в исполнении скрипта(Первая часть работает по запуску кнопки, вторая часть при закрытии скрипта).Как сделать корректно?

Исходник:

Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#RequireAdmin
#NoTrayIcon

;Все что написано, посде ";" явлется комментарием и ни как не влияет на работу скрипта.

Global $iKabina, $iType, $iKabina, $iModel, $iSerialNum, $iInv,  $sProcessor, $sMotherBoardManufacturer, $sMotherBoardModel, $sNameComput, $sProduct, $sBuild ;объявляем переменные, которые будут использоваться в цикле

$Main = GUICreate('Инвентаризация', 315, 352, 318, 213) ;рисуем главное окно
GUISetBkColor(0x02101B)
WinSetTrans($Main, "", 0)

For $i = 0 To 230 Step 2
    WinSetTrans($Main, "", $i) ;Прозрачность 0-255
Next

$iConnect = GUICtrlCreateButton("Передать", 23, 305, 267, 33) ;создаем кнопку подключения
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma") ;задаем стиль элементу выше

$iKabina = GUICtrlCreateInput("", 20, 30, 272, 21)
GUICtrlCreateLabel('Кабинет', 20, 10, 150, 17)
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma") ;задаем стиль элементу выше
GUICtrlSetColor(-1, 0xDEDEDE)

$iType = GUICtrlCreateInput("", 20, 75, 272, 21)
GUICtrlCreateLabel('Тип', 20, 55, 150, 17)
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma") ;задаем стиль элементу выше
GUICtrlSetColor(-1, 0xDEDEDE)

$iModel = GUICtrlCreateInput("", 20, 120, 272, 21)
GUICtrlCreateLabel('Модель', 20, 100, 150, 17)
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma") ;задаем стиль элементу выше
GUICtrlSetColor(-1, 0xDEDEDE)

$iSerialNum = GUICtrlCreateInput("", 20, 165, 272, 21)
GUICtrlCreateLabel('Серийный номер', 20, 145, 150, 17)
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma") ;задаем стиль элементу выше
GUICtrlSetColor(-1, 0xDEDEDE)

$iInv = GUICtrlCreateInput("", 20, 210, 272, 21)
GUICtrlCreateLabel('Инвентарник', 20, 190, 150, 17)
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma") ;задаем стиль элементу выше
GUICtrlSetColor(-1, 0xDEDEDE)

$hFile = FileOpen(@ScriptDir & "\Inventarisation.txt" , 1)

GUISetState(@SW_SHOW)

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

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



While 1
   Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
         ExitLoop
      Case $iConnect
         $rKabina = GUICtrlRead($iKabina)
         $rType = GUICtrlRead($iType)
         $rModel = GUICtrlRead($iModel)
         $rSerialNum = GUICtrlRead($iSerialNum)
         $rInv = GUICtrlRead($iInv)



         If $rKabina = "" Then ;защита от пустого поля имени пк
            MsgBox(16+8192+262144,"Error","Поле Кабинет - пустое")
         Else
         If $rType = "" Then ;защита от пустого поля логина
            MsgBox(16+8192+262144,"Error","Поле Тип - пустое")
         Else
         If $rModel = "" Then ;защита от пустого поля логина
            MsgBox(16+8192+262144,"Error","Поле Модель - пустое")
         Else
         If $rSerialNum = "" Then ;защита от пустого поля логина
            MsgBox(16+8192+262144,"Error","Поле Серийный номер - пустое")
         Else
         If $rInv = "" Then ;защита от пустого поля логина
            MsgBox(16+8192+262144,"Error","Поле Инвентарник - пустое")
         Else
         If $hFile = -1 Then
            MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
                Else
                _hide() ;отключает все элементы ввода и кнопку
                FileWriteLine($hFile, "----------------------------------------------------------------------------------------------")
                FileWriteLine($hFile, "--------------------------------------МЕСТОПОЛОЖЕНИЕ------------------------------------------")
                FileWriteLine($hFile, "----------------------------------------------------------------------------------------------")
                FileWriteLine($hFile, "Кабинет:" & ' ' & $rKabina)
                FileWriteLine($hFile, "Тип:" & ' ' & $rType)
                FileWriteLine($hFile, "Модель:" & ' ' & $rModel)
                FileWriteLine($hFile, "Серийный номер:" & ' ' & $rSerialNum)
                FileWriteLine($hFile, "Инвентарный номер:" & ' ' & $rInv)
                FileWriteLine($hFile, "Учетная запись:" & ' ' & @UserName)
                FileWriteLine($hFile, "----------------------------------------------------------------------------------------------")
                FileWriteLine($hFile, "---------------------------------------КОНФИГУРАЦИЯ-------------------------------------------")
                FileWriteLine($hFile, "----------------------------------------------------------------------------------------------")
                FileClose($hFile)
                _show() ;включает все элементы ввода и кнопку
            EndIf
         EndIf
      EndIf
   EndIf
EndIf
   EndIf
   EndSwitch
WEnd


Global $sInfo
$fFile = @ScriptDir & "\Inventarisation.txt"
$ObjService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & @ComputerName & "\root\cimv2")
$ObjMB = $ObjService.ExecQuery("SELECT * FROM Win32_BaseBoard", "WQL", 0x30)
$ObjProcessor = $ObjService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", 0x30)
$ObjMemory = $ObjService.ExecQuery('SELECT * FROM Win32_PhysicalMemory')
$ObjNet = $ObjService.ExecQuery ('SELECT * FROM Win32_NetworkAdapter', 'WQL', 0x30)
$ObjGraph = $ObjService.ExecQuery ('SELECT * FROM Win32_VideoController', 'WQL', 0x30)
$ObjDrive = $ObjService.ExecQuery ('SELECT * FROM Win32_DiskDrive', 'WQL', 0x30)
$ObjRam = $ObjService.ExecQuery ("SELECT * FROM Win32_ComputerSystem")
$sNameComput = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\DataStore\Machine\0", "szTargetName")
$sProduct = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName")
$sBuild = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ReleaseId")

For $objItemMB In $ObjMB
   $MB = $objItemMB.Product
Next

For $objItemR In $ObjRam
   $RamTotal = $objItemR.TotalPhysicalMemory
Next

Dim $Proc[1][0], $i = 1
If IsObj($ObjProcessor) Then
   For $objItemP In $ObjProcessor
      ReDim $Proc[UBound($Proc) + 1][1]
      $Proc[$i][0] = "Процессор: " & $objItemP.Name
      $i += 1
   Next
   $Proc[0][0] = UBound($Proc) - 1
   If $Proc[0][0] < 1 Then
      SetError(1, 1, 0)
   EndIf
EndIf

Dim $aResults[$ObjMemory.Count][99]
$Count = 0
For $ObjItemM In $ObjMemory
   $aResultsS = $objItemM.Speed
   $Count += 1
Next

Dim $NetAdap[1][0], $i = 1
If IsObj($ObjNet) Then
   For $ObjItemN In $ObjNet
   If $ObjItemN.PhysicalAdapter = True Then
      ReDim $NetAdap[UBound($NetAdap) + 1][1]
      $NetAdap[$i][0] = "Сетевой адаптер: " & $ObjItemN.Name
      $i += 1
   EndIf
   Next
   $NetAdap[0][0] = UBound($NetAdap) - 1
   If $NetAdap[0][0] < 1 Then
      SetError(1, 1, 0)
   EndIf
EndIf

Dim $GraphAdap[1][0], $i = 1
If IsObj($ObjGraph) Then
   For $ObjItemG In $ObjGraph
      ReDim $GraphAdap[UBound($GraphAdap) + 1][1]
      $GraphAdap[$i][0] = 'Видеокарта: ' & $ObjItemG.Name & " | RAM: " & $ObjItemG.AdapterRAM /1024 ^2 & " Mb"
      $i += 1
   Next
   $GraphAdap[0][0] = UBound($GraphAdap) - 1
   If $GraphAdap[0][0] < 1 Then
      SetError(1, 1, 0)
   EndIf
EndIf

Dim $Drive[1][0], $i = 1
If IsObj($ObjDrive) Then
   For $ObjItemD In $ObjDrive
      ReDim $Drive[UBound($Drive) + 1][1]
      $Drive[$i][0] = "Жесткие диск: " & $ObjItemD.Model & " | Size: " & Round($ObjItemD.Size /1024 /1024 /1024) & " Gb"
      $i += 1
   Next
   $Drive[0][0] = UBound($Drive) - 1
   If $Drive[0][0] < 1 Then
      SetError(1, 1, 0)
   EndIf
EndIf

For $i = 1 To $Proc[0][0]
   LogIt($Proc[$i][0])
Next
LogIt("Материнская плата: " & $mb)
LogIt("RAM: " & Round($RamTotal / 1024 /1024 ^2, 0) & " GB | " & $ObjMemory.Count & " pieces | " & $aResultsS & " Mhz")
For $i = 1 To $GraphAdap[0][0]
   LogIt($GraphAdap[$i][0])
Next
For $i = 1 To $Drive[0][0]
   LogIt($Drive[$i][0])
Next
For $i = 1 To $NetAdap[0][0]
   LogIt($NetAdap[$i][0])
Next
Local $file = FileOpen($fFile, 1)
If $file = -1 Then Exit  MsgBox(0, "Error", "Unable to open file " & @ScriptDir & "\report.log")
FileWriteLine($file, "Имя компьютера:" & $sNameComput & @CRLF)
FileWriteLine($file, "Операционная система: " & $sProduct & " " & $sBuild & " " & @OsArch)
FileWriteLine($file, $sInfo)
FileWriteLine($file, "==============================================================================================")
FileClose($file)
$smail = 'Имя компьютера: ' & @ComputerName & @CRLF & FileRead($fFile)

Func LogIt($sText)
    $sInfo &= $sText & @CRLF
EndFunc
 
Последнее редактирование:
Верх