Что нового

[Элементы GUI] Выход из бесконечного цикла по нажатию кнопки

blacklis

Новичок
Сообщения
64
Репутация
1
Добрый день! Возможно этот вопрос уже задавался, я не сенсей поисковода.
Так вот.
В гуи есть две кнопки - начать и остановить
Кнопка начать запускает бесконечный цикл, допустим он проверяет активность окна и активирует его
Код:
While $start1 = 0
		 sleep (1000)
		WinActive("%%здесь было имя")
	WinActivate("%%здесь было имя")
	  If $start1 = 1 Then ExitLoop
	wend

А кнопка остановить должна остановить этот цикл. Вот только вопрос, КАК?
Никак понять не могу :blink: :stars: :shok:
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
While $start1 = 0
  sleep(10)
  WinActivate("%%здесь было имя")
  ; $ButtonStop - это идентификатор кнопки "остановить"
  If GUIGetMsg() = $ButtonStop Then $start1 = 1
WEnd
 
Автор
B

blacklis

Новичок
Сообщения
64
Репутация
1
Скрипт не останавливается :(
Забыл сказать,что включен GUIOnEventMode...
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
В цикле напиши:
Код:
If $iExitVar = 1 Then 
$iExitVar = 0
ExitLoop
EndIF


А в функции, которая вызывается при нажатии на кнопку напиши это:
Код:
$iExitVar = 1
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
blacklis [?]
включен GUIOnEventMode
Код:
Opt("GUIOnEventMode", 1)

GUICreate("")

$ButtonStop = GUICtrlCreateButton("Stop", 5, 5)
GUICtrlSetOnEvent($ButtonStop, "Stop")

GUISetState()

$start1 = 0

While $start1 = 0
  sleep(1000)
  WinActivate("%%здесь было имя")
  If $start1 = 1 Then ExitLoop
WEnd

Func Stop()
  $start1 = 1
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
А если нужно прервать функцию, содержащую цикл, то так
Код:
Opt("GUIOnEventMode", 1)

GUICreate("")
$ButtonStart = GUICtrlCreateButton("Начать", 5, 5)
GUICtrlSetOnEvent($ButtonStart, "Start")
$ButtonStop = GUICtrlCreateButton("Остановить", 5, 35)
GUISetState()

GUIRegisterMsg(0x0111, 'WM_COMMAND')

$start1 = 0
Do
  Sleep(500)
  ConsoleWrite("!")
Until 0

Func Start()
  $start1 = 0
  While $start1 = 0
    sleep(500)
    ConsoleWrite("+")
  WEnd
EndFunc

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
  Local $nNotifyCode = BitShift($wParam, 16)
  Local $nID = BitAND($wParam, 0xFFFF)
  Switch $nNotifyCode
    Case 0
      Switch $nID
        Case $ButtonStop
          $start1 = 1
      EndSwitch
  EndSwitch
  Return 'GUI_RUNDEFMSG'
EndFunc   ;==>WM_COMMAND
 
Верх