Что нового

[Окна, Диалоги] Зацыкливание цикла While при проверке и выводе сообщения

Andruxakonst

Новичок
Сообщения
21
Репутация
0
Доброе время суток! Форумчане, прошу вашей помощи т.к. что-то совсем запутался.
Задача следующая: Необходимо проверить открыто ли окно программы, если открыто выдать сообщение "Закройте приложение". После того как пользователь нажал Ок нужно проверить еще и если окно закрылось, скопировать файлы. Так вот, если программа закрыта, то все проходит дальше как положено, а если нет, то сообщение "Закройте приложение" выводится нормально, но когда его закроешь и нажмешь ОК в окне, опять появляется просьба, хотя приложение уже закрыто.
Хотел пойти проще, через "IF", но вот часто пользователи просто не читают сообщения и просто жмут ОК! :stars:
Подскажите мне пожалуйста, что происходит, и почему зацикливает.


Код:
Dim $TestWindow

MsgBox(32, "Внимание!" , "Закройте, пожалуйста, окно и за тем нажмите кнопку ОК"); Просим закрыть программу
Sleep(1000)

$TestWindow = WinExists("Калькулятор") ;ищим окно Калькулятор

MsgBox(32, "123", $TestWindow) ; Смотрим что возвращется

While Not $TestWindow =0
   MsgBox(32, "Eroor", "Окно не закрыто!")
WEnd

MsgBox(32, "ok", "Окна нет")

Упрощенная программа, мне бы просто понять.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Код:
Dim $TestWindow

MsgBox(32, "Внимание!" , "Закройте, пожалуйста, окно и за тем нажмите кнопку ОК"); Просим закрыть программу
Sleep(1000)

$TestWindow = WinExists("Калькулятор") ;ищим окно Калькулятор

MsgBox(32, "123", $TestWindow) ; Смотрим что возвращется

While Not $TestWindow =0;цикл не избежен, либо ошибка(не тестил скрипт ;))
   MsgBox(32, "Eroor", "Окно не закрыто!")
WEnd

MsgBox(32, "ok", "Окна нет")

Думаю так правильней:
Код:
Dim $TestWindow

MsgBox(32, "Внимание!" , "Закройте, пожалуйста, окно и за тем нажмите кнопку ОК"); Просим закрыть программу
Sleep(1000)

While 1; любое положительное число для бесконечного цикла пока не будет задействован exitloop или крах программы
	$TestWindow = WinExists("Калькулятор") ;ищим окно Калькулятор, требуется поместить в цикл для повторной проверки окна
	If $TestWindow = 1 Then
		MsgBox(16, '', 'Окно не закрыто, просьба закрыть окно')
	ElseIf $TestWindow = 0 Then
		ExitLoop ;если окна действительно нет, то выход из цикла
	EndIf
WEnd

MsgBox(32, "ok", "Окна нет")

Ваш цикл
Код:
While Not $TestWindow =0
   MsgBox(32, "Eroor", "Окно не закрыто!")
WEnd

Логически если подумать, то ваш цикл проверяет переменную так:
если $TestWindow = 0 то данное выражение не истинно => цикл
$TestWindow принимает значение 0 если окна не существует, следовательно эта проверка не правильна :smile:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Andruxakonst [?]
мне бы просто понять
У вас условие постоянно, а для выхода из цикла нужно, чтобы условие менялось.
Код:
While WinExists("Калькулятор") ; пока существует окно
  MsgBox(32, "Внимание!" , "Закройте, пожалуйста, окно калькулятора") ; Просим закрыть программу
WEnd
 
Автор
A

Andruxakonst

Новичок
Сообщения
21
Репутация
0
InnI
InnI сказал(а):
У вас условие постоянно, а для выхода из цикла нужно, чтобы условие менялось.

Как я понял, потому что у меня переменная $TestWindow была не в теле цикла, она проверялась 1 раз при старте скрипта и потом работал скрипт уже с полученной ранее переменной не обновляя ее. Т.е. еще раз не проверяла, есть ли это окно или нет.
InnI, я правильно понял?!
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
я отвечу за него :laugh: : Вы поняли правильно =)
 
Автор
A

Andruxakonst

Новичок
Сообщения
21
Репутация
0
Спасибо Вам обоим! Ну теперь пойду дальше писать более сложные скрипты! Инфа, хоть и понятное дело, азовая, но именно таких нюансов мне, как новичку, иногда не хватает!
:thumbs_up:
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 Andruxakonst
OffTopic:
Заходи по чаще - тут много что есть и много чему научишься...
 
Автор
A

Andruxakonst

Новичок
Сообщения
21
Репутация
0
---Zak---,
, это ты мне Двойку поставил что ли?! :-[ Да ладно, я ведь только начинаю изучать.

Ну, сейчас буду чаще бывать, изучать. В работе AutoIt пользуюсь теперь часто! Уж очень понравилось. :IL_AutoIt_1: :beer:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Andruxakonst [?]
это ты мне Двойку поставил что ли?!
Ну, теперь я за него отвечу ;D

2 Andruxakonst = to Andruxakonst (сообщение, предназначенное для Andruxakonst).
По-английски цифра 2 (two) произносится также, как и предлог "to", в данном случае означающий обращение именно к вам и ни к кому другому.
 
Автор
A

Andruxakonst

Новичок
Сообщения
21
Репутация
0
:wall_brake:, лажанулся :rofl:! Что-то то я сразу не допетрил, после работы голова уже не та:smile:
 
Верх