Что нового

[Автоматизация] Как можно выполнять 4 условия, независимо от всего?

Teacher

Новичок
Сообщения
33
Репутация
0
Есть функция. В ней есть цикл. В нем прописаны некие условия + вынесена отдельно функция WaitColor.
Код:
Func Start()
While 1 ; <= начало цикла
$1 = PixelSearch(272,159,365,190,0xFF0000)
If IsArray($1) = True Then
$11 = PixelSearch(526,165,537,177,0xFF0000)
If IsArray($11) = True Then
MouseClick("left", 841, 635, 1, 0)
WaitColor(0x00FF00)
MouseClick("left", 925, 618, 1, 0)
EndIf
EndIf

$2 = PixelSearch(272,159,365,190,0x00FF00)
If IsArray($2) = True Then
$22 = PixelSearch(526,165,537,177,0x00FF00)
If IsArray($22) = True Then
MouseClick("left", 925, 618, 1, 0)
WaitColor(0xFF0000)
MouseClick("left", 841, 635, 1, 0)
EndIf
EndIf
WEnd ; <= конец цикла
EndFunc

Func WaitColor($Color)
  Do
    PixelSearch(526,165,537,177, $Color)
  Until Not @error
EndFunc

Мне необходимо чтобы помимо всей этой структуры срабатывало еще одно из этих 4 условий. Просто срабатывало независимо от первой части кода. Грубо говоря: Появился пиксель в нужном месте, совершили клик - необходимо строго исполнить это условие
Код:
$close = PixelSearch(1220, 327, 1248, 351,0xCCCCCC)
        If IsArray($close) = True Then
		Sleep(400)
		MouseClick("left", 1195, 479, 1, 0)
		Sleep(400)
	    EndIf
	
		$eror = PixelSearch(797, 500, 851, 519, 0x404040)
        If IsArray($eror) = True Then
		MouseClick("left", 1150, 479, 1, 0)
        EndIf

        $ok = PixelSearch(690, 510, 1185, 591,0x0084FF)
        If IsArray($ok) = True Then
			$posok = PixelSearch(690, 510, 1185, 591, 0x0084FF)
			If IsArray($posok) = True Then
		     MouseMove($posok[0], $posok[1], 1)
		     MouseClick("left")
		     Sleep(30)
		 EndIf
		 EndIf


Я заметил что эти условия работают после исполнения функции WaitColor, но когда через WaitColor ожидается цвет - эти 4 условия не исполнятся. По отдельности, работает и то и другое. Но как мне быть с этими 4 мя условиями? Мне их необходимо описать в код таким образом чтобы один из них просто срабатывал при описанном условии (вся программа должна работать до тех пор, пока я не остановлю ее). Помогите пожалуйста, как можно сформировать из этого 1 рабочий код? Есть ли в Autoit функция типа:(Выполнять не смотря ни на что)? :-\
 

InnI

AutoIT Гуру
Сообщения
4 329
Репутация
1 167
Если я правильно понял...
Код:
; функция выполняется раз в секунду
; не смотря ни на что :)
AdlibRegister("CheckIt", 1000)

Func Start()
	While 1
		$1 = PixelSearch(272, 159, 365, 190, 0xFF0000)
		If IsArray($1) = True Then
			$11 = PixelSearch(526, 165, 537, 177, 0xFF0000)
			If IsArray($11) = True Then
				MouseClick("left", 841, 635, 1, 0)
				WaitColor(0x00FF00)
				MouseClick("left", 925, 618, 1, 0)

			EndIf
		EndIf

		$2 = PixelSearch(272, 159, 365, 190, 0x00FF00)
		If IsArray($2) = True Then
			$22 = PixelSearch(526, 165, 537, 177, 0x00FF00)
			If IsArray($22) = True Then
				MouseClick("left", 925, 618, 1, 0)
				WaitColor(0xFF0000)
				MouseClick("left", 841, 635, 1, 0)
			EndIf
		EndIf
	WEnd
EndFunc

Func WaitColor($Color)
	Do
		PixelSearch(526, 165, 537, 177, $Color)
	Until Not @error
EndFunc

Func CheckIt()
  $close = PixelSearch(1220, 327, 1248, 351, 0xCCCCCC)
  If IsArray($close) = True Then
    Sleep(400)
    MouseClick("left", 1195, 479, 1, 0)
    Sleep(400)
  EndIf

  $eror = PixelSearch(797, 500, 851, 519, 0x404040)
  If IsArray($eror) = True Then
    MouseClick("left", 1150, 479, 1, 0)
  EndIf

  $ok = PixelSearch(690, 510, 1185, 591, 0x0084FF)
  If IsArray($ok) = True Then
    $posok = PixelSearch(690, 510, 1185, 591, 0x0084FF)
    If IsArray($posok) = True Then
      MouseMove($posok[0], $posok[1], 1)
      MouseClick("left")
      Sleep(30)
    EndIf
  EndIf
EndFunc
 
Автор
T

Teacher

