Что нового

Определение конфигурации компьютера в AutoIt

Talany

Знающий
Сообщения
136
Репутация
11
Помогите написать скрипт определяющий конфигурацию компьютера


Добавлено:
Сообщение автоматически объединено:

Определил только процессор и общее количество ОЗУ
Код:
$processoropr = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString")
$processor = StringTrimLeft ($processoropr, 16) ;определение процессора

$Mem = MemGetStats()
$ozu = Round($Mem[1]/1024) ; количество озу
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Talany
Здесь посмотрите: DeviceAPI
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Блин легче на vbs написать! AutoIt геморойный какойто........
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 705
Talany сказал(а):
Блин легче на vbs написать! AutoIt геморойный какойто........
А причем здесь AutoIt?

Код:
$oService  = ObjGet('winmgmts:\\.\root\cimv2')
If IsObj($oService) Then
	$oItems  = $oService.ExecQuery('SELECT * FROM Win32_Processor')
	If IsObj($oItems) Then
		For $Property In $oItems
			ConsoleWrite($Property.Architecture & @CR)
			ConsoleWrite($Property.Family & @CR)
			ConsoleWrite($Property.Level & @CR)
			ConsoleWrite($Property.Manufacturer & @CR)
			ConsoleWrite($Property.Name & @CR)
			ConsoleWrite($Property.ProcessorId & @CR)
			ConsoleWrite($Property.Revision & @CR)
			ConsoleWrite($Property.Version & @CR)
		Next
	EndIf
EndIf


На VBS по твоему будет проще?

Win32 Classes
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Yashied [?]
На VBS по твоему будет проще?
Смею предположить, что сложность одинакова :smile:
Код:
set oService   = GetObject("winmgmts:\\.\root\cimv2")
If IsObject(oService) Then
    set oItems  = oService.ExecQuery("SELECT * FROM Win32_Processor")
    If IsObject(oItems) Then
        s = ""
		For Each Prop In oItems
            s = s & Prop.Architecture & vbcrlf
            s = s & Prop.Family & vbcrlf
            s = s & Prop.Level & vbcrlf
            s = s & Prop.Manufacturer & vbcrlf
            s = s & Prop.Name & vbcrlf
            s = s & Prop.ProcessorId & vbcrlf
            s = s & Prop.Revision & vbcrlf
            s = s & Prop.Version & vbcrlf
        Next
    End If
End If
WScript.Echo s
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 705
А вот в AutoIt я еще и GUI замутить могу.

:blum:
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Yashied сказал(а):
А вот в AutoIt я еще и GUI замутить могу.

:blum:

Вот по этому я и пытаюсь освоить AutoIt!!!
Просто vbs более знаком............. :-\
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Чтото я окончательно запутался :'(
Код:
$oService  = ObjGet('winmgmts:\\.\root\cimv2')
If IsObj($oService) Then
	$oItems  = $oService.ExecQuery('SELECT Model, Size FROM Win32_DiskDrive')
	If IsObj($oItems) Then
        For $Property In $oItems
			$1 =($Property.Model)
			$2 =($Property.Size)
            MsgBox (4096, $1, $2)
        Next
    EndIf
