Что нового

Зависание скрипта при первом запуске.

A

at

Гость
День Добрый, Сообщество!

Прошу посмотреть скрипт. Проблема в том, что при первом запуске после перезагрузки компьютера, скомпилированный скрипт зависает. Приходиться закрывать его через диспетчер. После перезапуска работает нормально, и далее без проблем, до очередной перезагрузки системы. Разобраться самому на данном этапе собственного развития, не представляю возможным, потому, что использовал в конструкции кода много составляющих, представленных на этом форуме.

Утилита предназначена для смены сервера.
Тестирую на XP SP3
Autoit v 3.3.1.6

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

Global $vText_Server_1 = '10.10.1.10'
Global $vText_Server_2 = '10.10.1.20'
Global $vText_Server_3 = '10.10.1.30'
Global $vText_Server_4 = '10.10.1.40'
Global $vText_Server_5 = '10.10.1.50'
Global $vReplace_1 = '10.10.1.20|10.10.1.30|10.10.1.40|10.10.1.50'
Global $vReplace_2 = '10.10.1.10|10.10.1.30|10.10.1.40|10.10.1.50'
Global $vReplace_3 = '10.10.1.20|10.10.1.10|10.10.1.40|10.10.1.50'
Global $vReplace_4 = '10.10.1.20|10.10.1.30|10.10.1.10|10.10.1.50'
Global $vReplace_5 = '10.10.1.20|10.10.1.30|10.10.1.40|10.10.1.10'
Dim $aCheckBox[3][3] = [[2],['server.txt', '', 'Программу  А'],['user.config', '', 'Программу  Б']]

