1 (изменено: alalivanovivanov, 2022-04-29 01:24:51)

Тема: AHK: Как остановить цикл в нужный момент

Здравствуйте! Скрипт ищет несколько вариантов пикселей и когда находит совершает разные действия. Нужно, чтобы цикл остановился после того, как нашел нужные пиксели заданное количество раз. То есть остановить цикл после семи успешных попыток поиска.

Пробовал много разных вариантов, но безуспешно. Голова уже кипит и нервы на пределе, но хочу разобраться.



!9::
Loop
{
   PixelGetColor, check, 365, 254
   if(check = 0x000000)
   { 
        PixelGetColor, k_one, 245, 345  
        PixelGetColor, k_two, 659, 517
        if (k_one = 0xFFFFFF, k_two = 0xFFFFFF) 
        {
            loop, 2
            {
            MsgBox привет
            }
            sleep 200
            MsgBox снова привет
            sleep 350
        } 

        PixelGetColor, j_one, 359, 852
        PixelGetColor, j_two, 654, 357
        if (j_one = 0xFFFFFF, j_two = 0xFFFFFF) 
        {
            loop, 2
            {
            MsgBox здравствуйте
            }
            sleep 200
            MsgBox снова здравствуйте
            sleep 350
        }   
   }   
}
Return

2

Re: AHK: Как остановить цикл в нужный момент

alalivanovivanov, добро пожаловать на форум! Ознакомьтесь, пожалуйста, с Правилами, отредактируйте свой пост. Обратите внимание на оформление кода.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: alalivanovivanov, 2022-04-29 01:15:26)

Re: AHK: Как остановить цикл в нужный момент

.

4

Re: AHK: Как остановить цикл в нужный момент

alalivanovivanov пишет:

На оформление кода обратил внимание, но ничего не заметил

Читайте внимательнее, там есть ссылка на теги.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: alalivanovivanov, 2022-04-29 01:15:38)

Re: AHK: Как остановить цикл в нужный момент

.

6

Re: AHK: Как остановить цикл в нужный момент

Если не можете разобраться в оформлении постов, этот форум, скорее всего, не для вас, сожалею.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: alalivanovivanov, 2022-04-29 01:27:05)

Re: AHK: Как остановить цикл в нужный момент

С оформлением постов разобрался). Можете помочь по моей теме?

8

Re: AHK: Как остановить цикл в нужный момент

alalivanovivanov пишет:

С оформлением постов разобрался

Поздравляю, но не нужно было удалять другие посты, на которые было отвечено.

alalivanovivanov пишет:

Голова уже кипит и нервы на пределе, но хочу разобраться

Честно говоря, вы не были близки к решению. Во-первых, такие выражения

if (k_one = 0xFFFFFF, k_two = 0xFFFFFF)

в AHK не поддерживаются, нужно

if (k_one = 0xFFFFFF and k_two = 0xFFFFFF)

или

if (k_one = 0xFFFFFF && k_two = 0xFFFFFF)

Кроме того вообще не факт, что ищутся нужные пиксели, смотрите команду CoordMode.
Если я правильно понял задачу, нужно что-то вроде этого:

!9::
count := 0
Loop
{
   found := true
   PixelGetColor, check, 365, 254
   if(check = 0x000000)
   { 
        PixelGetColor, k_one, 245, 345  
        PixelGetColor, k_two, 659, 517
        if (k_one = 0xFFFFFF && k_two = 0xFFFFFF) 
        {
            loop, 2
            {
            MsgBox привет
            }
            sleep 200
            MsgBox снова привет
            sleep 350
        }
        else {
            found := false
        }
        PixelGetColor, j_one, 359, 852
        PixelGetColor, j_two, 654, 357
        if (j_one = 0xFFFFFF && j_two = 0xFFFFFF) 
        {
            loop, 2
            {
            MsgBox здравствуйте
            }
            sleep 200
            MsgBox снова здравствуйте
            sleep 350
        }
        else {
            found := false
        }
   }
   else {
      found := false
   }
   if found
      count++
} until count = 7
Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Как остановить цикл в нужный момент

Задачу вы поняли правильно. Код красивый, но работает также как и мой. Ищет пиксели без остановки.

10

Re: AHK: Как остановить цикл в нужный момент

Не могу сказать в чём проблема, технически ошибок вроде нет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Как остановить цикл в нужный момент

Может здесь:

until count = 7

.. лучше использовать "=="?

Win10: LTSC (v1809); AHK: ANSI (v1.1.33.10)

12

Re: AHK: Как остановить цикл в нужный момент

Нет, при сравнении чисел эти операторы равнозначны. Оператор == используется при сравнении строк, чтобы оно было регистрозависимым.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Как остановить цикл в нужный момент

Просто я никогда не использовал "=" в условиях, ибо привычка с JS, что это присваивание. Буду знать.

Win10: LTSC (v1809); AHK: ANSI (v1.1.33.10)

14

Re: AHK: Как остановить цикл в нужный момент

Может все дело во флаге "found" попробуй без него.

!9::
count := 0
Loop
{
  PixelGetColor, check, 365, 254
  if(check = 0x000000)
  { 
    PixelGetColor, k_one, 245, 345  
    PixelGetColor, k_two, 659, 517
    if (k_one = 0xFFFFFF && k_two = 0xFFFFFF) 
    {
        loop, 2
        {
        MsgBox привет
        }
        sleep 200
        MsgBox снова привет
        sleep 350
        count++
    }
    PixelGetColor, j_one, 359, 852
    PixelGetColor, j_two, 654, 357
    if (j_one = 0xFFFFFF && j_two = 0xFFFFFF) 
    {
        loop, 2
        {
        MsgBox здравствуйте
        }
        sleep 200
        MsgBox снова здравствуйте
        sleep 350
        count++
    }
  }
} until count = 7
Return
Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

15

Re: AHK: Как остановить цикл в нужный момент

Видимо дело не во флаге "found" без него тоже самое.  Решил поколдовать над тем, что мне предложили. И вот что получилось.


!9::
count := 0
Loop
{
   found := true
   PixelGetColor, check, 365, 254
   if(check = 0x000000)
   { 
        PixelGetColor, k_one, 245, 345  
        PixelGetColor, k_two, 659, 517
        if (k_one = 0xFFFFFF && k_two = 0xFFFFFF) 
        {
            loop, 2
            {
            MsgBox привет
            }
            sleep 200
            MsgBox снова привет
            sleep 350
        }
        else {
            found := false
        }
        PixelGetColor, j_one, 359, 852
        PixelGetColor, j_two, 654, 357
        if (j_one = 0xFFFFFF && j_two = 0xFFFFFF) 
        {
            loop, 2
            {
            MsgBox здравствуйте
            }
            sleep 200
            MsgBox снова здравствуйте
            sleep 350
        }
        
   }
   else {
      found := false
   }
   if found
      count++
} until count = 7
Return

Я убрал из кода  "else {
                           found := false
                                             }"
В таком виде скрипт останавливается когда нужно, если находит пиксели K. Но вот пиксели j находит без остановки.
Чувствую истина где-то рядом.