Что нового

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

Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Yashied Это то понятно!
Ну вот объясните мне пожалуйста:
Допустим В первой части я собираю инфу о дисках
Код:
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

потом идет еще код ........
а в конце мне надо вывести В GUI_ окне точное количество хардов и их размер
я же не знаю скока хардов на n-ом компе :(
Как в такой ситуации поступить???
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Kaster под такой записью
Код:
GUICreate("окно")
GUICtrlCreateLabel($aDisk[0][0], 10, 10,10)


он мне выдаст модел первого харда...
а мне нужно знать их количество 1, 2, 3, или 15 :wacko:
+ к этому размер
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Talany сказал(а):
он мне выдаст модел первого харда...
а мне нужно знать их количество 1, 2, 3, или 15 :wacko:

Talany, наморщи ум. Мы тебе уже в пятый раз говорим, что $aDisk[0][0] содержит количество хардов (n), а не модель первого диска, модель диска находится в $aDisk[1...n][0].
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Или я сегодня в дрова понять немогу нечего или вы толково объяснить не можете
Код:
#include <array.au3>
#include <GUIConstants.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


GUICreate("My GUI")  


Opt("GUICoordMode",2)
GUICtrlCreateLabel ("HDD1: " & $aDisk[0][0] & " Размер: " & $aDisk[0][1],  10, 30, 500) 
GUICtrlCreateLabel ("HDD2: " & $aDisk[1][0] & " Размер: " & $aDisk[1][1],  -1, 0)
GUICtrlCreateLabel ("HDD3: " & $aDisk[2][0] & " Размер: " & $aDisk[2][1],   -1, 0) 
GUICtrlCreateLabel ("HDD4: " & $aDisk[3][0] & " Размер: " & $aDisk[3][1],   -1, 0)
GUISetState ()     


While 1
    $msg = GUIGetMsg()
    
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend


Если у меня 3харда то на HDD4 он сразу выдаст ошибку и пипец!!!!!!!!!!!!
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Talany сказал(а):
Или я сегодня в дрова понять немогу нечего или вы толково объяснить не можете

Ты что сегодня курил? Элемент массива с индексом [0][0] специально зарезервирован для количества дисков ([0][1] здесь не используется). Если он равен 3, то значит дисков всего 3, и 4-го быть не может и никакой HDD4 тоже нет. Ты должен перебирать все диски от 1 до значения, которое находится в $aDisk[0][0].

Код:
#Include <GUIConstantsEx.au3>

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

GUICreate('My GUI')
For $i = 1 To $aDisk[0][0]
	GUICtrlCreateLabel('HDD' & $i & ': ' & $aDisk[$i][0] & '     Размер: ' & $aDisk[$i][1], 10, 10 + ($i - 1) * 20)
Next
GUISetState()

While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch
WEnd


Толковее я объяснить не могу.
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Еще не курил, но после такого срочно надо!!!
я не хе#а не понимаю в командах AutoIt (был бы php то другое дело) вот и спрашиваю!
Толком не объяснили но из последнего я понял что предлагаете!
Всем удачи рабочий день окончен впереди выходные, всех благодарю...... :beer:
Но после выходных я еще вернусь :rofl:
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Всем привет....
Вот пардокс!!! Выключил и включил комп он мне один и тотже скрипт по разному выдает :shok:
Код:
GUICreate("окно")
GUICtrlCreateLabel($aDisk[0][0], 10, 10,10)


До выдовал модель первого харда то После выдает общее количество.........
Это что глюк у меня или у компа????
-----------------------------------------
С Хардами разобрался на трезвую голову Всем спасибо, но сейчас проблема с ОЗУ, не выдает размер из каждой палки...... Пожалуйста помогите

Код:
$oService  = ObjGet('winmgmts:\\.\root\cimv2')
If IsObj($oService) Then
    $oItems  = $oService.ExecQuery('SELECT Name, BlockSize FROM Win32_MemoryDevice')
    If IsObj($oItems) Then
        For $Property In $oItems
			$1 = ($Property.Name)
			$2 = ($Property.BlockSize)
            MsgBox (64, $1,$2)
        Next
    EndIf
EndIf
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Talany [?]
Это что глюк у меня или у компа?
у тебя. первый раз ты использовал первый вариант скрипта - от меня. там под нулевым элементом шел первый по счету диск
во второй раз вариант от Yashied, у него в нулевом элементе хранилось кол-во дисков.
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Kaster ясно.....
А как посчитать озу???
Конечно можно посчитать так... но мне надо сколько палок и какого объема

Код:
$Mem = MemGetStats()
$OZU = Round($Mem[1]/1024)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Код:
$oService   = ObjGet('winmgmts:\\.\root\cimv2')
If IsObj($oService) Then
	$oItems  = $oService.ExecQuery('SELECT * FROM Win32_PhysicalMemory')
	If IsObj($oItems) Then
		For $Property In $oItems
			$1 = $Property.Name
            $2 = $Property.Capacity / (1024*1024)
            MsgBox (64, $1,$2)
		Next
	EndIf
EndIf
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Kaster спасибо большое!!!!!! :laugh:

Теперь вообще не понятно!
Подскажите пожалуйста следующию проблему

Код:
$15 = GUICtrlCreateInput("", 55, 260, 230, 20)


Почему при выводе $15 выводится кокоелибо число???
Как сделать так чтобы выводилось содержание.....

И еще вопросик на засыпку...
У меня комп находится в домене при нажатии на кнопку "ПУСК" сверху выводятся моё ФИО
Можно ли это тоже захватить??? :IL_AutoIt_1:
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
GUICreate('', 300, 300)
$15 = GUICtrlCreateInput('Type some text here', 55, 260, 230, 20)
$Press = GUICtrlCreateButton('Press Me', 10, 10, 60, 20)

GUISetState()

While 1
	Switch GUIGetMsg()
	Case $Press
		$Read = GUICtrlRead($15)
		MsgBox(0, '', $Read)
	EndSwitch
WEnd


:smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Код:
$oService   = ObjGet('winmgmts:\\.\root\cimv2')
If IsObj($oService) Then
	$oItems  = $oService.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name='" & @UserName & "'")
	If IsObj($oItems) Then
		For $Property In $oItems
			$1 = $Property.Name
            $2 = $Property.FullName
            MsgBox (64, $1,$2)
		Next
	EndIf
EndIf
 

beve

Осваивающий
Сообщения
104
Репутация
31
Зравствуйте. У меня такая нужда:
нужно определить подключен ли к компьютеру 3G USB MODEM или нет. При подключении модема в диспетчере устройств он появляется в списке МОДЕМЫ.
Хотел попробовать использовать DeviceAPI.au3, но этой библиотеки нигде не могу найти, так как ссылки на оную не рабочие. Если с помощью DeviceAPI.au3 можно решить мою проблемму, то дайте мне код этой библиотеки, у кого есть, или предложите другой метод, главное чтобы определение занимало мало времени и ресурсов компьютера. Спасибо.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
beve,
Держите.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
beve
Можно вот так определить:

Код:
; НАЧАЛО

 ; Идентификатор уникальный для любого модема

 $ID='USB\Vid_12d1&Pid_1001&MI_00\6&29ad5cb3&0&0000'

 $KEY='HKLM\System\CurrentControlSet\Services\modem\Enum'
 If RegRead($KEY,'0')=$ID Then
  MsgBox(0,'','Модем подключен...')
 Else
  MsgBox(0,'','Модем не подключен...')
 EndIf

; КОНЕЦ
 

beve

Осваивающий
Сообщения
104
Репутация
31
Спасибо за помощь.
snoitaleR, как я понимаю, это "Vid_12d1&Pid_1001&MI_00" не изменяется, и на разных компьютерах остается таким же, значит можно "привязаться" к этому и будет определяться везде(ну естественно в каждого модема vid и Pid свои). Просто здорово.
 
Верх