$hForm = GUICreate('Server_Change', 180, 267, 300, 165)
$vPageControl1 = GUICtrlCreateTab(0, 8, 180, 259)
$vTabSheet_General = GUICtrlCreateTabItem('      Выбор      ')
$vButton_Server_1 = GUICtrlCreateButton('Сервер 1', 8, 42, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_2 = GUICtrlCreateButton('Сервер 2', 8, 74, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_3 = GUICtrlCreateButton('Сервер 3', 8, 106, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_4 = GUICtrlCreateButton('Сервер 4', 8, 138, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_5 = GUICtrlCreateButton('Сервер 5', 8, 169, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel1 = GUICtrlCreateLabel('10.10.1.10', 96, 49, 61, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel2 = GUICtrlCreateLabel('10.10.1.20', 96, 81, 55, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel3 = GUICtrlCreateLabel('10.10.1.30', 96, 113, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel4 = GUICtrlCreateLabel('10.10.1.40', 96, 145, 79, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel5 = GUICtrlCreateLabel('10.10.1.50', 96, 177, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
For $i = 1 To $aCheckBox[0][0]
    $aCheckBox[$i][1] = GUICtrlCreateCheckbox('Выбрать ' & $aCheckBox[$i][2], 20, 205 + ($i - 1) * 30, 140, 20)
Next
$vTabSheet_Option = GUICtrlCreateTabItem('      Инфо      ')
$vGroup1 = GUICtrlCreateGroup('', 8, 40, 162, 97)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel6 = GUICtrlCreateLabel('Локальный          Интернет', 16, 56, 144, 18)
$vLabel7 = GUICtrlCreateLabel('10.10.1.10', 16, 72, 61, 18)
$vLabel8 = GUICtrlCreateLabel('10.10.1.20', 16, 88, 55, 18)
$vLabel9 = GUICtrlCreateLabel('    10.10.1.30', 88, 72, 73, 18)
$vLabel10 = GUICtrlCreateLabel('    10.10.1.40', 88, 88, 79, 18)
$vLabel11 = GUICtrlCreateLabel('    10.10.1.50', 88, 104, 73, 18)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$vGroup2 = GUICtrlCreateGroup('', 8, 144, 162, 50)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel12 = GUICtrlCreateLabel('www.autoit-script.ru', 40, 165, 98, 18)
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUICtrlCreateTabItem('')
ReDim $aCheckBox[3][2]
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
	    Case $vButton_Server_1
            $sFiles = ''
            For $i = 1 To $aCheckBox[0][0]
                If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
                    $sFiles &= $aCheckBox[$i][0] & '|'
                EndIf
            Next
            If Not $sFiles Then
                MsgBox(0, ' Info', 'Выберите программу', 0, $hForm)
                ContinueLoop
            EndIf
            $sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            If @error Then
                MsgBox(16, ' Info', 'Ошибка')
                Exit
            EndIf
            If Not $aSearch[0] Then
                MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
                Exit
            EndIf
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_1, $vText_Server_1) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
            Next
			Sleep (10)
			GUICtrlSetStyle($vButton_Server_2, 0, -1)
			GUICtrlSetStyle($vButton_Server_3, 0, -1)
			GUICtrlSetStyle($vButton_Server_4, 0, -1)
			GUICtrlSetStyle($vButton_Server_5, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_1, 0xCCFFCC)
	
		Case $vButton_Server_2
			$sFiles = ''
            For $i = 1 To $aCheckBox[0][0]
                If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
                    $sFiles &= $aCheckBox[$i][0] & '|'
                EndIf
            Next
            If Not $sFiles Then
                MsgBox(0, ' Info', 'Выберите программу', 0, $hForm)
                ContinueLoop
            EndIf
            $sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            If @error Then
                MsgBox(16, ' Info', 'Ошибка')
                Exit
            EndIf
            If Not $aSearch[0] Then
                MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
                Exit
            EndIf
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_2, $vText_Server_2) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
            Next
			Sleep (10)
			GUICtrlSetStyle($vButton_Server_1, 0, -1)
			GUICtrlSetStyle($vButton_Server_3, 0, -1)
			GUICtrlSetStyle($vButton_Server_4, 0, -1)
			GUICtrlSetStyle($vButton_Server_5, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_2, 0xCCFFCC)				
		Case $vButton_Server_3
            $sFiles = ''
            For $i = 1 To $aCheckBox[0][0]
                If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
                    $sFiles &= $aCheckBox[$i][0] & '|'
                EndIf
            Next
            If Not $sFiles Then
                MsgBox(0, ' Info', 'Выберите программу', 0, $hForm)
                ContinueLoop
            EndIf
            $sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            If @error Then
                MsgBox(16, ' Info', 'Ошибка')
                Exit
            EndIf
            If Not $aSearch[0] Then
                MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
                Exit
            EndIf
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_3, $vText_Server_3) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
            Next
			Sleep (10)			
			GUICtrlSetStyle($vButton_Server_1, 0, -1)
			GUICtrlSetStyle($vButton_Server_2, 0, -1)
			GUICtrlSetStyle($vButton_Server_4, 0, -1)
			GUICtrlSetStyle($vButton_Server_5, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_3, 0xCCFFCC)	
    Case $vButton_Server_4
			$sFiles = ''
            For $i = 1 To $aCheckBox[0][0]
                If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
                    $sFiles &= $aCheckBox[$i][0] & '|'
                EndIf
            Next
            If Not $sFiles Then
                MsgBox(0, ' Info', 'Выберите программу', 0, $hForm)
                ContinueLoop
            EndIf
            $sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            If @error Then
                MsgBox(16, ' Info', 'Ошибка')
                Exit
            EndIf
            If Not $aSearch[0] Then
                MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
                Exit
            EndIf
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_4, $vText_Server_4) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
            Next
			Sleep (10)			
			GUICtrlSetStyle($vButton_Server_1, 0, -1)
			GUICtrlSetStyle($vButton_Server_2, 0, -1)
			GUICtrlSetStyle($vButton_Server_3, 0, -1)
			GUICtrlSetStyle($vButton_Server_5, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_4, 0xCCFFCC)
		Case $vButton_Server_5
            $sFiles = ''
            For $i = 1 To $aCheckBox[0][0]
                If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
                    $sFiles &= $aCheckBox[$i][0] & '|'
                EndIf
            Next
            If Not $sFiles Then
                MsgBox(0, ' Info', 'Выберите программу', 0, $hForm)
                ContinueLoop
            EndIf
            $sFiles = StringTrimRight($sFiles, 1)
			$aSearch = _FileSearch('C:', $sFiles, 1)
            If @error Then
                MsgBox(16, ' Info', 'Ошибка')
                Exit
            EndIf
            If Not $aSearch[0] Then
                MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
                Exit
            EndIf
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_5, $vText_Server_5) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
	        Next
			Sleep (10)			
			GUICtrlSetStyle($vButton_Server_1, 0, -1)
			GUICtrlSetStyle($vButton_Server_2, 0, -1)
			GUICtrlSetStyle($vButton_Server_3, 0, -1)
			GUICtrlSetStyle($vButton_Server_4, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_5, 0xCCFFCC)	
    EndSwitch
WEnd

Func _FileSearch($s_Path_Search, $s_File_Mask = '*', $i_Flag = 0, $i_SubDir = 1)

    Local $s_Out, $a_Out, $s_Read, $h_Dir, $s_Attrib, $s_Subdir, $s_Parameter, $a_Masks

    If StringRight($s_Path_Search, 1) == '\' Then
        $s_Path_Search = StringTrimRight($s_Path_Search, 1)
    EndIf
    $a_Masks = StringSplit($s_File_Mask, '|')
    For $i = 1 To $a_Masks[0]
        $s_Parameter &= '"' & $s_Path_Search & '\' & $a_Masks[$i] & '";'
    Next
    $s_Parameter = StringTrimRight($s_Parameter, 1)
    If $i_SubDir Then
        $s_Subdir = ' /S /B'
    Else
        $s_Subdir = ' /B'
    EndIf
    Switch $i_Flag
        Case 1
            $s_Attrib = ' /A-D'
        Case 2
            $s_Attrib = ' /AD'
        Case Else
            $s_Attrib = ' /A'
    EndSwitch
    $s_Parameter &= $s_Subdir & $s_Attrib
    $s_Out = StringToBinary('0' & @CRLF, 2)
    $h_Dir = Run(@ComSpec & ' /U /C DIR ' & $s_Parameter, @SystemDir, @SW_HIDE, 6)
    If Not $h_Dir Then Return SetError(1)
    While 1
        $s_Read = StdoutRead($h_Dir, False, True)
        If @error Then
            ExitLoop
        EndIf
        If $s_Read Then
            $s_Out &= $s_Read
        EndIf
        Sleep(10)
    WEnd
    $a_Out = StringRegExp(BinaryToString($s_Out, 2), '[^\r\n]+', 3)
    If @error Then Return SetError(1)
    $a_Out[0] = UBound($a_Out) - 1
    Return $a_Out
EndFunc   ;==>_FileSearch
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Re: Зависание скомпилированного скрипта при первом запуске.

at [?]
Разобраться самому на данном этапе собственного развития, не представляю возможным, потому, что использовал в конструкции кода много составляющих, представленных на этом форуме

Зачем же создавать такую "Простыню"
У тебя же куча одинаковых фрагментов.
Почемы бы не сделать обработку сообщений через обращения к функциям

Типа :

;
Код:
..............
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $vButton_Server_1
			aaa(1)
        Case $vButton_Server_2
			aaa(2)
       ;......................
     EndSwitch
WEnd
	
Func aaa($iServer)
   ;...................
EndFunc


Легче самому будет.
Скорее всего у тебя при 1-м запуске происходит не зависание, а длительный поиск файлов с занесением их в кэш. Попробуй подождать несколько минут.
При повторном пуске выполняется уже быстрый поиск из кэша.
После перезагрузки системы кэш приходится заново обновлять.

Я обычно даю на поиск при 1-м пуске до 7 минут. При этом прочесывает весь комп.
Затем любой поиск выполняется за 1-3 секунды
 
Автор
A

at

Гость
Re: Зависание скомпилированного скрипта при первом запуске.

Зачем же создавать такую "Простыню"
У тебя же куча одинаковых фрагментов...
Когда я создаю функцию вот с этим участком кода:

Код:
$sFiles = ''
            For $i = 1 To $aCheckBox[0][0]
                If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
                    $sFiles &= $aCheckBox[$i][0] & '|'
                EndIf
            Next
            If Not $sFiles Then
                MsgBox(0, ' Info', 'Выберите программу', 0, $hForm)
                ContinueLoop
            EndIf
            $sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            If @error Then
                MsgBox(16, ' Info', 'Ошибка')
                Exit
            EndIf
            If Not $aSearch[0] Then
                MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
                Exit
            EndIf
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_1, $vText_Server_1) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
            Next

Появляется ошибка: ERROR: 'ContinueLoop' not allowed outside loop
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: Зависание скомпилированного скрипта при первом запуске.

at [?]
Появляется ошибка: ERROR: 'ContinueLoop' not allowed outside loop
Версия AutoIt 3.3.8.0?

Не прочитал, что в функции, извините. :-[
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Re: Зависание скомпилированного скрипта при первом запуске.

at [?]
Появляется ошибка: ERROR: 'ContinueLoop' not allowed outside loop

Да ты посмотри на код. (свою ф-ю)
ContinueLoop ставится только внутри цикла.
Когда это было не в ф-ии, это было внутри цикла :While 1-Wend
Здесь же в ф-ии у тебя ContinueLoop стоит вне цикла, поэтому надо ставить Return

Что такое ContinueLoop - это перейти к следующему элементк цикла (вне цикла это нонсенс)


Добавлено:
Сообщение автоматически объединено:

А почему в названии темы скомпиллированнный скрипт?
Зачем компиллировать неотлаженный скрипт.?
Ты в каком редакторе пишешь ?
Отладить сначала (в Scite : F5) надо
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
at
так сказали же, ContinueLoop должен внутри цикла. ошибка указывает на это
 
Автор
A

at

Гость
Скорее всего у тебя при 1-м запуске происходит не зависание, а длительный поиск файлов с занесением их в кэш.
Действительно при первом запуске скрипт просто долго ищиет файлы. У меня получилось 35 сек. Проблема была в этом.
так сказали же, ContinueLoop должен внутри цикла. ошибка указывает на это
Kaster, спасибо, это я понял. ContinueLoop я исключил из функции Err_1, а Return применить не понял как. В связи с этим, если к примеру запустить скрипт и не выделить чекбокс появляется информационное окошко, после закрытия которого скрипт зависает. Подскажите, где ошибка ?
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

Global $vText_Server_1 = '10.10.1.10'
Global $vText_Server_2 = '10.10.1.20'
Global $vText_Server_3 = '10.10.1.30'
Global $vText_Server_4 = '10.10.1.40'
Global $vText_Server_5 = '10.10.1.50'
Global $vReplace_1 = '10.10.1.20|10.10.1.30|10.10.1.40|10.10.1.50'
Global $vReplace_2 = '10.10.1.10|10.10.1.30|10.10.1.40|10.10.1.50'
Global $vReplace_3 = '10.10.1.20|10.10.1.10|10.10.1.40|10.10.1.50'
Global $vReplace_4 = '10.10.1.20|10.10.1.30|10.10.1.10|10.10.1.50'
Global $vReplace_5 = '10.10.1.20|10.10.1.30|10.10.1.40|10.10.1.10'
Dim $aCheckBox[3][3] = [[2],['server.txt', '', 'Программу  А'],['user.config', '', 'Программу  Б']]

$hForm = GUICreate('Server_Change', 180, 267, 300, 165)
$vPageControl1 = GUICtrlCreateTab(0, 8, 180, 259)
$vTabSheet_General = GUICtrlCreateTabItem('      Выбор      ')
$vButton_Server_1 = GUICtrlCreateButton('Сервер 1', 8, 42, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_2 = GUICtrlCreateButton('Сервер 2', 8, 74, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_3 = GUICtrlCreateButton('Сервер 3', 8, 106, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_4 = GUICtrlCreateButton('Сервер 4', 8, 138, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_5 = GUICtrlCreateButton('Сервер 5', 8, 169, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel1 = GUICtrlCreateLabel('10.10.1.10', 96, 49, 61, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel2 = GUICtrlCreateLabel('10.10.1.20', 96, 81, 55, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel3 = GUICtrlCreateLabel('10.10.1.30', 96, 113, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel4 = GUICtrlCreateLabel('10.10.1.40', 96, 145, 79, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel5 = GUICtrlCreateLabel('10.10.1.50', 96, 177, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
For $i = 1 To $aCheckBox[0][0]
    $aCheckBox[$i][1] = GUICtrlCreateCheckbox('Выбрать ' & $aCheckBox[$i][2], 20, 205 + ($i - 1) * 30, 140, 20)
Next
$vTabSheet_Option = GUICtrlCreateTabItem('      Инфо      ')
$vGroup1 = GUICtrlCreateGroup('', 8, 40, 162, 97)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel6 = GUICtrlCreateLabel('Локальный          Интернет', 16, 56, 144, 18)
$vLabel7 = GUICtrlCreateLabel('10.10.1.10', 16, 72, 61, 18)
$vLabel8 = GUICtrlCreateLabel('10.10.1.20', 16, 88, 55, 18)
$vLabel9 = GUICtrlCreateLabel('    10.10.1.30', 88, 72, 73, 18)
$vLabel10 = GUICtrlCreateLabel('    10.10.1.40', 88, 88, 79, 18)
$vLabel11 = GUICtrlCreateLabel('    10.10.1.50', 88, 104, 73, 18)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$vGroup2 = GUICtrlCreateGroup('', 8, 144, 162, 50)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel12 = GUICtrlCreateLabel('www.autoit-script.ru', 40, 165, 98, 18)
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUICtrlCreateTabItem('')
ReDim $aCheckBox[3][2]
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
	    Case $vButton_Server_1
			$sFiles = ''
			Err_1()
            $sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            Err_2()
			For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_1, $vText_Server_1) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
            Next
			Color_But1()
	
		Case $vButton_Server_2
			$sFiles = ''
			Err_1()
			$sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            Err_2()
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_2, $vText_Server_2) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
            Next
			Color_But2()
			
		Case $vButton_Server_3
			$sFiles = ''
			Err_1()
            $sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            Err_2()
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_3, $vText_Server_3) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
            Next
            Color_But3()
			
        Case $vButton_Server_4
			$sFiles = ''
			Err_1()
            $sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            Err_2()
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_4, $vText_Server_4) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
            Next
			Color_But4()
			
		Case $vButton_Server_5
			$sFiles = ''
			Err_1()
            $sFiles = StringTrimRight($sFiles, 1)
            $aSearch = _FileSearch('C:', $sFiles, 1)
            Err_2()
            For $i = 1 To $aSearch[0]
                $vRead = FileRead($aSearch[$i]) ;Считываем
                $vOpen = FileOpen($aSearch[$i], 2) ;Открываем
                $vReplace = StringRegExpReplace($vRead, $vReplace_5, $vText_Server_5) ;Изменяем
                FileWrite($vOpen, $vReplace) ;Переписываем
                FileClose($vOpen) ;Закрываем
	        Next
			Color_But5()
			
    EndSwitch
WEnd

Func Err_1()

            For $i = 1 To $aCheckBox[0][0]
                If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
                    $sFiles &= $aCheckBox[$i][0] & '|'
                EndIf
            Next
            If Not $sFiles Then
                MsgBox(0, ' Info', 'Выберите программу', 0, $hForm)
			 EndIf
		 
EndFunc

Func Err_2()
	            If @error Then
                MsgBox(16, ' Info', 'Ошибка')
                Exit
            EndIf
            If Not $aSearch[0] Then
                MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
                Exit
            EndIf
EndFunc

Func _FileSearch($s_Path_Search, $s_File_Mask = '*', $i_Flag = 0, $i_SubDir = 1)

    Local $s_Out, $a_Out, $s_Read, $h_Dir, $s_Attrib, $s_Subdir, $s_Parameter, $a_Masks

    If StringRight($s_Path_Search, 1) == '\' Then
        $s_Path_Search = StringTrimRight($s_Path_Search, 1)
    EndIf
    $a_Masks = StringSplit($s_File_Mask, '|')
    For $i = 1 To $a_Masks[0]
        $s_Parameter &= '"' & $s_Path_Search & '\' & $a_Masks[$i] & '";'
    Next
    $s_Parameter = StringTrimRight($s_Parameter, 1)
    If $i_SubDir Then
        $s_Subdir = ' /S /B'
    Else
        $s_Subdir = ' /B'
    EndIf
    Switch $i_Flag
        Case 1
            $s_Attrib = ' /A-D'
        Case 2
            $s_Attrib = ' /AD'
        Case Else
            $s_Attrib = ' /A'
    EndSwitch
    $s_Parameter &= $s_Subdir & $s_Attrib
    $s_Out = StringToBinary('0' & @CRLF, 2)
    $h_Dir = Run(@ComSpec & ' /U /C DIR ' & $s_Parameter, @SystemDir, @SW_HIDE, 6)
    If Not $h_Dir Then Return SetError(1)
    While 1
        $s_Read = StdoutRead($h_Dir, False, True)
        If @error Then
            ExitLoop
        EndIf
        If $s_Read Then
            $s_Out &= $s_Read
        EndIf
        Sleep(10)
    WEnd
    $a_Out = StringRegExp(BinaryToString($s_Out, 2), '[^\r\n]+', 3)
    If @error Then Return SetError(1)
    $a_Out[0] = UBound($a_Out) - 1
    Return $a_Out
EndFunc   ;==>_FileSearch

Func Color_But1()
	            Sleep (10)
			GUICtrlSetStyle($vButton_Server_2, 0, -1)
			GUICtrlSetStyle($vButton_Server_3, 0, -1)
			GUICtrlSetStyle($vButton_Server_4, 0, -1)
			GUICtrlSetStyle($vButton_Server_5, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_1, 0xCCFFCC)
EndFunc

Func Color_But2()
		    	Sleep (10)
			GUICtrlSetStyle($vButton_Server_1, 0, -1)
			GUICtrlSetStyle($vButton_Server_3, 0, -1)
			GUICtrlSetStyle($vButton_Server_4, 0, -1)
			GUICtrlSetStyle($vButton_Server_5, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_2, 0xCCFFCC)	
EndFunc

Func Color_But3()
				Sleep (10)			
			GUICtrlSetStyle($vButton_Server_1, 0, -1)
			GUICtrlSetStyle($vButton_Server_2, 0, -1)
			GUICtrlSetStyle($vButton_Server_4, 0, -1)
			GUICtrlSetStyle($vButton_Server_5, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_3, 0xCCFFCC)	
EndFunc

Func Color_But4()
				Sleep (10)			
			GUICtrlSetStyle($vButton_Server_1, 0, -1)
			GUICtrlSetStyle($vButton_Server_2, 0, -1)
			GUICtrlSetStyle($vButton_Server_3, 0, -1)
			GUICtrlSetStyle($vButton_Server_5, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_4, 0xCCFFCC)
EndFunc

Func Color_But5()
				Sleep (10)			
			GUICtrlSetStyle($vButton_Server_1, 0, -1)
			GUICtrlSetStyle($vButton_Server_2, 0, -1)
			GUICtrlSetStyle($vButton_Server_3, 0, -1)
			GUICtrlSetStyle($vButton_Server_4, 0, -1)
			Sleep (10)
			GUICtrlSetBkColor($vButton_Server_5, 0xCCFFCC)
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
at [?]
ContinueLoop я исключил из функции Err_1, а Return применить не понял как. В связи с этим, если к примеру запустить скрипт и не выделить чекбокс появляется информационное окошко, после закрытия которого скрипт зависает. Подскажите, где ошибка ?
Функции надо создавть корректно .

У тебя же после ф-ии Err_1() приходит пустой $sFiles
Если ты поставишь на период отладки контроль $sFiles перед выполнением _FileSearch, то избежишь многих проблем:
Код:
;...............................................
MsgBox(0, '', "$sFiles = " & $sFiles); Контролируем $sFiles
If $sFiles='' Then ContinueLoop ; (или для ф-ии Return 0)
$aSearch = _FileSearch('C:', $sFiles, 1)	
;............................................


А создавать ф-ии надо примерно так : с входными($vReplace,...) и вых. (Return) параметрами
Код:
;................................
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $vButton_Server_1
            $iCheck=Check($vReplace_1, $vText_Server_1)	
           ; If $iCheck=1 Then ....
           ; If $iCheck=0 Then ContinueLoop
        Case $vButton_Server_2
            $iCheck=Check($vReplace_2, $vText_Server_2)
	 ; If $iCheck=1 Then ....
		;..............................    
    EndSwitch
WEnd

Func Check($vReplace, $vText_Server)	
	$sFiles = ''
	For $i = 1 To $aCheckBox[0][0]
		If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
			$sFiles &= $aCheckBox[$i][0] & '|'
		EndIf
	Next
	If Not $sFiles Then
		MsgBox(0, ' Info', 'Выберите программу', 0, $hForm)
		;ContinueLoop
		Return 0
	EndIf
	$sFiles = StringTrimRight($sFiles, 1)
	MsgBox(0, '', "$sFiles = " & $sFiles); Контролируем $sFiles
	$aSearch = _FileSearch('C:', $sFiles, 1)
	If @error Then
		MsgBox(16, ' Info', 'Ошибка')
		Exit
	EndIf
	If Not $aSearch[0] Then
		MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
		Exit
	EndIf
	For $i = 1 To $aSearch[0]
		$vRead = FileRead($aSearch[$i]) ;Считываем
		$vOpen = FileOpen($aSearch[$i], 2) ;Открываем
		;$vReplace = StringRegExpReplace($vRead, $vReplace_4, $vText_Server_4) ;Изменяем
	$vReplace = StringRegExpReplace($vRead, $vReplace, $vText_Server) ;Изменяем
		FileWrite($vOpen, $vReplace) ;Переписываем
		FileClose($vOpen) ;Закрываем
	Next	
	;......................
	Return 1
EndFunc







Добавлено:
Сообщение автоматически объединено:

показываю то же на примере твоей ф-ии Err_1 : (хотя не вижу смысла в создании такой ф-ии)
Код:
;.............................
	Case $vButton_Server_1
            ;$sFiles = ''
            $sFiles=Err_1()
            If @error Then ContinueLoop
	;............................
	
Func Err_1()
	$s_Files = ''
	For $i = 1 To $aCheckBox[0][0]
		If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
			$s_Files &= $aCheckBox[$i][0] & '|'
		EndIf
	Next
	If Not $s_Files Then
		MsgBox(0, ' Info', 'Выберите программу', 0, $hForm)
		Return SetError(1,0,0)
	EndIf
	Return $s_Files   
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
А это весь скрипт (вроде рабочий):
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

Global $vText_Server_1 = '10.10.1.10'
Global $vText_Server_2 = '10.10.1.20'
Global $vText_Server_3 = '10.10.1.30'
Global $vText_Server_4 = '10.10.1.40'
Global $vText_Server_5 = '10.10.1.50'
Global $vReplace_1 = '10.10.1.20|10.10.1.30|10.10.1.40|10.10.1.50'
Global $vReplace_2 = '10.10.1.10|10.10.1.30|10.10.1.40|10.10.1.50'
Global $vReplace_3 = '10.10.1.20|10.10.1.10|10.10.1.40|10.10.1.50'
Global $vReplace_4 = '10.10.1.20|10.10.1.30|10.10.1.10|10.10.1.50'
Global $vReplace_5 = '10.10.1.20|10.10.1.30|10.10.1.40|10.10.1.10'
Dim $aCheckBox[3][3] = [[2],['server.txt', '', 'Программу  А'],['user.config', '', 'Программу  Б']]

$hForm = GUICreate('Server_Change', 180, 267, 300, 165)
$vPageControl1 = GUICtrlCreateTab(0, 8, 180, 259)
$vTabSheet_General = GUICtrlCreateTabItem('      Выбор      ')
$vButton_Server_1 = GUICtrlCreateButton('Сервер 1', 8, 42, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_2 = GUICtrlCreateButton('Сервер 2', 8, 74, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_3 = GUICtrlCreateButton('Сервер 3', 8, 106, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_4 = GUICtrlCreateButton('Сервер 4', 8, 138, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_5 = GUICtrlCreateButton('Сервер 5', 8, 169, 75, 25 + $aCheckBox[0][0])
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel1 = GUICtrlCreateLabel('10.10.1.10', 96, 49, 61, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel2 = GUICtrlCreateLabel('10.10.1.20', 96, 81, 55, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel3 = GUICtrlCreateLabel('10.10.1.30', 96, 113, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel4 = GUICtrlCreateLabel('10.10.1.40', 96, 145, 79, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel5 = GUICtrlCreateLabel('10.10.1.50', 96, 177, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
For $i = 1 To $aCheckBox[0][0]
    $aCheckBox[$i][1] = GUICtrlCreateCheckbox('Выбрать ' & $aCheckBox[$i][2], 20, 205 + ($i - 1) * 30, 140, 20)
Next
$vTabSheet_Option = GUICtrlCreateTabItem('      Инфо      ')
$vGroup1 = GUICtrlCreateGroup('', 8, 40, 162, 97)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel6 = GUICtrlCreateLabel('Локальный          Интернет', 16, 56, 144, 18)
$vLabel7 = GUICtrlCreateLabel('10.10.1.10', 16, 72, 61, 18)
$vLabel8 = GUICtrlCreateLabel('10.10.1.20', 16, 88, 55, 18)
$vLabel9 = GUICtrlCreateLabel('    10.10.1.30', 88, 72, 73, 18)
$vLabel10 = GUICtrlCreateLabel('    10.10.1.40', 88, 88, 79, 18)
$vLabel11 = GUICtrlCreateLabel('    10.10.1.50', 88, 104, 73, 18)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$vGroup2 = GUICtrlCreateGroup('', 8, 144, 162, 50)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel12 = GUICtrlCreateLabel('www.autoit-script.ru', 40, 165, 98, 18)
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUICtrlCreateTabItem('')
Global $ButDefault ;*********Добавлено*********
ReDim $aCheckBox[3][2]
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $vButton_Server_1 To $vButton_Server_5           
			$sFiles = ''
            For $i = 1 To $aCheckBox[0][0]
                If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
                    $sFiles &= $aCheckBox[$i][0] & '|'
                EndIf
            Next
            If Not $sFiles Then
                MsgBox(0, ' Info', 'Выберите программу', 1, $hForm); Изменено
                ContinueLoop
            EndIf
            $sFiles = StringTrimRight($sFiles, 1)
MsgBox(0, '', "$sFiles = " & $sFiles); Контролируем $sFiles

            $aSearch = _FileSearch('C:', $sFiles, 1); ===>
            If @error Then
                MsgBox(16, ' Info', 'Ошибка')
                Exit
            EndIf
            If Not $aSearch[0] Then
                MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
                Exit
            EndIf
			;*************Добавлено*****************
			$iNumber=($nMsg-$vButton_Server_1)+1
			$iReplace=Replace($aSearch, Eval("vReplace_" & $iNumber) , Eval("vText_Server_" & $iNumber)); ===> 
			If $iReplace Then SetColor($nMsg); ===>    
	EndSwitch
WEnd

Func Replace($avArray, $vReplace, $vText_Server) 
	For $i = 1 To $avArray[0]
		$vRead = FileRead($avArray[$i]) ;Считываем
		$vOpen = FileOpen($avArray[$i], 2) ;Открываем
		$vReplace = StringRegExpReplace($vRead, $vReplace_5, $vText_Server_5) ;Изменяем
		$iProc=FileWrite($vOpen, $vReplace) ;Переписываем
		FileClose($vOpen) ;Закрываем
	Next
	Return $iProc
EndFunc			
	
Func SetColor($But)	
    GUICtrlSetBkColor($But, 0xCCFFCC)
	GUICtrlSetStyle($ButDefault, 0, -1)
	$ButDefault=$But
EndFunc		
	
Func _FileSearch($s_Path_Search, $s_File_Mask = '*', $i_Flag = 0, $i_SubDir = 1)

    Local $s_Out, $a_Out, $s_Read, $h_Dir, $s_Attrib, $s_Subdir, $s_Parameter, $a_Masks

    If StringRight($s_Path_Search, 1) == '\' Then
        $s_Path_Search = StringTrimRight($s_Path_Search, 1)
    EndIf
    $a_Masks = StringSplit($s_File_Mask, '|')
    For $i = 1 To $a_Masks[0]
        $s_Parameter &= '"' & $s_Path_Search & '\' & $a_Masks[$i] & '";'
    Next
    $s_Parameter = StringTrimRight($s_Parameter, 1)
    If $i_SubDir Then
        $s_Subdir = ' /S /B'
    Else
        $s_Subdir = ' /B'
    EndIf
    Switch $i_Flag
        Case 1
            $s_Attrib = ' /A-D'
        Case 2
            $s_Attrib = ' /AD'
        Case Else
            $s_Attrib = ' /A'
    EndSwitch
    $s_Parameter &= $s_Subdir & $s_Attrib
    $s_Out = StringToBinary('0' & @CRLF, 2)
    $h_Dir = Run(@ComSpec & ' /U /C DIR ' & $s_Parameter, @SystemDir, @SW_HIDE, 6)
    If Not $h_Dir Then Return SetError(1)
    While 1
        $s_Read = StdoutRead($h_Dir, False, True)
        If @error Then
            ExitLoop
        EndIf
        If $s_Read Then
            $s_Out &= $s_Read
        EndIf
        Sleep(10)
    WEnd
    $a_Out = StringRegExp(BinaryToString($s_Out, 2), '[^\r\n]+', 3)
    If @error Then Return SetError(1)
    $a_Out[0] = UBound($a_Out) - 1
    Return $a_Out
EndFunc   ;==>_FileSearch


Добавлено:
Сообщение автоматически объединено:

Примечание :
$iNumber : это номер задания (1,2,3,4,5)
Eval("vReplace_" & $iNumber) : это $vText_Server_1, .... $vText_Server_5
Eval("vText_Server_" & $iNumber) это : $vReplace_1 ... $vReplace_5
 
Автор
A

at

Гость
gregaz, Благодарю за подробное объяснение. Очень помогли разобраться с некоторыми сложными для меня моментами.



Добавлено:
Сообщение автоматически объединено:

Вот так работает:
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

Global $vText_Server_1 = '10.10.1.10'
Global $vText_Server_2 = '10.10.1.20'
Global $vText_Server_3 = '10.10.1.30'
Global $vText_Server_4 = '10.10.1.40'
Global $vText_Server_5 = '10.10.1.50'
Global $vReplace_1 = '10.10.1.20|10.10.1.30|10.10.1.40|10.10.1.50'
Global $vReplace_2 = '10.10.1.10|10.10.1.30|10.10.1.40|10.10.1.50'
Global $vReplace_3 = '10.10.1.20|10.10.1.10|10.10.1.40|10.10.1.50'
Global $vReplace_4 = '10.10.1.20|10.10.1.30|10.10.1.10|10.10.1.50'
Global $vReplace_5 = '10.10.1.20|10.10.1.30|10.10.1.40|10.10.1.10'
Dim $aCheckBox[3][3] = [[2],['server.txt', '', 'Программу  А'],['user.config', '', 'Программу  Б']]

$hForm = GUICreate('Server_Change', 180, 267, 300, 165)
$vPageControl1 = GUICtrlCreateTab(0, 8, 180, 259)
$vTabSheet_General = GUICtrlCreateTabItem('       Выбор       ')
$vButton_Server_1 = GUICtrlCreateButton('Сервер 1', 8, 42, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_2 = GUICtrlCreateButton('Сервер 2', 8, 74, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_3 = GUICtrlCreateButton('Сервер 3', 8, 106, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_4 = GUICtrlCreateButton('Сервер 4', 8, 138, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vButton_Server_5 = GUICtrlCreateButton('Сервер 5', 8, 169, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel1 = GUICtrlCreateLabel('10.10.1.10', 96, 49, 61, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel2 = GUICtrlCreateLabel('10.10.1.20', 96, 81, 55, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel3 = GUICtrlCreateLabel('10.10.1.30', 96, 113, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel4 = GUICtrlCreateLabel('10.10.1.40', 96, 145, 79, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel5 = GUICtrlCreateLabel('10.10.1.50', 96, 177, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
For $i = 1 To $aCheckBox[0][0]
    $aCheckBox[$i][1] = GUICtrlCreateCheckbox('Выбрать ' & $aCheckBox[$i][2], 20, 205 + ($i - 1) * 30, 140, 20)
Next
$vTabSheet_Option = GUICtrlCreateTabItem('       Инфо       ')
$vGroup1 = GUICtrlCreateGroup('', 8, 40, 162, 97)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel6 = GUICtrlCreateLabel('Локальный          Интернет', 16, 56, 144, 18)
$vLabel7 = GUICtrlCreateLabel('10.10.1.10', 16, 72, 61, 18)
$vLabel8 = GUICtrlCreateLabel('10.10.1.20', 16, 88, 55, 18)
$vLabel9 = GUICtrlCreateLabel('     10.10.1.30', 88, 72, 73, 18)
$vLabel10 = GUICtrlCreateLabel('     10.10.1.40', 88, 88, 79, 18)
$vLabel11 = GUICtrlCreateLabel('     10.10.1.50', 88, 104, 73, 18)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$vGroup2 = GUICtrlCreateGroup('', 8, 144, 162, 50)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$vLabel12 = GUICtrlCreateLabel('www.autoit-script.ru', 40, 165, 98, 18)
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUICtrlCreateTabItem('')
Global $vButDefault
ReDim $aCheckBox[3][2]
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $vButton_Server_1 To $vButton_Server_5           
            $sFiles = ''
            For $i = 1 To $aCheckBox[0][0]
                If BitAND(GUICtrlRead($aCheckBox[$i][1]), $GUI_CHECKED) Then
                    $sFiles &= $aCheckBox[$i][0] & '|'
                EndIf
            Next
            If Not $sFiles Then
                MsgBox(0, ' Info', 'Выберите программу', 1, $hForm)
                ContinueLoop
            EndIf
            $sFiles = StringTrimRight($sFiles, 1)
			;MsgBox(0, '', "$sFiles = " & $sFiles); Контролируем $sFiles

            $aSearch = _FileSearch('C:', $sFiles, 1); ===>
            If @error Then
                MsgBox(16, ' Info', 'Ошибка')
                Exit
            EndIf
            If Not $aSearch[0] Then
                MsgBox(0, ' Info', 'Не найдены файлы конфигурации')
                Exit
            EndIf

            $iNumber = ($nMsg-$vButton_Server_1)+1
            $iReplace = Replace($aSearch, Eval("vReplace_" & $iNumber) , Eval("vText_Server_" & $iNumber)); ===> 
            If $iReplace Then SetColor($nMsg); ===>    
    EndSwitch
WEnd

Func Replace($avArray, $vReplace, $vText_Server) 
    For $i = 1 To $avArray[0]
        $vRead = FileRead($avArray[$i]) ;Считываем
        $vOpen = FileOpen($avArray[$i], 2) ;Открываем
        $vReplace = StringRegExpReplace($vRead, Eval("vReplace_" & $iNumber), Eval("vText_Server_" & $iNumber)) ;***** Изменил эту строчку ****
        $iProc = FileWrite($vOpen, $vReplace) ;Переписываем
        FileClose($vOpen) ;Закрываем
    Next
    Return $iProc
EndFunc         
    
Func SetColor($vBut) 
    GUICtrlSetBkColor($vBut, 0xCCFFCC)
    GUICtrlSetStyle($vButDefault, 0, -1)
    $vButDefault = $vBut
EndFunc     
    
Func _FileSearch($s_Path_Search, $s_File_Mask = '*', $i_Flag = 0, $i_SubDir = 1)

    Local $s_Out, $a_Out, $s_Read, $h_Dir, $s_Attrib, $s_Subdir, $s_Parameter, $a_Masks

    If StringRight($s_Path_Search, 1) == '\' Then
        $s_Path_Search = StringTrimRight($s_Path_Search, 1)
    EndIf
    $a_Masks = StringSplit($s_File_Mask, '|')
    For $i = 1 To $a_Masks[0]
        $s_Parameter &= '"' & $s_Path_Search & '\' & $a_Masks[$i] & '";'
    Next
    $s_Parameter = StringTrimRight($s_Parameter, 1)
    If $i_SubDir Then
        $s_Subdir = ' /S /B'
    Else
        $s_Subdir = ' /B'
    EndIf
    Switch $i_Flag
        Case 1
            $s_Attrib = ' /A-D'
        Case 2
            $s_Attrib = ' /AD'
        Case Else
            $s_Attrib = ' /A'
    EndSwitch
    $s_Parameter &= $s_Subdir & $s_Attrib
    $s_Out = StringToBinary('0' & @CRLF, 2)
    $h_Dir = Run(@ComSpec & ' /U /C DIR ' & $s_Parameter, @SystemDir, @SW_HIDE, 6)
    If Not $h_Dir Then Return SetError(1)
    While 1
        $s_Read = StdoutRead($h_Dir, False, True)
        If @error Then
            ExitLoop
        EndIf
        If $s_Read Then
            $s_Out &= $s_Read
        EndIf
        Sleep(10)
    WEnd
    $a_Out = StringRegExp(BinaryToString($s_Out, 2), '[^\r\n]+', 3)
    If @error Then Return SetError(1)
    $a_Out[0] = UBound($a_Out) - 1
    Return $a_Out
EndFunc   ;==>_FileSearch

Поправил одну строку.
gregaz, еще раз благодарю за помощь.
 
Верх