Что нового

Подружить 2 цикла

prokazzza

Новичок
Сообщения
160
Репутация
2
Привет всем, помогите подружить 2 цикла вместе, никак не могу объединить их чтобы они оба работали, толковой справки по циклам не нашел. Уже запарился, часа 2 просидел ничего не выходит :wacko:

Код:
While 1
	$hWnd = WinWait('IPnetServer Console')
    If StringInStr(ControlGetText($hWnd, '', '[CLASSNN:Edit2]'), 'Setting our NAT to Open') Then
        ControlSetText($hWnd, '', '[CLASSNN:Edit1]', 'Необходимые данные')
        ControlSend($hWnd, '', '[CLASSNN:Edit1]', '{ENTER}')
    EndIf
    Sleep(100)
WEnd


Код:
While 1
	If Not ProcessExists('IPnetServer.exe') Then
		_FileWriteToLine(@SystemDir& "\drivers\etc\hosts", 20, '', 1)
    Exit
	EndIf
WEnd
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
AdlibRegister('_WriteHosts')

While 1
    $hWnd = WinWait('IPnetServer Console')
    If StringInStr(ControlGetText($hWnd, '', '[CLASSNN:Edit2]'), 'Setting our NAT to Open') Then
        ControlSetText($hWnd, '', '[CLASSNN:Edit1]', 'Необходимые данные')
        ControlSend($hWnd, '', '[CLASSNN:Edit1]', '{ENTER}')
    EndIf
    Sleep(100)
WEnd

Func _WriteHosts()
    If Not ProcessExists('IPnetServer.exe') Then
        _FileWriteToLine(@SystemDir& "\drivers\etc\hosts", 20, '', 1)
		AdlibUnRegister('_WriteHosts')
		Exit
    EndIf
EndFunc
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
К сожалению в вашем примере также не отрабатывает 1 цикл, второй работает.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Сойдёт ?:
Код:
While 1
    $hWnd = WinWait('IPnetServer Console')
    If StringInStr(ControlGetText($hWnd, '', '[CLASSNN:Edit2]'), 'Setting our NAT to Open') Then
        ControlSetText($hWnd, '', '[CLASSNN:Edit1]', 'Необходимые данные')
        ControlSend($hWnd, '', '[CLASSNN:Edit1]', '{ENTER}')
    EndIf
	If Not ProcessExists('IPnetServer.exe') Then
        _FileWriteToLine(@SystemDir& "\drivers\etc\hosts", 20, '', 1)
		Exit
    EndIf
    Sleep(100)
WEnd
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
#Include <File.au3>
AdlibRegister('_WriteHosts')

While 1
    
	If WinExists('IPnetServer Console') Then
		$hWnd = WinGetHandle('IPnetServer Console')
		$sText = ControlGetText($hWnd, '', '[CLASS:Edit; INSTANCE:2]')
		If StringInStr($sText, 'Setting our NAT to Open') Then
			ControlSetText($hWnd, '', '[CLASS:Edit; INSTANCE:1]', 'Необходимые данные')
			ControlSend($hWnd, '', '[CLASS:Edit; INSTANCE:1]', '{ENTER}')
		EndIf
	EndIf
    Sleep(100)
WEnd

Func _WriteHosts()
    If Not ProcessExists('IPnetServer.exe') Then
        _FileWriteToLine(@SystemDir& "\drivers\etc\hosts", 20, '', 1)
		AdlibUnRegister('_WriteHosts')
		Exit
    EndIf
EndFunc
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
А так пробовал?
Код:
While 1
	Sleep(100)
	If Not ProcessExists('IPnetServer.exe') Then
        _FileWriteToLine(@SystemDir& "\drivers\etc\hosts", 20, '', 1)
	EndIf	

    $hWnd = WinWait('IPnetServer Console')
    If StringInStr(ControlGetText($hWnd, '', '[CLASSNN:Edit2]'), 'Setting our NAT to Open') Then
        ControlSetText($hWnd, '', '[CLASSNN:Edit1]', 'Необходимые данные')
        ControlSend($hWnd, '', '[CLASSNN:Edit1]', '{ENTER}')
    EndIf
    Sleep(100)
WEnd
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Zaramot такой вариант как ваш пример я тоже пробовал, но результат работает только 1 цикл.

Garrett Спасибо 2 вариант работает как надо.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Zaramot, Yuriy, без флейма пож-та
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Garrett

А можно прикрутить дополнительно чтобы 2 цикл отрабатывал определенное кол-во раз и далее крутился только первый ???
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
prokazzza [?]
чтобы 2 цикл отрабатывал определенное кол-во раз и далее крутился только первый
Код:
#Include <File.au3>
Global $i, $iCount = 5 ; количество проходов второго цикла

AdlibRegister('_WriteHosts')

;...

Func _WriteHosts()
	$i += 1
    If Not ProcessExists('IPnetServer.exe') Then
        _FileWriteToLine(@SystemDir& "\drivers\etc\hosts", 20, '', 1)
		If $i = $iCount Then  
			AdlibUnRegister('_WriteHosts')
			Exit
		EndIf
    EndIf
EndFunc
 
Верх