Что нового

Помогите оптимизировать скрипт

Статус
Закрыто для дальнейших ответов.

wolk88

Новичок
Сообщения
12
Репутация
0
Доброго времени суток.
В написании скриптов, опыта нет. Было нужно сделать скрипт на установку 9-20 программ в автоматическом режиме. Автоматизация программ сделана. Теперь борюсь с GUI. Написал некое подобие скрипта. Он даже работает. :shok: (Что несколько удивило.) Но получился слишком громоздким. Может есть идеи как его оптимизировать?
Форумы читал. Даже про переменные слышал. :smile: Но не разобрался. :(
Код:
#include <GUIConstants.au3>
;~ Вводим переменные
$C = 1
;~ Переменные меню
$GUI1 = GUICreate("ПК МАКСИМУМ", 500, 450, -1, -1)
$Buttonexit = GUICtrlCreateButton("Отмена", 200, 380, 60)
$Buttonnext = GUICtrlCreateButton("Начать установку", 50, 380, 100)
;~ Переменные Чекбоксов
$check1 = GUICtrlCreateCheckbox ( "1 Антивирусы", 10, 30, 190 ,20 , -1 )
$check2 = GUICtrlCreateCheckbox ( "2 Архиваторы", 10, 50, 190 ,20 , -1 )
$check3 = GUICtrlCreateCheckbox ( "3 Браузеры", 10, 70, 190 ,20 , -1 )
$check4 = GUICtrlCreateCheckbox ( "4 Кодаки", 10, 90, 190 ,20 , -1 )
$check5 = GUICtrlCreateCheckbox ( "5 Запись дисков", 10, 110, 190 ,20 , -1 )
$check6 = GUICtrlCreateCheckbox ( "6 Офисные приложения", 10, 130, 190 ,20 , -1 )
$check7 = GUICtrlCreateCheckbox ( "7 Редактирование фото", 10, 150, 190 ,20 , -1 )
$check8 = GUICtrlCreateCheckbox ( "8 Редактирование звука", 10, 170, 190 ,20 , -1 )
$check9 = GUICtrlCreateCheckbox ( "9 Конвертирование видео", 10, 190, 190 ,20 , -1 )
$check10 = GUICtrlCreateCheckbox ( "10 Графический редактор", 10, 210, 190 ,20 , -1 )
$check11 = GUICtrlCreateCheckbox ( "11 домашняя бухгалтерия", 10, 230, 190 ,20 , -1 )
$check12 = GUICtrlCreateCheckbox ( "12 Общение в сети интернет", 10, 250, 190 ,20 , -1 )
$check13 = GUICtrlCreateCheckbox ( "13 Каталоги фильмов", 10, 270, 190 ,20 , -1 )
$check14 = GUICtrlCreateCheckbox ( "14 Чистка реестра", 10, 290, 190 ,20 , -1 )
$check1t = GUICtrlCreateCheckbox ( "т Игры образовательные", 10, 310, 190 ,20 , -1 )
$check2t = GUICtrlCreateCheckbox ( "т Планетарий", 10, 330, 190 ,20 , -1 )
$check3t = GUICtrlCreateCheckbox ( "т Рисовалка", 10, 350, 190 ,20 , -1 )
;~ Переменные для установки ПО
$1 = 1
$2 = 1
$3 = 1
$4 = 1
$5 = 1
$6 = 1
$7 = 1
$8 = 1
$9 = 1
$10 = 1
$11 = 1
$12 = 1
$13 = 1
$14 = 1
$1t = 1
$2t = 1
$3t = 1
;~ Построение меню
GUISetState( $GUI1)
GUICtrlCreateLabel("Список устанавливаемого ПО", 150, 10)
GUICtrlCreateCheckbox ( "1 Антивирусы", 10, 30, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "2 Архиваторы", 10, 50, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "3 Браузеры", 10, 70, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "4 Кодаки", 10, 90, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "5 Запись дисков", 10, 110, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "6 Офисные приложения", 10, 130, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "7 Редактирование фото", 10, 150, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "8 Редактирование звука", 10, 170, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "9 Конвертирование видео", 10, 190, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "10 Графический редактор", 10, 210, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "11 домашняя бухгалтерия", 10, 230, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "12 Общение в сети интернет", 10, 250, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "13 Каталоги фильмов", 10, 270, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "14 Чистка реестра", 10, 290, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "т Игры образовательные", 10, 310, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "т Планетарий", 10, 330, 190 ,20 , -1 )
GUICtrlCreateCheckbox ( "т Рисовалка", 10, 350, 190 ,20 , -1 )
GUICtrlCreateButton("Начать установку", 50, 380, 100)
GUICtrlCreateButton("Отмена", 200, 380, 60)

GUISetState()

Do 
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $Buttonexit
            If GUICtrlRead($Buttonexit) = "Отмена" Then 
				Exit
			EndIf
		Case $check1
			If GUICtrlRead($check1) = 1 Then
				$1 = 5
			Else 
				$1 = 0
			EndIf
		Case $check2
			If GUICtrlRead($check2) = 1 Then
				$2 =  5
			Else 
				$2 = 0
			EndIf
		Case $check3
			If GUICtrlRead($check3) = 1 Then
				$3 = 5
			Else 
				$3 = 0
			EndIf
		Case $check4
			If GUICtrlRead($check4) = 1 Then
				$4 = 5
			Else 
				$4 = 0
			EndIf
		Case $check5
			If GUICtrlRead($check5) = 1 Then
				$5 = 5
			Else 
				$5 = 0
			EndIf
		Case $check6
			If GUICtrlRead($check6) = 1 Then
				$6 = 5
			Else 
				$6 = 0
			EndIf
		Case $check7
			If GUICtrlRead($check7) = 1 Then
				$7 = 5
			Else 
				$7 = 0
			EndIf
		Case $check8
			If GUICtrlRead($check8) = 1 Then
				$8 = 5
			Else 
				$8 = 0
			EndIf
		Case $check9
			If GUICtrlRead($check9) = 1 Then
				$9 = 5
			Else 
				$9 = 0
			EndIf
		Case $check10
			If GUICtrlRead($check10) = 1 Then
				$10 = 5
			Else 
				$10 = 0
			EndIf
		Case $check11
			If GUICtrlRead($check11) = 1 Then
				$11 = 5
			Else 
				$11 = 0
			EndIf
		Case $check12
			If GUICtrlRead($check12) = 1 Then
				$12 = 5
			Else 
				$12 = 0
			EndIf
		Case $check13
			If GUICtrlRead($check13) = 1 Then
				$13 = 5
			Else 
				$13 = 0
			EndIf
		Case $check14
			If GUICtrlRead($check14) = 1 Then
				$14 = 5
			Else 
				$14 = 0
			EndIf
		Case $check1t
			If GUICtrlRead($check1t) = 1 Then
				$1t = 5
			Else 
				$1t = 0
			EndIf
		Case $check2t
			If GUICtrlRead($check2t) = 1 Then
				$2t = 5
			Else 
				$2t = 0
			EndIf
		Case $check3t
			If GUICtrlRead($check3t) = 1 Then
				$3t = 5
			Else 
				$3t = 0
			EndIf
		Case $Buttonnext
            If GUICtrlRead($Buttonnext) = "Начать установку" Then
				$C=6
			EndIf
    EndSwitch
Until $C=6
;~ Установка
if $1 >= 2 Then
	msgbox(0,"state of the menuitem", "1")
EndIf
if $2 >= 2 Then
	msgbox(0,"state of the menuitem","2")
EndIf
if $3 >= 2 Then
	msgbox(0,"state of the menuitem","3")
EndIf
if $4 >= 2 Then
	msgbox(0,"state of the menuitem","4")
EndIf
if $5 >= 2 Then
	msgbox(0,"state of the menuitem","5")
EndIf
if $6 >= 2 Then
	msgbox(0,"state of the menuitem","6")
EndIf
if $7 >= 2 Then
	msgbox(0,"state of the menuitem","7")
EndIf
if $8 >= 2 Then
	msgbox(0,"state of the menuitem","8")
EndIf
if $9 >= 2 Then
	msgbox(0,"state of the menuitem","9")
EndIf
if $10 >= 2 Then
	msgbox(0,"state of the menuitem","10")
EndIf
if $11 >= 2 Then
	msgbox(0,"state of the menuitem","11")
EndIf
if $12 >= 2 Then
	msgbox(0,"state of the menuitem","12")
EndIf
if $13 >= 2 Then
	msgbox(0,"state of the menuitem","13")
EndIf
if $14 >= 2 Then
	msgbox(0,"state of the menuitem","14")
EndIf
if $1t >= 2 Then
	msgbox(0,"state of the menuitem","15")
EndIf
if $2t >= 2 Then
	msgbox(0,"state of the menuitem","16")
EndIf
if $3t >= 2 Then
	msgbox(0,"state of the menuitem","17")
EndIf
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
Код:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
Global $FUNC_CALL
;~ Переменные меню
Global $GUI1 = GUICreate("ПК МАКСИМУМ", 500, 450, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE,"GUI_Event")

;~ Переменные Чекбоксов
Global $check1  = GUICtrlCreateCheckbox ( "1 Антивирусы", 10, 30, 190 ,20 , -1 )
Global $check2  = GUICtrlCreateCheckbox ( "2 Архиваторы", 10, 50, 190 ,20 , -1 )
Global $check3  = GUICtrlCreateCheckbox ( "3 Браузеры", 10, 70, 190 ,20 , -1 )
Global $check4  = GUICtrlCreateCheckbox ( "4 Кодаки", 10, 90, 190 ,20 , -1 )
Global $check5  = GUICtrlCreateCheckbox ( "5 Запись дисков", 10, 110, 190 ,20 , -1 )
Global $check6  = GUICtrlCreateCheckbox ( "6 Офисные приложения", 10, 130, 190 ,20 , -1 )
Global $check7  = GUICtrlCreateCheckbox ( "7 Редактирование фото", 10, 150, 190 ,20 , -1 )
Global $check8  = GUICtrlCreateCheckbox ( "8 Редактирование звука", 10, 170, 190 ,20 , -1 )
Global $check9  = GUICtrlCreateCheckbox ( "9 Конвертирование видео", 10, 190, 190 ,20 , -1 )
Global $check10 = GUICtrlCreateCheckbox ( "10 Графический редактор", 10, 210, 190 ,20 , -1 )
Global $check11 = GUICtrlCreateCheckbox ( "11 домашняя бухгалтерия", 10, 230, 190 ,20 , -1 )
Global $check12 = GUICtrlCreateCheckbox ( "12 Общение в сети интернет", 10, 250, 190 ,20 , -1 )
Global $check13 = GUICtrlCreateCheckbox ( "13 Каталоги фильмов", 10, 270, 190 ,20 , -1 )
Global $check14 = GUICtrlCreateCheckbox ( "14 Чистка реестра", 10, 290, 190 ,20 , -1 )
Global $check15 = GUICtrlCreateCheckbox ( "т Игры образовательные", 10, 310, 190 ,20 , -1 )
Global $check16 = GUICtrlCreateCheckbox ( "т Планетарий", 10, 330, 190 ,20 , -1 )
Global $check17 = GUICtrlCreateCheckbox ( "т Рисовалка", 10, 350, 190 ,20 , -1 )

Global $Buttonexit = GUICtrlCreateButton("Отмена", 200, 380, 60)
GUICtrlSetOnEvent(-1,"GUI_Event")
Global $Buttonnext = GUICtrlCreateButton("Начать установку", 50, 380, 100)
GUICtrlSetOnEvent(-1,"GUI_Event")
GUISetState(@SW_SHOW)


While 1
   Sleep(500)
   If $FUNC_CALL<>"" Then
       Call($FUNC_CALL)
       $FUNC_CALL=""
   EndIf
Wend


Func GUI_Event()
	Switch @GUI_CTRLID
	Case $GUI_EVENT_CLOSE,$Buttonexit
	    Exit
        Case $Buttonnext
            $FUNC_CALL="Setup"
	EndSwitch
EndFunc


Func Setup()
   For $i=1 to 17
	 If GUICtrlRead(Eval("check"&$i))=1 Then
            MsgBox(0,"state of the menuitem", $i)
	 EndIf
   Next
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
И ещё одна оптимизация но основе последней:

Код:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)

