Что нового

Завершение цикла Do...Until

sasha23969

Новичок
Сообщения
2
Репутация
0
Здраствуйте, написал свой первый код, но после начала цикла Do...Until не могу его завершить кнопкой "stop".(Кнопки в GUI перестают работать)
Код:
#include <GUIConstants.au3>

GUICreate ("123", 200, 100) 
$go = GUICtrlCreateButton ("Старт", 54, 65, 40, 29) 
$stop = GUICtrlCreateButton ("Стоп", 114, 65, 40, 29) 
$pic = GUICtrlCreatePic ("logo.jpg", 70, 0, 65, 65)
GUISetState() 

While 1
  $msg = GUIGetMsg()

   Select
	  case $msg = $go
		 MsgBox (0, "Инструкция", "123")
		 
		 WinSetState("123", "", @SW_MINIMIZE)
		 Do
			
			MouseMove( 990, 567, 5)
			MouseClick("left")
			Sleep (2200)
			MouseMove( 595, 701, 5)
			MouseClick("left")
			Sleep (2200)
			MouseMove( 755, 641, 5)
			MouseClick("left")
			Sleep (2200)
			;Скролл вниз, менять У
			MouseClickDrag("left", 1357, 382, 1357, 683)

			MouseClick("left", 503, 191)

			;Скролл вверх, менять У
			MouseClickDrag("left", 1357, 683, 1357, 382)
   
			MouseClick("left", 597, 219)
			sleep (2200)
			MouseClickDrag("left", 1357, 85, 1357, 500)
			MouseClick("left", 600, 362)
			sleep (900000)
			
		 until $msg = $stop
		 MsgBox (0, "Конец", "123")
	  
	  
	  
	  Case $msg = $GUI_EVENT_CLOSE

		 ExitLoop
   EndSelect
WEnd
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
$gui=GUICreate ("123", 200, 100)
Global $trigger=1
$go = GUICtrlCreateButton ("Старт", 54, 65, 40, 29)
$stop = GUICtrlCreateButton ("Стоп", 114, 65, 40, 29)
$pic = GUICtrlCreatePic ("logo.jpg", 70, 0, 65, 65)
GUIRegisterMsg($wm_command,"__ExitP")
GUISetState()

While 1
  $nmsg = GUIGetMsg()
	Switch $nmsg
		Case $go
		MsgBox (0, "Инструкция", "123")
		WinSetState("123", "", @SW_MINIMIZE)
		Do
			MouseMove( 990, 567, 5)
			MouseClick("left")
			Sleep (2200)
			MouseMove( 595, 701, 5)
			MouseClick("left")
			Sleep (2200)
			MouseMove( 755, 641, 5)
			MouseClick("left")
			Sleep (2200)
         ;Скролл вниз, менять У
			MouseClickDrag("left", 1357, 382, 1357, 683)
			 MouseClick("left", 503, 191)
         ;Скролл вверх, менять У
			MouseClickDrag("left", 1357, 683, 1357, 382)
			MouseClick("left", 597, 219)
			sleep (2200)
			MouseClickDrag("left", 1357, 85, 1357, 500)
			MouseClick("left", 600, 362)
			sleep (900000)
		until $trigger=2
		MsgBox (0, "Конец", "123")
		Case $GUI_EVENT_CLOSE
			Exit
   EndSwitch
WEnd
Func __ExitP($hWnd,$Msg,$wPar,$lPar)
	If $hWnd=$gui Then
		If $lPar=GUICtrlGetHandle($stop) Then
			$trigger=2
		EndIf
	EndIf
EndFunc

В посте заключите ваш код в теги [аutoit][/аutoit], а не в [cоde][/codе] иначе не миновать предупреждения :smile:
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Можно так:
Код:
#include <GUIConstants.au3>

GUICreate ("123", 200, 100) 
$go = GUICtrlCreateButton ("Старт", 54, 65, 40, 29) 
$stop = GUICtrlCreateButton ("Стоп", 114, 65, 40, 29) 
$pic = GUICtrlCreatePic ("logo.jpg", 70, 0, 65, 65)
GUISetState() 

While 1
  $msg = GUIGetMsg()

   Select
	  case $msg = $go
		 MsgBox (0, "Инструкция", "123")
		 WinSetState("123", "", @SW_MINIMIZE)
		 AdlibRegister('_click', 1)
	 Case $msg = $stop
		 AdlibUnRegister('_click')
		 MsgBox (0, "Конец", "123")	  
	  Case $msg = $GUI_EVENT_CLOSE

		 ExitLoop
   EndSelect
WEnd

Func _Click()
	MouseMove( 990, 567, 5)
	MouseClick("left")
	Sleep (2200)
	MouseMove( 595, 701, 5)
	MouseClick("left")
	Sleep (2200)
	MouseMove( 755, 641, 5)
	MouseClick("left")
	Sleep (2200)
	;Скролл вниз, менять У
	MouseClickDrag("left", 1357, 382, 1357, 683)

	MouseClick("left", 503, 191)

	;Скролл вверх, менять У
	MouseClickDrag("left", 1357, 683, 1357, 382)

	MouseClick("left", 597, 219)
	sleep (2200)
	MouseClickDrag("left", 1357, 85, 1357, 500)
	MouseClick("left", 600, 362)
	sleep (900000)
EndFunc
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Zaramot
а если надо будет прервать внутри функции)
 
Автор
S

sasha23969

Новичок
Сообщения
2
Репутация
0
В обоих вариантах после начала движений мыши перестаёт работать интерфейс, или это только у меня?
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
sasha23969
Вариант от MnM завершится в конце цикла при проверке условия, т.е. после всех "слипов".
Вариант от Zaramot у меня тоже не работает.

Уважаемый Zaramot, а если каждую одну миллисекунду вызывать функцию, которая "спит" 15 минут, то они в очередь будут вставать или отменять предыдущую?
 

cnm

Новичок
Сообщения
58
Репутация
2
они будут спать последовательно.




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

Что у тебя скрипт делает?

Зачем нужна такая пауза?
sleep (900000)
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
sasha23969 [?]
(Кнопки в GUI перестают работать)
При входе в цикл Do нет опроса кнопки $stop. К тому же если стоят длительные паузы, то GUI может не уловить событие, потерять что ли. Это легко проверить, поставив в обычный пример из справки с GUI в цикл Sleep на хотябы 100 миллисекунд, кнопка зарытия работает через раз.
 
Верх