Новичок
Сообщения
33
Репутация
0
Да, видимо это то что нужно, только у меня почему то не работает. :(
У меня еще программа запускается и выключается по нажатию кнопок.
Может быть из-за этого? :-\

Код:
HotKeySet("{F4}", "Start")
HotKeySet("{ESC}", "_Exit")

While 1
   Sleep(350)
   WEnd
...и дальше уже функция Start()...
 

InnI

AutoIT Гуру
Сообщения
4 329
Репутация
1 167
Teacher [?]
Может быть из-за этого?
Нет, не из-за этого.

Добавьте в функцию вывод в консоль и убедитесь, что функция работает (в консоле раз в секунду должны появляться точки)
Код:
Func CheckIt()
  ConsoleWrite(".") ; <= добавить
  $close = PixelSearch(1220, 327, 1248, 351, 0xCCCCCC)
  ...
 
Автор
T

Teacher

Новичок
Сообщения
33
Репутация
0
Добавил, запускаю, не открывается даже консоль :(
А Вы какую консоль имеете ввиду?
 

InnI

AutoIT Гуру
Сообщения
4 329
Репутация
1 167
Teacher [?]
запускаю, не открывается даже консоль
Нужно из редактора SciTE запускать - нажатием F5. Внизу редактора будет консоль, в которой должны появляться точки независимо от того, нажали вы F4 для запуска Start() или нет.

Кстати, куда вы добавили эту строчку?
Код:
AdlibRegister("CheckIt", 1000)
Она должна быть в начале скрипта (до или после HotKeySet).
 
Автор
T

Teacher

Новичок
Сообщения
33
Репутация
0
Консоль открывается, но точки не идут :(
Строку я добавил сюда:
Код:
HotKeySet("{F4}", "Start")
HotKeySet("{ESC}", "_Exit")

While 1
   Sleep(350)
   WEnd

AdlibRegister("CheckIt", 1000)

...и дальше уже функция Start()...
 

InnI

AutoIT Гуру
Сообщения
4 329
Репутация
1 167
Teacher [?]
Строку я добавил сюда
Я же вам написал - куда надо. Самой первой строчкой добавьте:
Код:
AdlibRegister("CheckIt", 1000)
HotKeySet("{F4}", "Start")
HotKeySet("{ESC}", "_Exit")

While 1
   Sleep(350)
   WEnd

...и дальше уже функция Start()...
 
Автор
T

Teacher

Новичок
Сообщения
33
Репутация
0
Добавил, выдает ошибку :(
Unknown function name
 
Автор
T

Teacher

Новичок
Сообщения
33
Репутация
0
Вот у меня почему то - эту функцию отображает как обычный текст. (он не синего цвета)
http://cs624629.vk.me/v624629020/14855/9_LAvCHzcxI.jpg


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

Вот весь код.
Код:
AdlibRegister("CheckIt", 1000)
HotKeySet("{F4}", "Start")
HotKeySet("{ESC}", "_Exit")

While 1
   Sleep(350)
   WEnd


Func Start()
While 1 ; <= начало цикла
$1 = PixelSearch(272,159,365,190,0xFF0000)
If IsArray($1) = True Then
$11 = PixelSearch(526,165,537,177,0xFF0000)
If IsArray($11) = True Then
MouseClick("left", 841, 635, 1, 0)
WaitColor(0x00FF00)
MouseClick("left", 925, 618, 1, 0)
EndIf
EndIf

$2 = PixelSearch(272,159,365,190,0x00FF00)
If IsArray($2) = True Then
$22 = PixelSearch(526,165,537,177,0x00FF00)
If IsArray($22) = True Then
MouseClick("left", 925, 618, 1, 0)
WaitColor(0xFF0000)
MouseClick("left", 841, 635, 1, 0)
EndIf
EndIf
	WEnd ; <= конец цикла
	EndFunc

Func WaitColor($Color)
  Do
    PixelSearch(526,165,537,177, $Color)
  Until Not @error
EndFunc

Func CheckIt()
ConsoleWrite(".")
  $close = PixelSearch(1220, 327, 1248, 351, 0xCCCCCC)
  If IsArray($close) = True Then
    Sleep(400)
    MouseClick("left", 1195, 479, 1, 0)
    Sleep(400)
  EndIf

  $eror = PixelSearch(797, 500, 851, 519, 0x404040)
  If IsArray($eror) = True Then
    MouseClick("left", 1150, 479, 1, 0)
  EndIf

  $ok = PixelSearch(690, 510, 1185, 591, 0x0084FF)
  If IsArray($ok) = True Then
    $posok = PixelSearch(690, 510, 1185, 591, 0x0084FF)
    If IsArray($posok) = True Then
      MouseMove($posok[0], $posok[1], 1)
      MouseClick("left")
      Sleep(30)
    EndIf
  EndIf
EndFunc

  Func _Exit()
		 Exit
	  EndFunc
 
Автор
T

Teacher

Новичок
Сообщения
33
Репутация
0
Версия 3.2.12.1
Давайте я поставлю AutoIt 3.3.12.0, где ее можно скачать? :smile:
 

InnI

AutoIT Гуру
Сообщения
4 329
Репутация
1 167
Teacher
Обновитесь до последней версии https://www.autoitscript.com/site/autoit/downloads/
 
Автор
T

Teacher

Новичок
Сообщения
33
Репутация
0
Спасибо, обновился, теперь код работает. Благодарю еще раз, не знаю что бы я без Вас делал :smile:
 
Верх