Global $FUNC_CALL
Global $aCheckBoxes[17+1]
Global $aCB_Data = _
	StringSplit( _
		"1 Антивирусы|2 Архиваторы|3 Браузеры|4 Кодаки|5 Запись дисков|6 Офисные приложения|7 Редактирование фото|" & _
		"8 Редактирование звука|9 Конвертирование видео|10 Графический редактор|11 домашняя бухгалтерия|" & _
		"12 Общение в сети интернет|13 Каталоги фильмов|14 Чистка реестра|т Игры образовательные|т Планетарий|т Рисовалка", "|")

;~ Переменные меню
Global $GUI1 = GUICreate("ПК МАКСИМУМ", 500, 450, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUI_Event")

;~ Переменные Чекбоксов
$iTop = 30

For $i = 1 To 17
	$aCheckBoxes[$i] = GUICtrlCreateCheckbox($aCB_Data[$i], 10, $iTop, 190, 20, -1)
	$iTop += 20
Next

Global $Buttonexit = GUICtrlCreateButton("Отмена", 200, 380, 60)
GUICtrlSetOnEvent(-1, "GUI_Event")

Global $Buttonnext = GUICtrlCreateButton("Начать установку", 50, 380, 100)
GUICtrlSetOnEvent(-1, "GUI_Event")

GUISetState(@SW_SHOW)

While 1
	Sleep(500)
	
	If $FUNC_CALL <> "" Then
		Call($FUNC_CALL)
		$FUNC_CALL = ""
	EndIf
WEnd

Func GUI_Event()
	Switch @GUI_CtrlId
		Case $GUI_EVENT_CLOSE, $Buttonexit
			Exit
		Case $Buttonnext
			$FUNC_CALL = "Setup"
	EndSwitch
EndFunc

Func Setup()
	For $i = 1 To 17
		If GUICtrlRead($aCheckBoxes[$i]) = 1 Then
			MsgBox(0, "state of the menuitem", $i)
		EndIf
	Next
EndFunc


:smile:

В результате оптимизировали скрипт в 237 строк, до 56-ти + удобство использования (“перспектива на будущее” ;) ).
 