EndIf
Adminы добрые Помогите пожалуйста вытащить каждый диск в отдельный массив! :(
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Talany
а что ты хочешь в этих массивах? Модель и размер?
Может лучше один но двумерный массив?
Код:
#include <array.au3>
$oService  = ObjGet('winmgmts:\\.\root\cimv2')


If IsObj($oService) Then
	$oItems  = $oService.ExecQuery('SELECT Model, Size FROM Win32_DiskDrive')
	;_ArrayDisplay($oItems)
	If IsObj($oItems) Then
		$iDim = 1
        Dim $aDisk[$iDim][2]
        For $Property In $oItems
			ReDim $aDisk[$iDim][2]
            $aDisk[$iDim - 1][0] = $Property.Model
			$aDisk[$iDim - 1][1] = $Property.Size
            $iDim += 1
		Next
	EndIf
EndIf

_ArrayDisplay($aDisk)
 

AZJIO

Меценат
Меценат
Сообщения
2 751
Репутация
1 146
Talany
Вот добавление в комбобокс и вывод данных в лейбл. Для создания массива нужно немного переработать скрипт, элементы добавлять в массив а не в комбо, и данные в многомерный массив, а не в лейблы.
Код:
#NoTrayIcon ;скрыть в системной панели индикатор AutoIt

; начало создания окна, вкладок, кнопок.
GUICreate("Инфа о дисках",230,192) ; размер окна
;GUICtrlCreateTab (0,0, 230,192) ; размер вкладки
;GUICtrlCreateTabitem ("") ; имя вкладки

$bykvadicka80=GUICtrlCreateCombo ("", 10,8,90,18)
$DrivesArr = DriveGetDrive( "all" )
$list=''
For $i=1 To $DrivesArr[0]
   $DrTp = DriveGetType( $DrivesArr[$i]&'\' )
	If $DrTp='Removable' Then $DrTp='Rem'
	If $DrivesArr[$i]<>'A:' Then Assign('list', $list&'|'&StringUpper($DrivesArr[$i])&' ('&$DrTp&')')
	If $DrivesArr[$i]='c:' Then $dr=$i
Next
GUICtrlSetData($bykvadicka80,$list,StringUpper($DrivesArr[$dr])&' ('&DriveGetType( $DrivesArr[$dr]&'\' )&')')

GUICtrlCreateLabel (" FS:", 10,40,100,18)
GUICtrlCreateLabel (" метка тома:", 10,60,100,18)
GUICtrlCreateLabel (" серийный номер:", 10,80,100,18)
GUICtrlCreateLabel (" тип:", 10,100,100,18)
GUICtrlCreateLabel (" размер:", 10,120,100,18)
GUICtrlCreateLabel (" свободно:", 10,140,100,18)
GUICtrlCreateLabel (" статус:", 10,160,100,18)


$Label1=GUICtrlCreateLabel ("", 115,40,100,18)
$Label2=GUICtrlCreateLabel ("", 115,60,100,18)
$Label3=GUICtrlCreateLabel ("", 115,80,100,18)
$Label4=GUICtrlCreateLabel ("", 115,100,100,18)
$Label5=GUICtrlCreateLabel ("", 115,120,100,18)
$Label6=GUICtrlCreateLabel ("", 115,140,100,18)
$Label7=GUICtrlCreateLabel ("", 115,160,100,18)

_info() 

GUISetState ()

While 1
	$msg = GUIGetMsg()
	Select
        Case $msg = $bykvadicka80
		   _info() 
		Case $msg = -3
			ExitLoop
	EndSelect
WEnd


; функция чтения информации о выбранном диске
Func _info() 
$bykvadicka081=StringMid(GUICtrlRead ($bykvadicka80), 1,1)
GUICtrlSetData($Label1,DriveGetFileSystem( $bykvadicka081&":\" ))
GUICtrlSetData($Label2,DriveGetLabel( $bykvadicka081&":\" ))
GUICtrlSetData($Label3,DriveGetSerial( $bykvadicka081&":\" ))
GUICtrlSetData($Label4,DriveGetType( $bykvadicka081&":\" ))
GUICtrlSetData($Label5,Round(DriveSpaceTotal( $bykvadicka081&":\" )/1024,1)&' Гб')
GUICtrlSetData($Label6,Round(DriveSpaceFree( $bykvadicka081&":\" )/1024,1)&' Гб')
GUICtrlSetData($Label7,DriveStatus( $bykvadicka081&":\" ))
EndFunc   ;==>_info
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Kaster благодарю....
Как раз что хотел спасибо :laugh:
 

AZJIO

Меценат
Меценат
Сообщения
2 751
Репутация
1 146
Попробовал переделать скрипт Kaster
Код:
#include <Array.au3>
$DrivesArr = DriveGetDrive( "all" )
$iDim = 1
Dim $aDisk[$iDim][8]
For $i=1 To $DrivesArr[0]
    If $DrivesArr[$i]='A:' Then ContinueLoop
    ReDim $aDisk[$iDim][8]
    $aDisk[$iDim - 1][0] = $DrivesArr[$i]&'\'
    $aDisk[$iDim - 1][1] = DriveGetFileSystem( $DrivesArr[$i]&'\')
    $aDisk[$iDim - 1][2] = DriveGetLabel( $DrivesArr[$i]&'\')
    $aDisk[$iDim - 1][3] = DriveGetSerial( $DrivesArr[$i]&'\')
    $aDisk[$iDim - 1][4] = DriveGetType( $DrivesArr[$i]&'\')
    $aDisk[$iDim - 1][5] = Round(DriveSpaceTotal( $DrivesArr[$i]&'\' )/1024,1)&' Гб'
    $aDisk[$iDim - 1][6] = Round(DriveSpaceFree( $DrivesArr[$i]&'\' )/1024,1)&' Гб'
    $aDisk[$iDim - 1][7] = DriveStatus( $DrivesArr[$i]&'\')
    $iDim += 1
Next
_ArrayDisplay($aDisk)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
AZJIO
в твоем скрипте делать каждый раз ReDim ни к чему. т.к. ты заранее знаешь какой размер должен быть у выходного массива.
я так делал, потому что не знал, как определить размер получаемого объекта при
Код:
$oService.ExecQuery('SELECT Model, Size FROM Win32_DiskDrive')


Добавлено:
Сообщение автоматически объединено:

Код:
#include <Array.au3>
$DrivesArr = DriveGetDrive( "all" )
$iDim = 1
Dim $aDisk[$DrivesArr[0]][8]
For $i=1 To $DrivesArr[0]
    ;If $DrivesArr[$i]='A:' Then ContinueLoop
    ;ReDim $aDisk[$iDim][8]
    $aDisk[$i - 1][0] = $DrivesArr[$i]&'\'
    $aDisk[$i - 1][1] = DriveGetFileSystem( $DrivesArr[$i]&'\')
    $aDisk[$i - 1][2] = DriveGetLabel( $DrivesArr[$i]&'\')
    $aDisk[$i - 1][3] = DriveGetSerial( $DrivesArr[$i]&'\')
    $aDisk[$i - 1][4] = DriveGetType( $DrivesArr[$i]&'\')
    $aDisk[$i - 1][5] = Round(DriveSpaceTotal( $DrivesArr[$i]&'\' )/1024,1)&' Гб'
    $aDisk[$i - 1][6] = Round(DriveSpaceFree( $DrivesArr[$i]&'\' )/1024,1)&' Гб'
    $aDisk[$i - 1][7] = DriveStatus( $DrivesArr[$i]&'\')
    ;$iDim += 1
Next
_ArrayDisplay($aDisk)
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Чтото у меня не ладится с AutoIt....
Почему в конце кода выпадает ошибка???
Код:
#include <array.au3>
$oService  = ObjGet('winmgmts:\\.\root\cimv2')


If IsObj($oService) Then
    $oItems  = $oService.ExecQuery('SELECT Model, Size FROM Win32_DiskDrive')
    ;_ArrayDisplay($oItems)
    If IsObj($oItems) Then
        $iDim = 1
        Dim $aDisk[$iDim][2]
        For $Property In $oItems
            ReDim $aDisk[$iDim][2]
            $aDisk[$iDim - 1][0] = $Property.Model
            $aDisk[$iDim - 1][1] = $Property.Size
            $iDim += 1
        Next
    EndIf
EndIf

If $aDisk[0][0] = True Then
	MsgBox (4096, $aDisk[0][0], $aDisk[0][1])
EndIf
If $aDisk[1][0] = True Then
	MsgBox (4096, $aDisk[1][0], $aDisk[1][1])
EndIf
If $aDisk[2][0] = True Then
	MsgBox (4096, $aDisk[2][0], $aDisk[2][1])
EndIf
If $aDisk[3][0] = True Then
	MsgBox (4096, $aDisk[2][0], $aDisk[2][1])
EndIf

И вообще как проверить существования переменной или массива???
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 705
Код:
Dim $aDisk[1][2] = [[0]]

$oService = ObjGet('winmgmts:\\.\root\cimv2')

If IsObj($oService) Then
	$oItems = $oService.ExecQuery('SELECT Model, Size FROM Win32_DiskDrive')
	If IsObj($oItems) Then
		For $Property In $oItems
			$aDisk[0][0] += 1
			ReDim $aDisk[$aDisk[0][0] + 1][2]
			$aDisk[$aDisk[0][0]][0] = $Property.Model
			$aDisk[$aDisk[0][0]][1] = $Property.Size
		Next
	EndIf
EndIf

For $i = 1 To $aDisk[0][0]
	If $aDisk[$i][0] Then
		MsgBox(4096, $aDisk[$i][0], $aDisk[$i][1])
	EndIf
Next



Добавлено:
Сообщение автоматически объединено:

Talany сказал(а):
И вообще как проверить существования переменной или массива???
IsDeclared("aDisk") - проверяет была ли вообще объявлена переменная $aDisk. (Для обычных скриптов эта функция не нужна)
IsArray($aDisk) - проверяет является ли $aDisk массивом.
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Код:
For $i = 1 To $aDisk[0][0]
    If $aDisk[$i][0] Then
        MsgBox(4096, $aDisk[$i][0], $aDisk[$i][1])
    EndIf
Next


Мне не надо выводить результат в цикле. Мне надо Внести результаты в разные переменные.....
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Talany [?]
Мне не надо выводить результат в цикле
убери из цикла все что не надо

Мне надо Внести результаты в разные переменные
присвой нужные значения нужным переменным.

какие-то странные требования которые в своей формулировке уже содержат все решения
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Kaster сказал(а):
Talany [?]
Мне не надо выводить результат в цикле
убери из цикла все что не надо

Мне надо Внести результаты в разные переменные
присвой нужные значения нужным переменным.

какие-то странные требования которые в своей формулировке уже содержат все решения
Как присвоить допустим переменной $hdd1size результат объёма первого жеского диска???
а ели жеских на компе не 2 а 5 допустим????
Я же точно не могу знать скольхо хардов вообще будет на компе.....
Нужно уловие которое проверит вообще существование такого значения в массиве
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 705
Talany сказал(а):
Как присвоить допустим переменной $hdd1size результат объёма первого жеского диска???
а ели жеских на компе не 2 а 5 допустим????
Я же точно не могу знать скольхо хардов вообще будет на компе.....
Нужно уловие которое проверит вообще существование такого значения в массиве
Именно для этого люди и используют массивы. В моем примере массив содержит следующую информацию:

$aDisk[0][0] - Общее количество дисков (оно же количество элементов в массиве - его размерность, если угодно)
$aDisk[n][0] - Название n-го диска
$aDisk[n][1] - Размер n-го диска

Таким образом $sDisk[1][1] ~ $hdd1size, $sDisk[2][1] ~ $hdd2size и т.д. до $aDisk[0][0]

Это стандартный подход. Что не так?

Если ты будешь в подобных ситуациях использовать не массивы, а переменные, то тем самым ты сильно усложнишь себе жизнь.
 
Верх