Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как правильно записать скрипт (http://forum.oszone.net/showthread.php?t=173577)

Centrinar 19-04-2010 21:12 1396456

Как правильно записать скрипт
 
Код:

Local $check[6], $prog[6]
$check[1] = GUICtrlCreateCheckbox("Прог1", 10, 30, 100, 15)
$check[2] = GUICtrlCreateCheckbox("Прог2", 10, 55, 100, 15)
$check[3] = GUICtrlCreateCheckbox("Прог3", 10, 80, 100, 15)
$check[4] = GUICtrlCreateCheckbox("Прог4", 10, 105, 100, 15)
$check[5] = GUICtrlCreateCheckbox("Прог5", 10, 130, 100, 15)

$prog[1] = "Setup.exe"
$prog[2] = "Seup2.exe"
$prog[3] = "Seup3.exe"
$prog[4] = "Seup4.exe"
$prog[5] = "Seup5.exe"

 For $i = 1 to 5
                If GUICtrlRead($check[$i]) = 1 Then
                        RunWait($prog[$i])
                EndIf
Next

Смысл в том что при выборе проги1 должен запуститься именно Setup1 и т.д. Но в итоге он постоянно запускает только Setup1.

madmasles 19-04-2010 21:56 1396492

Centrinar,
А так попробуйте:
Код:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Dim $check[6], $prog[6]
$prog[1] = "Setup.exe"
$prog[2] = "Seup2.exe"
$prog[3] = "Seup3.exe"
$prog[4] = "Seup4.exe"
$prog[5] = "Seup5.exe"
$Form1 = GUICreate("", 100, 150, -1, -1)
$check[1] = GUICtrlCreateCheckbox("Прог1", 10, 10, 100, 15)
$check[2] = GUICtrlCreateCheckbox("Прог2", 10, 30, 100, 15)
$check[3] = GUICtrlCreateCheckbox("Прог3", 10, 50, 100, 15)
$check[4] = GUICtrlCreateCheckbox("Прог4", 10, 70, 100, 15)
$check[5] = GUICtrlCreateCheckbox("Прог5", 10, 90, 100, 15)
$Button1 = GUICtrlCreateButton("Button1", 10, 110, 80, 25)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            For $i = 1 To 5
                If GUICtrlRead($check[$i]) = 1 Then
                    MsgBox(0, "", $prog[$i])
                EndIf
            Next
    EndSwitch
WEnd


Centrinar 19-04-2010 22:13 1396502

Если с
Код:

MsgBox(0, "", $prog[$i])
то все работает как надо, но если поставить
Код:

RunWait($prog[$i])
то он опять запускает только Прог1

madmasles 19-04-2010 22:28 1396507

Centrinar,
Может быть, это потому, что Вы используете RunWait и скрипт ждет, пока не отработает 1-ая программа. Я скомпилировал 5 скриптов вида MsgBox(0, "1", "1", 5) - ...- MsgBox(0, "5", "5", 5) и у меня все работает.

Centrinar 19-04-2010 22:44 1396518

согласен, но как сделать с RunWait, нужно что бы он не запускал следующую программу пока не закончил с предыдущей

madmasles 19-04-2010 22:54 1396523

Centrinar,
Я же не знаю, что за программа Setup.exe, что она делает и сколько времени отрабатывает.
Цитата:

Я скомпилировал 5 скриптов
у меня с RunWait отрабатывает.

Centrinar 19-04-2010 23:10 1396529

Нашел свою тупую ошибку "Seup2.exe".Все работает СПС

Creat0R 19-04-2010 23:36 1396547

Цитата:

Цитата Centrinar
то он опять запускает только Прог1 »

Этот пример запустит всё что отмечено птичкой, по очерёдности.

Кстати я бы так сделал, в целях оптимизации:

Код:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

; Только эту строку и нужно править для добавления новых, или удаления пунктов ;)
Global $sProgs = 'Setup.exe=Прог1|Seup2.exe=Прог2|Seup3.exe=Прог3|Seup4.exe=Прог4|Seup5.exe=Прог5'

Global Const $aProgs = StringSplit($sProgs, '|')
Global $anCheckBoxes[$aProgs[0]+1]

$Form1 = GUICreate("", 100, 150, -1, -1)

$iTop = 10

For $i = 1 To $aProgs[0]
    $anCheckBoxes[$i] = GUICtrlCreateCheckbox(StringRegExpReplace($aProgs[$i], '^.*=', ''), 10, $iTop, 100, 15)
    $iTop += 20
Next

$Button1 = GUICtrlCreateButton("Button1", 10, 110, 80, 25)

GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            For $i = 1 To $aProgs[0]
                If GUICtrlRead($anCheckBoxes[$i]) = 1 Then
                    $sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
                    $sProgExe = StringRegExpReplace($aProgs[$i], '=.*$', '')

                    MsgBox(64, $sProgName, $sProgExe)
                EndIf
            Next
    EndSwitch
WEnd


Centrinar 20-04-2010 00:13 1396561

Creat0R СПАСИБО!


Время: 01:03.

Время: 01:03.
© OSzone.net 2001-