Автор
W

wolk88

Новичок
Сообщения
12
Репутация
0
Огромное спасибо за помощь. Я бы не смог так оптимизировать скрипт. :smile: Однако, возникли вопросы.
1. Как сделать так, чтобы все галочки были сразу отмечены?
2. Как сделать так, чтобы программы начали устанавливться?
Я так понимаю, что для этого нужно на каждую установку ввести переменную. :smile: Но как этого добиться, не понимаю. Перечитал хелпы.... способ был - добавлять в скрипт, файлы других скриптов. Но может можно по другому?
Код:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
Global $FUNC_CALL
;~ Переменные меню
Global $GUI1 = GUICreate("ПК МАКСИМУМ", 500, 450, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE,"GUI_Event")
 
;~ Переменные Чекбоксов
Global $check1  = GUICtrlCreateCheckbox ( "1 Антивирусы", 10, 30, 190 ,20 , -1 )
Global $check2  = GUICtrlCreateCheckbox ( "2 Архиваторы", 10, 50, 190 ,20 , -1 )
Global $check3  = GUICtrlCreateCheckbox ( "3 Браузеры", 10, 70, 190 ,20 , -1 )
Global $check4  = GUICtrlCreateCheckbox ( "4 Кодаки", 10, 90, 190 ,20 , -1 )
Global $check5  = GUICtrlCreateCheckbox ( "5 Запись дисков", 10, 110, 190 ,20 , -1 )
Global $check6  = GUICtrlCreateCheckbox ( "6 Офисные приложения", 10, 130, 190 ,20 , -1 )
Global $check7  = GUICtrlCreateCheckbox ( "7 Редактирование фото", 10, 150, 190 ,20 , -1 )
Global $check8  = GUICtrlCreateCheckbox ( "8 Редактирование звука", 10, 170, 190 ,20 , -1 )
Global $check9  = GUICtrlCreateCheckbox ( "9 Конвертирование видео", 10, 190, 190 ,20 , -1 )
Global $check10 = GUICtrlCreateCheckbox ( "10 Графический редактор", 10, 210, 190 ,20 , -1 )
Global $check11 = GUICtrlCreateCheckbox ( "11 домашняя бухгалтерия", 10, 230, 190 ,20 , -1 )
Global $check12 = GUICtrlCreateCheckbox ( "12 Общение в сети интернет", 10, 250, 190 ,20 , -1 )
Global $check13 = GUICtrlCreateCheckbox ( "13 Каталоги фильмов", 10, 270, 190 ,20 , -1 )
Global $check14 = GUICtrlCreateCheckbox ( "14 Чистка реестра", 10, 290, 190 ,20 , -1 )
Global $check15 = GUICtrlCreateCheckbox ( "т Игры образовательные", 10, 310, 190 ,20 , -1 )
Global $check16 = GUICtrlCreateCheckbox ( "т Планетарий", 10, 330, 190 ,20 , -1 )
Global $check17 = GUICtrlCreateCheckbox ( "т Рисовалка", 10, 350, 190 ,20 , -1 )
 
