Что нового

скрипт вылетает на середине кода

scorpio1379

Новичок
Сообщения
3
Репутация
0
здравствуйте.
есть задача: отловить окно в процессе инсталляции, которое тихо появляется в фоне
реализовал циклом
Do

FileWriteLine($file,"pass"&$n&",window status"&$flag1)
$flag1 = WinExists ("Summary of NNM 7.53 Installation")
$n=$n+1
Sleep(500)
Until $flag1>0

так же использовал while wend
но выполнение скрипта прекращается как только появляется окошко.
в логе ни переменной $flag1 со значением 1 ни записей о последующих командах нет
подскажите в чем может быть проблема
исходник и лог прикрепляю в архиве
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
scorpio1379
При появлении окна $flag1 становится больше нуля, и цикл завершается...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
scorpio1379
Попробуйте так:
Код:
;...
$flag1 = 0
While Not $flag1
	$flag1 = WinExists("Summary of NNM 7.53 Installation")
	FileWriteLine($file, "pass " & $n & ", window status " & $flag1)
	$n = $n + 1
	Sleep(500)
WEnd
;...
А если Вам надо просто в фоне отловить это окно, то попробуйте так:
Код:
Global $n = 0
AdlibRegister('_MyFunc', 1000)
;...
;Ваш код
;...

Func _MyFunc()
	$n = $n + 1
	Local $file = 'Log.txt'
	Local $flag1 = WinExists("Summary of NNM 7.53 Installation")
	FileWriteLine($file, "passn " & $n & ", nwindow statusn " & $flag1)
	If $flag1 Then AdlibUnRegister('_MyFunc')
EndFunc   ;==>_MyFunc
 
Автор
S

scorpio1379

Новичок
Сообщения
3
Репутация
0
snoitaleR сказал(а):
scorpio1379
При появлении окна $flag1 становится больше нуля, и цикл завершается...
это понятно, так и задумано. НО далее код не выполняется. совсем.
как будто команда wend выполняется как Exit.
собственно даже когда while заменяю на Do то же самое.
а при таком раскладе значение flag1 должно измениться на 1 и записаться в лог.
если выполнять только этот цикл при уже сгенерившемся окошке то все работает.
сразу flag1 равен 1 и дальше выполняется код а вот после того как цикл ожидания крутиться, в моем случае мин 20-30 все падает
 
Автор
S

scorpio1379

Новичок
Сообщения
3
Репутация
0
madmasles сказал(а):
scorpio1379
Попробуйте так:
Код:
;...
$flag1 = 0
While Not $flag1
	$flag1 = WinExists("Summary of NNM 7.53 Installation")
	FileWriteLine($file, "pass " & $n & ", window status " & $flag1)
	$n = $n + 1
	Sleep(500)
WEnd
;...
А если Вам надо просто в фоне отловить это окно, то попробуйте так:
Код:
Global $n = 0
AdlibRegister('_MyFunc', 1000)

;...
;Ваш код
;...

Func _MyFunc()
	$n = $n + 1
	Local $file = 'Log.txt'
	Local $flag1 = WinExists("Summary of NNM 7.53 Installation")
	FileWriteLine($file, "passn " & $n & ", nwindow statusn " & $flag1)
	If $flag1 Then AdlibUnRegister('_MyFunc')
EndFunc   ;==>_MyFunc

не выходит.
в первом случае все так же вываливается
а во втором flag становится еденицой сразу.
для проверки изменил код на
Func _MyFunc()
$flag1=0
$n = $n + 1
;Local $file = 'c:\Log.txt'
Local $flag1 = WinExists("Summary of NNM 7.53 Installation")
;FileWriteLine($file, "passn " & $n & ", nwindow statusn " & $flag1)
If $flag1=1 Then AdlibUnRegister('_MyFunc')
код выполняется дальше но слишком рано

интересно получается
в условии IF... поменял на $flaп1<0 тем самым хотел сделать бесконечный цикл.
в логе пройдено 4 цикла и дальше выполняется дальше код.
может есть какие то таймауты? или другие ограничения?
 
Верх