Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Вопросы По WPI
Показать сообщение отдельно

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ок, ловите, только чур ногами не больно пинать т.к. с AutoIt знаком лишь неделю.
Ограничения: т.к. скрипт запускается на стадии T12 - разрешение всего 640*480, больше 60 приложений в диалог уже трудно вместить.
Это собственно скрипт:
Код: Выделить весь код
#include <Array.au3>
#include <GuiConstants.au3>
#Include <process.au3>

Opt("GUIOnEventMode", 1)

;~ Переменные используемые в скрипте:
;~ $Border - Отступ\промежуток между колонками checkbox
;~ $HOtst - отступ сверху
;~ $wicol - ширина checkbox
;~ $nrow - кол-во рядов checkbox
;~ $distr - путь к папке с дистрибутивами на CD

Dim  $ns, $ps, $ks, $inifile = @ScriptDir & '\AppInstall.ini', $distr='\Soft\'
Dim $Border = 10, $HOtst = 30, $YCurr = $HOtst, $XCurr = $Border, $ncol = 3, $wicol = 190, $nrow = 20, $currrow = 1
Dim $CHB_ARRAY
Dim $CD=OsGetCD ('Win51')
Const $Key='HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx'
$cnt_sect = IniReadSectionNames($inifile)
	GuiCreate("Установка приложений", 620, 460,-1, -1)
	GUICtrlCreateLabel ('Выберите приложения для автоматической установки:', 100, 15)
	GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    For $i = 1 To $cnt_sect[0]
		$ns=IniRead ( $inifile, $cnt_sect[$i], "Name", "0" )
		$ps=IniRead ( $inifile, $cnt_sect[$i], "Path", "0" )
		If $ns <> '0' And $ps <> '0' Then
			$ind=$cnt_sect[$i]
			If $CHB_ARRAY=="" Then
				$CHB_ARRAY=$ind
			Else
				$CHB_ARRAY = $CHB_ARRAY & '-' & $ind
			EndIf			
		EndIf
	Next
	$CHB_ARRAY = StringSplit ($CHB_ARRAY, '-')
	Dim $int = $CHB_ARRAY[0]
	Dim $CH_ARRAY[$int]
 	For $i = 1 To UBound ($CHB_ARRAY) - 1
		$ns=IniRead ( $inifile, $CHB_ARRAY[$i], "Name", "0" )
		$ind = $i-1
		$currrow = $currrow + 1
		$CH_ARRAY[$ind] = OsCreateChBox ($ns, $XCurr, $YCurr, $wicol, 15)
		$YCurr=$YCurr + 20
		If $currrow > $nrow Then
			$YCurr=$HOtst
			$XCurr=$XCurr + $wicol + $Border
			$currrow = 0
		EndIf
	Next

	GUISetState (@SW_SHOW)
			While 1
				Sleep(10)
			Wend

Func OsGetCD ($file)
	$var = DriveGetDrive("CDROM")
		If NOT @error Then
			For $i = 1 to $var[0]
				If FileExists ($var[$i] & '\' & $file) Then
				MsgBox(4096,"Found CDROM" & $i, 'Installation CDROM  Label is - ' & $var[$i] & @CRLF & 'Starting Setup.')
				$CD = $var[$i]
				EndIf
			Next
		EndIf
		Return $CD
	EndFunc
		
Func SpecialEvents ()
	_RunDos('REG ADD ' & $Key & ' /V TITLE /D "Installing Applications" /f')
	For $i = 0 to UBound ($CH_ARRAY) - 1
					$chstate = GUICtrlRead ($CH_ARRAY[$i])
					$ind = $i + 1
					$ns=IniRead ( $inifile, $CHB_ARRAY[$ind], "Name", "0" )
					$ps=IniRead ( $inifile, $CHB_ARRAY[$ind], "Path", "0" )
					$ps2=IniRead ( $inifile, $CHB_ARRAY[$ind], "Path2", "0" )
					$ps3=IniRead ( $inifile, $CHB_ARRAY[$ind], "Path3", "0" )
					$reg=IniRead ( $inifile, $CHB_ARRAY[$ind], "Reg", "0" )
					
					If StringLen ($ind) = 1 Then
						$ind = '00' & $ind
					Else
						$ind = '0' & $ind
					EndIf
					
					If Number($chstate) = Number($GUI_CHECKED) Then
						_RunDos('REG ADD ' & $Key & "\" & $ind & ' /VE /D "' & $ns & '" /f')
						_RunDos('REG ADD ' & $Key & "\" & $ind & ' /V 1 /D "' & $CD & $distr & $ps & '" /f')
						If $ps2 <> '0' And $ps2 <> '' Then
							_RunDos('REG ADD ' & $Key & "\" & $ind & ' /V 2 /D "' & $CD & $distr & $ps2 & '" /f')
						EndIf
						If $ps3 <> '0' And $ps3 <> '' Then
							_RunDos('REG ADD ' & $Key & "\" & $ind & ' /V 3 /D "' & $CD & $distr & $ps3 & '" /f')
						EndIf
							If $reg <> '0' And $reg <> '' Then
							_RunDos('REG ADD ' & $Key & "\" & $ind & ' /V 4 /D "' & 'REGEDIT /S ' & $CD & $distr & $reg & '" /f')
						EndIf
					EndIf
					
				Next
				Exit
			EndFunc
			
Func OsCreateChBox ( $Label, $posX, $posY, $L, $H)
	$Curr_CHB = GuiCtrlCreateCheckbox($Label, $posX, $posY, $L, $H)
	GUICtrlSetState ($Curr_CHB, 1)
	Return $Curr_CHB
	EndFunc
Формат ini в этом случае такой:
AppInstall.ini
Код: Выделить весь код
; Примечание, если в пути есть кавычки - перед ними необходим слеш \" !!!

[1]
Name=Outpost Firewall 3.51
Path=OutPost\setup.exe
Path2=
Path3=
Cond=
Reg=

...

[3]
Name=Ligth Alloy 4
Path=LA\LAsetup.exe /S \"/Path=%ProgramFiles%\LA\" /StMenu=1 /Desktop=1 /Assoc=0
Path2=
Path3=
Cond=
Reg=
....

[14]
Name=PoverDVD 7
Path=PoverDVD\PowerDVD7.exe
Path2=PoverDVD\Russ.exe
Path3=
Cond=
Reg=PoverDVD\powerdvd.reg
Параметр Cond - никак пока не используется.
Имена секций - цифры по порядку,
Я компилированный скрипт и ini файл кидаю в $OEM$ и вызываю из батника через cmdlines.txt после установки DX и пр. софта необходимого на любой машине.

Отправлено: 16:48, 08-08-2006 | #254

Название темы: Вопросы По WPI