Global $Buttonexit = GUICtrlCreateButton("Отмена", 200, 380, 60)
GUICtrlSetOnEvent(-1,"GUI_Event")
Global $Buttonnext = GUICtrlCreateButton("Начать установку", 50, 380, 100)
GUICtrlSetOnEvent(-1,"GUI_Event")
GUISetState(@SW_SHOW)
 
 
While 1
   Sleep(500)
   If $FUNC_CALL<>"" Then
       Call($FUNC_CALL)
       $FUNC_CALL=""
   EndIf
Wend
 
 
Func GUI_Event()
	Switch @GUI_CTRLID
	Case $GUI_EVENT_CLOSE,$Buttonexit
	    Exit
        Case $Buttonnext
            $FUNC_CALL="Setup"
	EndSwitch
EndFunc
 
 
Func Setup()
   For $i=1 to 17
	 If GUICtrlRead(Eval("check"&$i))=1 Then
            MsgBox(0,"state of the menuitem", $i)
	 EndIf
   Next
EndFunc


#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.0.0
 Author:         

 Script Function:
	Template AutoIt script. v.1.0

#ce ----------------------------------------------------------------------------
;2 Установка 7-Zip
;Вводим переменные
$7Zip = "7-Zip 4.65 Setup"
;Запуск программы
Run ('\AutoPlay\Docs\Programs\2 Архиваторы\7z465.exe')
;Согласие с выбранным путем установки
WinWaitActive( $7Zip , "Setup will install 7-Zip 4.65")
sleep (1000)
ControlClick( $7Zip , "Setup will install 7-Zip 4.65", "Button2")
;Завершение установки
WinWaitActive( $7Zip , "Completing the 7-Zip")
sleep (1000)
ControlClick( $7Zip , "Completing the 7-Zip", "Button2")
;-----------------------------------------------------------------------------------------------------------------------------




