Что нового

Как сделать чтобы скрипт отрабатывал при не нахождении цвета?

arconas

Новичок
Сообщения
11
Репутация
0
Здравствуйте, помогите разобрать скрипт.
Как я вижу работу скрипта: при старте жмет "F" потом при изменение цвета в определенном месте экрана жмет "Tab". и продолжает дальше по цыклу, но если в определном месте экрана меняется цвет отрабатывает заданный код и дальше бегает по цыклу. Не могу разобраться в отработке если цвет не меняется.
и ещо момен как сделать чтобы работал в неактивном окне? Спасибо.
Код:
#include <WinAPI.au3>    
HotKeySet ("{F1}","_Pause" )
HotKeySet ("{F2}","_NotPause")
HotKeySet("{F7}", "_Exit")
Global $Paused
Func _Pause()
$Paused = True
While $Paused
WEnd
EndFunc
Func _NotPause()
$Paused = False
EndFunc



Sleep(5000)
While 1
Send("{f}")

Sleep(15000)    
WEnd
    While 2 
    $Coord = PixelSearch(358, 287, 483, 336, 0xC50400, 5) ; Найти в области (358, 287) - (483, 336) пиксель с отклонением не более 5 градаций от чисто красного
    
If Not @error Then ;действие(я) при нахождении пикселя
     Send("{tab}")
     Sleep(500)
     Send("{f}")
     
 Else
     $Coord = PixelSearch(1192, 833, 1211, 841, 0xF6C200, 5) ; Найти в области (1192, 833) - (1211, 841) пиксель с отклонением не более 10 градаций от чисто жёлтого.
    
If @error Then ;действие(я) при не нахождении нахождении пикселя.
    Send("{7}")
    Sleep(4000)
    Send("{7}")
    Sleep(4000)
    Send("{6}")
 EndIf
    Sleep(500)
     Send("{f}")
 EndIf
 WEnd
 

Glass4217

Продвинутый
Сообщения
288
Репутация
51
Вместо много "если" можно "перечислять" при каких обстоятельствах будет выполняться тот или иной кусок кода.
Код:
#include <WinAPI.au3>
HotKeySet ("{F1}","_Pause" )
HotKeySet ("{F2}","_NotPause")
HotKeySet("{F7}", "_Exit")
Global $Paused

$CoordRed = PixelSearch(358, 287, 483, 336, 0xC50400, 5) ; Найти в области (358, 287) - (483, 336) пиксель с отклонением не более 5 градаций от чисто красного
$CoordYellow = PixelSearch(1192, 833, 1211, 841, 0xF6C200, 5) ; Найти в области (1192, 833) - (1211, 841) пиксель с отклонением не более 10 градаций от чисто жёлтого.


Sleep(5000)
Send("f")
Sleep(15000)

While 1
Select
      Case $CoordRed Not 1 ;красный найден
         Send("{tab}")
         Sleep(500)
         Send("f")
      Case $CoordYellow = 1   ;желтый не найден
         Send("7")
         Sleep(4000)
         Send("7")
         Sleep(4000)
         Send("6")
      Case Else                ;жмем F
         Sleep(500)
         Send("f")
   EndSelect
WEnd

Func _Pause()
   $Paused = True
   While $Paused
   WEnd
EndFunc

Func _NotPause()
   $Paused = False
EndFunc
 
Автор
A

arconas

Новичок
Сообщения
11
Репутация
0
Вместо много "если" можно "перечислять" при каких обстоятельствах будет выполняться тот или иной кусок кода.
Спасибо Вам но, скрипт должен работать если даже нету цветов. А как сделать так: первый проход (нет цветов жмет F) 2 круг(есть желтый отрабатывает свой кусок кода) 3 круг(нет цветов просто жмет F) 4 круг (появляется красный отрабатывает свой кусок кода) и это в любой последовательности
 

Вложения

  • wepng.png
    wepng.png
    63.5 КБ · Просмотры: 4
Последнее редактирование:

Glass4217

Продвинутый
Сообщения
288
Репутация
51
попробуйте пока так. а вариант с case я чуть позже предложу.
Код:
#include <WinAPI.au3>
HotKeySet ("{F1}","_Pause" )
HotKeySet ("{F2}","_NotPause")
HotKeySet("{F7}", "_Exit")
Global $Paused
Sleep(5000)
Send("f")
Sleep(15000)
While 1
$CoordRed = PixelSearch(358, 287, 483, 336, 0xC50400, 5) ; Найти в области (358, 287) - (483, 336) пиксель с отклонением не более 5 градаций от чисто красного
   If Not @error Then
      Send("{tab}")
      Sleep(500)
      Send("f")
      ContinueLoop
   EndIf
$CoordYellow = PixelSearch(1192, 833, 1211, 841, 0xF6C200, 5)
   If Not @error Then
         Send("7")
         Sleep(4000)
         Send("7")
         Sleep(4000)
         Send("6")
         ContinueLoop
   EndIf
         Sleep(500)
         Send("f")
WEnd
Func _Pause()
   $Paused = True
   While $Paused
   WEnd
EndFunc
Func _NotPause()
   $Paused = False
EndFunc


Вариант case
Код:
#include <WinAPI.au3>
HotKeySet ("{F1}","_Pause" )
HotKeySet ("{F2}","_NotPause")
HotKeySet("{F7}", "_Exit")
Global $Paused
Sleep(5000)
Send("f")
Sleep(15000)
$CoordRed = 1
$CoordYellow = 0
While 1
   Select
      Case IsArray($CoordRed) = True ;красный найден
         Send("{tab}")
         Sleep(500)
         Send("f")
      Case $CoordYellow = 1   ;желтый не найден
         Send("7")
         Sleep(4000)
         Send("7")
         Sleep(4000)
         Send("6")
      Case Else                ;жмем F
         Sleep(500)
         Send("f")
      EndSelect
$CoordRed = PixelSearch(358, 287, 483, 336, 0xC50400, 5) ; Найти в области (358, 287) - (483, 336) пиксель с отклонением не более 5 градаций от чисто красного
$CoordYellow = PixelSearch(1192, 833, 1211, 841, 0xF6C200, 5) ; Найти в области (1192, 833) - (1211, 841) пиксель с отклонением не более 10 градаций от чисто жёлтого.
WEnd
Func _Pause()
   $Paused = True
   While $Paused
   WEnd
EndFunc
Func _NotPause()
   $Paused = False
EndFunc
 
Последнее редактирование:
Автор
A

arconas

Новичок
Сообщения
11
Репутация
0
Спасибо Вам за помощь(ваш код красивее и более функционален) но вернулись к началу, не находит что пропал желтый цвет. ноль реакции(
 

Glass4217

Продвинутый
Сообщения
288
Репутация
51
в данном случае не предусмотренно тригера, на "пропадание"(был - не стало), скрипт не "запоминает" был ли ранее цвет
каждый цикл идет проверка если есть цвет красный, то делаем так, далее есть цвет желтый делаем так, иначе делаем так.
оно конечно можно поковыряться, но довольно сложно выполнить правильно всё запросы, особенно учитывая мой нулевой опыт работы с поиском цвета пикселя.
Если вы сможете нарисовать подробную блок-схему, причина-следствие, то я постараюсь вам помочь. Чем подробней и наваристей схема тем веселее.
 
Автор
A

arconas

Новичок
Сообщения
11
Репутация
0
У вас опыта поболее моего. Спасибо вот такая схема:
 

Вложения

  • блок схема.png
    блок схема.png
    39.8 КБ · Просмотры: 8
Верх