Ок, ловите, только чур ногами не больно пинать
т.к. с 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 и пр. софта необходимого на любой машине.