#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.0.0
 Author:         

 Script Function:
	Template AutoIt script. v.1.0

#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
;3 Установка Опера
;Вводим переменные
$Opera = "Opera 10.00 - мастер установки InstallShield"
$Opera_lang = "Выбор языка установки"
;Запуск программы
run ('\AutoPlay\Docs\Programs\3 Браузеры\Opera_1000_int_Setup.exe')
;Если OPERA установленна, запускается процесс деинсталяции. Затем установка по новой
Do
	if WinActive( $Opera , "Мастер установки") Then
	ControlClick( $Opera , "Мастер установки", "Button1")
	WinWaitActive( $Opera , "Обслуживание программы")
	Sleep (1000)
	ControlClick( $Opera , "Обслуживание программы", "Button3")
	ControlClick( $Opera , "Обслуживание программы", "Button5")
	WinWaitActive( $Opera , " Удалить программу")
	Sleep (1000)
	ControlClick( $Opera , " Удалить программу", "Button1")
	WinWaitActive( $Opera , "Мастер установки")
	Sleep (1000)
	ControlClick( $Opera , "Мастер установки", "Button2")
	run ('\AutoPlay\Docs\Programs\3 Браузеры\Opera_1000_int_Setup.exe')
	EndIf
Until WinActive ( $Opera_lang , "Выберите язык для этой установки из списка ниже")
;Выбор языка
WinWaitActive( $Opera_lang , "Выберите язык для этой установки из списка ниже")
Sleep (1000)
ControlClick( $Opera_lang , "Выберите язык для этой установки из списка ниже", "Button1")
;Начало установки
WinWaitActive( $Opera , "Установить")
Sleep (3000)
ControlClick( $Opera , "", "Button1")
;Далее (лиценз согл)
WinWaitActive( $Opera , "Лицензионное соглашение")
Sleep (1000)
ControlClick( $Opera , "Лицензионное соглашение", "Button1")
;Далее (Выбор варианта установки)
WinWaitActive( $Opera , "Этот мастер установит Opera на ваш компьютер")
Sleep (1000)
ControlClick( $Opera , "Этот мастер установит Opera на ваш компьютер", "Button1")
ControlClick( $Opera , "Этот мастер установит Opera на ваш компьютер", "Button2")
;Далее (Начало установки)
WinWaitActive( $Opera , "для начала установки")
Sleep (1000)
ControlClick( $Opera , "для начала установки", "Button1")
;Завершение установки
WinWaitActive( $Opera , "Мастер установки")
Sleep (1000)
ControlClick( $Opera , "Мастер установки", "Button3")
ControlClick( $Opera , "Мастер установки", "Button2")
;-----------------------------------------------------------------------------------------------------------------------------
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Можно и я вставлю свои 5 копеек :-[
Ещё одна оптимизация но основе оптимизации CreatoR'a (Все галочки сразу отмечены)

Код:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)

Global $FUNC_CALL
Global $aCB_Data = _
	StringSplit( _
		"1 Антивирусы|2 Архиваторы|3 Браузеры|4 Кодаки|5 Запись дисков|6 Офисные приложения|7 Редактирование фото|" & _
		"8 Редактирование звука|9 Конвертирование видео|10 Графический редактор|11 домашняя бухгалтерия|" & _
		"12 Общение в сети интернет|13 Каталоги фильмов|14 Чистка реестра|т Игры образовательные|т Планетарий|т Рисовалка", "|")
Global $aCheckBoxes[$aCB_Data[0] + 1]

;~ Переменные меню
Global $GUI1 = GUICreate("ПК МАКСИМУМ", 500, 450, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUI_Event")

;~ Переменные Чекбоксов
$iTop = 30

For $i = 1 To $aCB_Data[0]
	$aCheckBoxes[$i] = GUICtrlCreateCheckbox($aCB_Data[$i], 10, $iTop, 190, 20, -1)
	GUICtrlSetState(-1, $GUI_CHECKED)
	$iTop += 20
Next

Global $Buttonexit = GUICtrlCreateButton("Отмена", 200, 380, 60)
GUICtrlSetOnEvent(-1, "GUI_Event")

Global $Buttonnext = GUICtrlCreateButton("Начать установку", 50, 380, 100)
GUICtrlSetOnEvent(-1, "GUI_Event")

GUISetState(@SW_SHOW)

While 1
	Sleep(500)

	If $FUNC_CALL <> "" Then
		Call($FUNC_CALL)
		$FUNC_CALL = ""
	EndIf
WEnd

Func GUI_Event()
	Switch @GUI_CtrlId
		Case $GUI_EVENT_CLOSE, $Buttonexit
			Exit
		Case $Buttonnext
			$FUNC_CALL = "Setup"
	EndSwitch
EndFunc

Func Setup()
	For $i = 1 To $aCB_Data[0]
		If GUICtrlRead($aCheckBoxes[$i]) = 1 Then
			MsgBox(0, "state of the menuitem", $i)
		EndIf
	Next
EndFunc


Отпадает необходимость вручную указывать количество ЧекБоксов, в случае их увелечения.
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
wolk88 сказал(а):
2. Как сделать так, чтобы программы начали устанавливться?
Я так понимаю, что для этого нужно на каждую установку ввести переменную. :smile: Но как этого добиться, не понимаю. Перечитал хелпы.... способ был - добавлять в скрипт, файлы других скриптов. Но может можно по другому?

Вынеси листинги установок в отдельные функции, или в одну общую функцию и вызывай их(её) в зависимости от параметра получаемого в цикле функции Setup
 
Автор
W

wolk88

Новичок
Сообщения
12
Репутация
0
Цитата: wolk88 от Сегодня в 11:51:11

2. Как сделать так, чтобы программы начали устанавливться?
Я так понимаю, что для этого нужно на каждую установку ввести переменную. :smile: Но как этого добиться, не понимаю. Перечитал хелпы.... способ был - добавлять в скрипт, файлы других скриптов. Но может можно по другому?


Вынеси листинги установок в отдельные функции, или в одну общую функцию и вызывай их(её) в зависимости от параметра получаемого в цикле функции Setup

:smile: Я совсем недавно занимаюсь написанием скриптов. Слова листинг и общие функции вызывают у меня ужас и непонимание. Может есть какой нибудь пример который показывает как это делать?
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Вариант 1 (Первое что пришло в голову) :smile:

Код:
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)

Global $aCB_Data = StringSplit( _
		"1 Антивирусы|2 Архиваторы|3 Браузеры|4 Кодаки|5 Запись дисков|6 Офисные приложения|7 Редактирование фото|" & _
		"8 Редактирование звука|9 Конвертирование видео|10 Графический редактор|11 домашняя бухгалтерия|" & _
		"12 Общение в сети интернет|13 Каталоги фильмов|14 Чистка реестра|т Игры образовательные|т Планетарий|т Рисовалка", "|")
Global $aCheckBoxes[$aCB_Data[0] + 1]

;~ Переменные меню
Global $GUI1 = GUICreate("ПК МАКСИМУМ", 500, 450, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUI_Event")

;~ Переменные Чекбоксов
$iTop = 30
For $i = 1 To $aCB_Data[0]
	$aCheckBoxes[$i] = GUICtrlCreateCheckbox($aCB_Data[$i], 10, $iTop, 190, 20, -1)
	GUICtrlSetState(-1, $GUI_CHECKED)
	$iTop += 20
Next

Global $Buttonexit = GUICtrlCreateButton("Отмена", 200, 380, 60)
GUICtrlSetOnEvent(-1, "GUI_Event")

Global $Buttonnext = GUICtrlCreateButton("Начать установку", 50, 380, 100)
GUICtrlSetOnEvent(-1, "GUI_Event")

GUISetState(@SW_SHOW)

While 1
	Sleep(500)
WEnd

Func GUI_Event()
	Switch @GUI_CtrlId
		Case $GUI_EVENT_CLOSE, $Buttonexit
			Exit
		Case $Buttonnext
			For $i = 1 To $aCB_Data[0]
				If GUICtrlRead($aCheckBoxes[$i]) = 1 Then _Install($i)
			Next
	EndSwitch
EndFunc

Func _Install($iID)
	Local $sProgram = $aCB_Data[$iID]

	Switch $sProgram
		Case "1 Антивирусы"

		Case "2 Архиваторы"
			_Install_7Zip()

		Case "3 Браузеры"
			_Install_Opera()

		Case "4 Кодаки"

		Case "5 Запись дисков"

		Case "6 Офисные приложения"

		Case "7 Редактирование фото"

		Case "8 Редактирование звука"

		Case "9 Конвертирование видео"

		Case "10 Графический редактор"

		Case "11 домашняя бухгалтерия"

		Case "12 Общение в сети интернет"

		Case "13 Каталоги фильмов"

		Case "14 Чистка реестра"

		Case "т Игры образовательные"

		Case "т Планетарий"

		Case "т Рисовалка"

	EndSwitch
EndFunc

Func _Install_7Zip()
; Суда вставить скрипта установки
	MsgBox(0, "Установка", "7Zip")
EndFunc

Func _Install_Opera()
; Суда вставить скрипта установки
	MsgBox(0, "Установка", "Opera")
EndFunc


Вариант 2
Список ЧекБоксов хранится в ini файле, который должен назваться так же как и сам скрипт.
Структура ini файла должна быть такой:

[Название чекбокса]
Название Программы = Название Функции Установки


Код:
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)

Global $sIniFile = StringTrimRight(@ScriptFullPath, 3) & "ini"
Global $aCB_Data = IniReadSectionNames($sIniFile)
Global $aCheckBoxes[$aCB_Data[0] + 1]

;~ Переменные меню
Global $GUI1 = GUICreate("ПК МАКСИМУМ", 500, 450, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUI_Event")

;~ Переменные Чекбоксов
$iTop = 30
For $i = 1 To $aCB_Data[0]
	$aCheckBoxes[$i] = GUICtrlCreateCheckbox($aCB_Data[$i], 10, $iTop, 190, 20, -1)
	GUICtrlSetState(-1, $GUI_CHECKED)
	$iTop += 20
Next

Global $Buttonexit = GUICtrlCreateButton("Отмена", 200, 380, 60)
GUICtrlSetOnEvent(-1, "GUI_Event")

Global $Buttonnext = GUICtrlCreateButton("Начать установку", 50, 380, 100)
GUICtrlSetOnEvent(-1, "GUI_Event")

GUISetState(@SW_SHOW)

While 1
	Sleep(500)
WEnd

Func GUI_Event()
	Switch @GUI_CtrlId
		Case $GUI_EVENT_CLOSE, $Buttonexit
			Exit
		Case $Buttonnext
			For $i = 1 To $aCB_Data[0]
				If GUICtrlRead($aCheckBoxes[$i]) = 1 Then _Install($i)
			Next
	EndSwitch
EndFunc

Func _Install($iID)
; Заносим в Массив название программы и название функции установки
	Local $aProg_Func = IniReadSection($sIniFile, $aCB_Data[$iID])
	If @Error Then Return -1

	For $p = 1 To $aProg_Func[0][0]
; 	$aProg_Func[$p][0] - название программы
; 	$aProg_Func[$p][1] - название функции установки
		Call($aProg_Func[$p][1])
	Next

	Return 1
EndFunc

Func _Install_7Zip()
; Суда вставить скрипта установки
	MsgBox(0, "Установка", "7Zip")
EndFunc

Func _Install_Opera()
; Суда вставить скрипта установки
	MsgBox(0, "Установка", "Opera")
EndFunc


Код:
[1 Антивирусы]

[2 Архиваторы]
7Zip = _Install_7Zip

[3 Браузеры]
Opera = _Install_Opera

[4 Кодаки]

[5 Запись дисков]

[6 Офисные приложения]

[7 Редактирование фото]

[8 Редактирование звука]

[9 Конвертирование видео]

[10 Графический редактор]

[11 домашняя бухгалтерия]

[12 Общение в сети интернет]

[13 Каталоги фильмов]

[14 Чистка реестра]

[т Игры образовательные]

[т Планетарий]

[т Рисовалка]
 
Автор
W

wolk88

Новичок
Сообщения
12
Репутация
0
Огромное спасибо за помощь: El Panda, CreatoR, и особенно XpycT.
Тему я думаю закрывать не стоит т.к. примеров много и может это кому- нибудь поможет.
:IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1:
 
Статус
Закрыто для дальнейших ответов.
Верх