Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Ramzesia on August 24, 2017, 11:34:44 AM

Title: Подпрограмма помогите не доходит
Post by: Ramzesia on August 24, 2017, 11:34:44 AM
Помогите разобраться, что то не могу вникнуть. Данная подпрограмма не работает.
proga.cms
Code: (clickermann) [Select]
SUB(Pod_proga)
LOGWRITE ("Подпрограмма")
END_SUB

GOSUB(Pod_proga)
main.cms
Code: (clickermann) [Select]
#include "proga.cms"
GOSUB(Pod_proga)

HALT

А вообще мне нужно вот это вывести в отдельный файл, что бы вызывалось после нахождения картинки капчи.
[spoiler]
Code: (clickermann) [Select]
GETSCREEN(450,430, 490,470) // Распознать капчу
COLORMODE(6, 450,430, 490,470)
IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // после нахождения этого окошка с капчей что бы сработала подпрограмма
   $cap4a = 1
   WHILE($cap4a = 1) // цикл распознавания капчи
 
      WAIT(1)
      $hwnd = wndFind("AGClient v1.5") // находим окно
      LOGWRITE ("AGClient hwnd: ", $hwnd)
 
      TFCLEAR("out.txt")
      WAITMS(50)
      TFWRITE("out.txt", "0")
      waitms(200)
 
      PostMessage($hwnd, 0x555, 5, 0) // распознать
      waitms(200)
      $response = 0
 
      WHILE($response = 0)
         $response = TFREAD("out.txt", 1)
         WAITMS(500)
      END_CYC
 
      IF ($response = 1)
         $str = TFREAD("out.txt", 2)
         LOGWRITE ("Распознано. Ответ: ", $str)
         FOR($step=1,$step<4)
            $click=STRCUT($str,$step,1)
            WAITMS(100)
            SWITCH($click)
            CASE(1)
               LCLICK(350,330)
            CASE(2)
               LCLICK(475,330)
            CASE(3)
               LCLICK(600,330)
            CASE(4)
               LCLICK(350,390)
            CASE(5)
               LCLICK(475,390)
            CASE(6)
               LCLICK(600,390)
            CASE(7)
               LCLICK(350,455)
            CASE(8)
               LCLICK(475,455)
            CASE(9)
               LCLICK(600,455)
            END_SWITCH
         END_CYC
         WAITMS(100)
         LCLICK(480,520) // отправить
         WAITMS(300)
         $cap4a = 0 // после ввода выходим из цикла
      END_IF
      IF ($response = 2)
         LOGWRITE ("НЕ распознано. Ошибка!")
         WAITMS(300)
      END_IF
   END_CYC
END_IF
[/spoiler]
Title: Re: Подпрограмма помогите не доходит
Post by: Vint on August 24, 2017, 01:36:59 PM
Ты где "GOSUB" нарыл? Это антиквариат. С версии v4.9 подпрограммы вызываются по имени.

В справку опять не заглядываешь?
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 24, 2017, 02:38:53 PM
Ты где "GOSUB" нарыл? Это антиквариат. С версии v4.9 подпрограммы вызываются по имени.

В справку опять не заглядываешь?
Нарыл тут http://crapware.aidf.org/forum/index.php?topic=33.msg708#msg708
В справке не разобрался(
Title: Re: Подпрограмма помогите не доходит
Post by: Vint on August 24, 2017, 04:12:34 PM
А дата? Там же 2012 год.

В этом проблема поиска решения в закромах форума или VK (и ютубы туда же) - устаревание информации. Нужно всегда смотреть на дату и сопоставлять версии программы.

Как можно не разобраться в справке? До сих пор не открывается?
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 25, 2017, 12:30:38 AM
А дата? Там же 2012 год.

В этом проблема поиска решения в закромах форума или VK (и ютубы туда же) - устаревание информации. Нужно всегда смотреть на дату и сопоставлять версии программы.

Как можно не разобраться в справке? До сих пор не открывается?
Ну то что нет свежих постов я не виноват.
Справка открывается и даже нашел раздел с "основные конструкции" SUB (подпрограммы) даже прочел все 3 раза, либо я тупой либо справка не понятно написана. В справке нет примера с инклюде, я не программист, программный язык для меня как космос.
Code: (clickermann) [Select]
// Тело подпрограммы
sub(cap4a)
$cap4a = 1
WHILE($cap4a = 1) // цикл распознавания капчи
   
   WAIT(1)
   $hwnd = wndFind("AGClient v1.5") // находим окно
   LOGWRITE ("AGClient hwnd: ", $hwnd)
   
   TFCLEAR("out.txt")
   WAITMS(50)
   TFWRITE("out.txt", "0")
   waitms(200)
   
   PostMessage($hwnd, 0x555, 5, 0) // распознать
   waitms(200)
   $response = 0
   
   WHILE($response = 0)
      $response = TFREAD("out.txt", 1)
      WAITMS(500)
   END_CYC
   
   IF ($response = 1)
      $str = TFREAD("out.txt", 2)
      LOGWRITE ("Распознано. Ответ: ", $str)
      FOR($step=1,$step<4)
         $click=STRCUT($str,$step,1)
         WAITMS(100)
         SWITCH($click)
         CASE(1)
            LCLICK(350,330)
         CASE(2)
            LCLICK(475,330)
         CASE(3)
            LCLICK(600,330)
         CASE(4)
            LCLICK(350,390)
         CASE(5)
            LCLICK(475,390)
         CASE(6)
            LCLICK(600,390)
         CASE(7)
            LCLICK(350,455)
         CASE(8)
            LCLICK(475,455)
         CASE(9)
            LCLICK(600,455)
         END_SWITCH
      END_CYC
      WAITMS(100)
      LCLICK(480,520) // отправить
      WAITMS(300)
      $cap4a = 0 // после ввода выходим из цикла
   END_IF
   IF ($response = 2)
      LOGWRITE ("НЕ распознано. Ошибка!")
      WAITMS(300)
   END_IF
END_CYC
end_sub

// Строка в основном скрипте если нашлась капча вызывается подпрограмма
GETSCREEN(450,430, 490,470) // Поиск капчи
COLORMODE(6, 450,430, 490,470)
IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // капча нашлась
// вызов подпрограммы
#include "cap4a.cms"
cap4a()
END_IF
Так правильно?
Title: Re: Подпрограмма помогите не доходит
Post by: Vint on August 25, 2017, 08:11:57 AM
Почти.
#include "cap4a.cms" не нужно писать внутри условия. Пиши в начале скрипта.


С #include всё просто, как табуретка. Перед запуском скрипта, скрипт пробегается как текстовый файл. Все найденные #include заменяются в этом же месте где он стоит кодом из указанного файла.

Сделай файл БЕЗ #include, потом то, что хочешь вынести в отдельный файл туда убирай и на этом месте пиши #include. Не можешь это сделать мысленно - сделай на яву.

Сейчас в твоём коде если содержимое из "cap4a.cms" (подпрограмму) вставить туда, где оно появится, то выйдет:
Code: (clickermann) [Select]
IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // капча нашлась
    // Тело подпрограммы
    sub(cap4a)
        // цикл распознавания капчи
    end_sub
    // вызов подпрограммы
    cap4a()
END_IF

Это неправильно! Тело подпрограммы (SUB...END_SUB) не может быть вложено. Ни в условия ни в циклы.


Ну то что нет свежих постов я не виноват.
Это ты пошутил так? В каждом 10 ответе есть пример с вызовом подпрограммы. Вот из последних прямо по последним постам
http://crapware.aidf.org/forum/index.php?topic=3409.msg23273#msg23273
http://crapware.aidf.org/forum/index.php?topic=3397.msg23321#msg23321

Ты так и будешь дальше ничего не понимать, пока будешь учить синтаксис не из справки, а по чужим постам на форуме. Там люди решают свои проблемы. И никто не будет писать "новые посты" переписывая туда инфу из справки, это мартышкин труд (для нерускоязычных - это фразеологизм такой).
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 12:52:44 PM
Quote
Vint
Спасибо большое. Теперь стало понятно, оказалось действительно все очень легко и просто :)
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 01:02:40 PM
Ребят помогите в подпрограмму добавить, проверку ушла ли капча, если нет то повторить распознавание 3 раза, если все равно капча не ушла то остановить скрипт. А то случается так, что капча зависает и происходит безостановочное распознавание.
[spoiler]
Code: (clickermann) [Select]
sub(cap4a)
   GETSCREEN(450,430, 490,470)
   COLORMODE(6, 450,430, 490,470)
   IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
      $cap4a = 1
      WHILE($cap4a = 1) // цикл распознавания капчи
         // Область снимка капчи
         $x1 = 285
         $y1 = 160
         $x2 = 675
         $y2 = 280
         
         WAIT(1)
         $hwnd = wndFind("AGClient v1.5") // находим окно
         LOGWRITE ("AGClient hwnd: ", $hwnd)
         
         TFCLEAR("out.txt")
         WAITMS(50)
         TFWRITE("out.txt", "0")
         waitms(200)
         
         // последовательное задание координат
         PostMessage($hwnd, 0x555, 1, $x1)
         PostMessage($hwnd, 0x555, 2, $y1)
         PostMessage($hwnd, 0x555, 3, $x2)
         PostMessage($hwnd, 0x555, 4, $y2)
         PostMessage($hwnd, 0x555, 5, 0) // распознать
         waitms(200)
         $response = 0
         
         WHILE($response = 0)
            $response = TFREAD("out.txt", 1)
            WAITMS(500)
         END_CYC
         
         IF ($response = 1)
            $str = TFREAD("out.txt", 2)
            LOGWRITE ("Распознано. Ответ: ", $str)
            FOR($step=1,$step<4)
               $click=STRCUT($str,$step,1)
               WAITMS(100)
               SWITCH($click)
               CASE(1)
                  LCLICK(350,330)
               CASE(2)
                  LCLICK(475,330)
               CASE(3)
                  LCLICK(600,330)
               CASE(4)
                  LCLICK(350,390)
               CASE(5)
                  LCLICK(475,390)
               CASE(6)
                  LCLICK(600,390)
               CASE(7)
                  LCLICK(350,455)
               CASE(8)
                  LCLICK(475,455)
               CASE(9)
                  LCLICK(600,455)
               END_SWITCH
            END_CYC
            WAITMS(100)
            LCLICK(480,520) // отправить
            WAITMS(300)
            $cap4a = 0 // после ввода выходим из цикла
         END_IF
         IF ($response = 2)
            LOGWRITE ("НЕ распознано. Ошибка!")
            WAITMS(300)
         END_IF
      END_CYC
   END_IF
end_sub
[/spoiler]
Title: Re: Подпрограмма помогите не доходит
Post by: Vint on August 28, 2017, 02:50:41 PM
Что означает проверка "ушла ли капча". Ушла на распознавание в AGC? Или AGC вернул распознавание удачно?
Или "ушла" в смысле принята твоей программой?
Title: Re: Подпрограмма помогите не доходит
Post by: Vint on August 28, 2017, 03:04:00 PM
Вот если пришёл ответ "не распознана" или в течении 60 секунд ответа нет - отправляем заново. И так 3 раза.
Если 3 раза неудача - HALT
Code: (clickermann) [Select]
WAIT(1)
$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)

$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280



SUB(cap4a)
    GETSCREEN(450,430, 490,470)
    COLORMODE(6, 450,430, 490,470)
    IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
        FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
            // Область снимка капчи
           
            TFCLEAR("out.txt")
            WAITMS(50)
            TFWRITE("out.txt", "0")
            waitms(200)
           
            // последовательное задание координат
            PostMessage($hwnd, 0x555, 1, $x1)
            PostMessage($hwnd, 0x555, 2, $y1)
            PostMessage($hwnd, 0x555, 3, $x2)
            PostMessage($hwnd, 0x555, 4, $y2)
            PostMessage($hwnd, 0x555, 5, 0) // распознать
            waitms(200)
            $response = 0
           
            $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
            WHILE(($response = 0) & ($time_cap4a < $_time_t))
                $response = TFREAD("out.txt", 1)
                WAITMS(500)
            END_CYC
           
            IF($response = 1)
                $str = TFREAD("out.txt", 2)
                LOGWRITE("Распознано. Ответ: ", $str)
                FOR($step=1, $step < 4)
                    $click = STRCUT($str, $step, 1)
                    WAITMS(100)
                    SWITCH($click)
                    CASE(1)
                        LCLICK(350,330)
                    CASE(2)
                        LCLICK(475,330)
                    CASE(3)
                        LCLICK(600,330)
                    CASE(4)
                        LCLICK(350,390)
                    CASE(5)
                        LCLICK(475,390)
                    CASE(6)
                        LCLICK(600,390)
                    CASE(7)
                        LCLICK(350,455)
                    CASE(8)
                        LCLICK(475,455)
                    CASE(9)
                        LCLICK(600,455)
                    END_SWITCH
                END_CYC
                WAITMS(100)
                LCLICK(480,520) // отправить
                WAITMS(300)
                $cap4a = 100 // после ввода выходим из цикла
            END_IF
            IF(($response = 2) | ($response = 0))
                LOGWRITE ("НЕ распознано. Ошибка!")
                WAITMS(300)
            END_IF
        END_CYC
        IF($cap4a < 100)
            LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
            HALT
        END_IF
    END_IF
END_SUB
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 03:32:49 PM
Что означает проверка "ушла ли капча".
Нужно проверить ушло ли окно капчи если окно капчи не уходит нужно остановить кликер. Потому как бывает капча зависает или окошко с цифрами не появилось, то происходит постоянное распознавание а мне надо что бы 3-5 раз проверил если окошко не ушло то скрипт полностью остановился
Вот если эта картинка зависла по каким то причинам не уходит то нужно полностью остановить кликер
Code: (clickermann) [Select]
   GETSCREEN(450,430, 490,470)
   COLORMODE(6, 450,430, 490,470)
   IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
Title: Re: Подпрограмма помогите не доходит
Post by: Vint on August 28, 2017, 04:37:30 PM
Code: (clickermann) [Select]
WAIT(1)
$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)

// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280


SUB(cap4a)
    FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
        GETSCREEN(450,430, 490,470)
        COLORMODE(6, 450,430, 490,470)
        IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
            TFCLEAR("out.txt")
            WAITMS(50)
            TFWRITE("out.txt", "0")
            waitms(200)
           
            // последовательное задание координат
            PostMessage($hwnd, 0x555, 1, $x1)
            PostMessage($hwnd, 0x555, 2, $y1)
            PostMessage($hwnd, 0x555, 3, $x2)
            PostMessage($hwnd, 0x555, 4, $y2)
            PostMessage($hwnd, 0x555, 5, 0) // распознать
            waitms(200)
            $response = 0
           
            $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
            WHILE(($response = 0) & ($time_cap4a < $_time_t))
                $response = TFREAD("out.txt", 1)
                WAITMS(500)
            END_CYC
           
            IF($response = 1)
                $str = TFREAD("out.txt", 2)
                LOGWRITE("Распознано. Ответ: ", $str)
                FOR($step=1, $step < 4)
                    $click = STRCUT($str, $step, 1)
                    WAITMS(100)
                    SWITCH($click)
                    CASE(1)
                        LCLICK(350,330)
                    CASE(2)
                        LCLICK(475,330)
                    CASE(3)
                        LCLICK(600,330)
                    CASE(4)
                        LCLICK(350,390)
                    CASE(5)
                        LCLICK(475,390)
                    CASE(6)
                        LCLICK(600,390)
                    CASE(7)
                        LCLICK(350,455)
                    CASE(8)
                        LCLICK(475,455)
                    CASE(9)
                        LCLICK(600,455)
                    END_SWITCH
                END_CYC
                WAITMS(100)
                LCLICK(480,520) // отправить
                WAITMS(300)
                $cap4a = 100 // после ввода выходим из цикла
            END_IF
            IF(($response = 2) | ($response = 0))
                LOGWRITE ("НЕ распознано. Ошибка!")
                WAITMS(300)
            END_IF
        END_IF
    END_CYC
    IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF
END_SUB
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 08:29:56 PM
Сори за назойливость, просто хочу понять как это работает.
Почему это ты вынес за пределы подпрограммы? И куда его вписать в основной скрипт? Оно вить не сработает если оставить так, это подключаемый файл.
Code: (clickermann) [Select]
WAIT(1)
$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
 
// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280

Если я не ошибаюсь это проверит наличие капчи "картинка окна" 2 раза
Code: (clickermann) [Select]
FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
И вот это не понятно, насколько моего воображения хватило, мне кажется что все остановится при первом неудачном распознавании.
Code: (clickermann) [Select]
    IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 28, 2017, 08:46:52 PM
Почему это ты вынес за пределы подпрограммы? И куда его вписать в основной скрипт? Оно вить не сработает если оставить так, это подключаемый файл.
Можешь вписать в основной или оставить так. Сработает полюбому.
Если я не ошибаюсь это проверит наличие капчи "картинка окна" 2 раза
Ошибаешься. Первая проверка=0, вторая=1, третья=2. Цикл повторяется пока переменная меньше 3.
И вот это не понятно, насколько моего воображения хватило, мне кажется что все остановится при первом неудачном распознавании.
Так как это условие вынесено за пределы цикла, проверка будет выполнена только после его завершения.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 08:53:43 PM
Ок спасибо за помощь и разъяснения. Пойду пробовать.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 09:50:16 PM
Не работает, сразу остановка скрипта. Вот лог:
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось.
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 28, 2017, 09:56:42 PM
Не работает, сразу остановка скрипта. Вот лог:
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось.
С запущеным AGClient`ом такой результат? Или забыл про него?
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 10:11:28 PM
Quote
С запущеным AGClient`ом такой результат? Или забыл про него?
С запущенным AGClient`ом. Он у меня сам запускается вот строки в основном скрипте:
Code: (clickermann) [Select]
IF( wndfind("AGClient v1.5"))
   WAITMS(100)
ELSE
   execute("AGClient.exe")
   WAITMS(300)
   wndpos( wndfind("AGClient v1.5"), 1000, 219)
   WAITMS(100)
   LCLICK(1122,314)
END_IF

// Подгружаемый скрипт
cap4a()
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 28, 2017, 10:34:42 PM
Где находится строчка
Code: (clickermann) [Select]
#include "cap4a.cms"
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 10:39:57 PM
Где находится строчка
Code: (clickermann) [Select]
#include "cap4a.cms"
В начале скрипта.
Code: (clickermann) [Select]
#name "WOF"
#include "cap4a.cms"
wndpos( wndfind("NoxPlayer"), 0, 0)
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 28, 2017, 10:45:56 PM
Вот это
Code: (clickermann) [Select]
$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
вырежи из "cap4a.cms" и вставь в основной скрипт после
Code: (clickermann) [Select]
IF( wndfind("AGClient v1.5"))
   WAITMS(100)
ELSE
   execute("AGClient.exe")
   WAITMS(300)
   wndpos( wndfind("AGClient v1.5"), 1000, 219)
   WAITMS(100)
   LCLICK(1122,314)
END_IF
Title: Re: Подпрограмма помогите не доходит
Post by: dramster on August 28, 2017, 10:58:19 PM
Не работает, сразу остановка скрипта. Вот лог:
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось.
а у тебя точно версия 1.5? дело в том, что эта версия есть пока только тут http://crapware.aidf.org/forum/index.php?topic=73.msg14680#msg14680 . а на офсайте сейчас версия 1.4 , хоть и на писано на ссылке что 1.3  :D .
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 11:00:55 PM
Не работает, сразу остановка скрипта. Вот лог:
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось.
а у тебя точно версия 1.5? дело в том, что эта версия есть пока только тут http://crapware.aidf.org/forum/index.php?topic=73.msg14680#msg14680 . а на офсайте сейчас версия 1.4 , хоть и на писано на ссылке что 1.3  :D .
Я с этого поста и скачивал. Точно 1.5
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 28, 2017, 11:00:59 PM
Директива #include "cap4a.cms" просто заменяет собой весь код который находится в файле cap4a.cms. Это то-же самое если написать весь код из подключаемого файла в основном. Никакого волшебства тут нет. Сделано для удобства. Надо это понимать при использовании. И форум чаще  и больше читать.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 11:01:15 PM
Типа так?

Основной скрипт
Code: (clickermann) [Select]
#name "WOF"
#include "cap4a.cms"
wndpos( wndfind("NoxPlayer"), 0, 0)

IF( wndfind("AGClient v1.5"))
   WAITMS(100)
ELSE
   execute("AGClient.exe")
   WAITMS(300)
   wndpos( wndfind("AGClient v1.5"), 1000, 219)
   WAITMS(100)
   LCLICK(1122,314)
END_IF

$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
cap4a()

kap4a.cms
[spoiler]
Code: (clickermann) [Select]
WAIT(1)
 
// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280
 
 
SUB(cap4a)
    FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
        GETSCREEN(450,430, 490,470)
        COLORMODE(6, 450,430, 490,470)
        IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
            TFCLEAR("out.txt")
            WAITMS(50)
            TFWRITE("out.txt", "0")
            waitms(200)
 
            // последовательное задание координат
            PostMessage($hwnd, 0x555, 1, $x1)
            PostMessage($hwnd, 0x555, 2, $y1)
            PostMessage($hwnd, 0x555, 3, $x2)
            PostMessage($hwnd, 0x555, 4, $y2)
            PostMessage($hwnd, 0x555, 5, 0) // распознать
            waitms(200)
            $response = 0
 
            $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
            WHILE(($response = 0) & ($time_cap4a < $_time_t))
                $response = TFREAD("out.txt", 1)
                WAITMS(500)
            END_CYC
 
            IF($response = 1)
                $str = TFREAD("out.txt", 2)
                LOGWRITE("Распознано. Ответ: ", $str)
                FOR($step=1, $step < 4)
                    $click = STRCUT($str, $step, 1)
                    WAITMS(100)
                    SWITCH($click)
                    CASE(1)
                        LCLICK(350,330)
                    CASE(2)
                        LCLICK(475,330)
                    CASE(3)
                        LCLICK(600,330)
                    CASE(4)
                        LCLICK(350,390)
                    CASE(5)
                        LCLICK(475,390)
                    CASE(6)
                        LCLICK(600,390)
                    CASE(7)
                        LCLICK(350,455)
                    CASE(8)
                        LCLICK(475,455)
                    CASE(9)
                        LCLICK(600,455)
                    END_SWITCH
                END_CYC
                WAITMS(100)
                LCLICK(480,520) // отправить
                WAITMS(300)
                $cap4a = 100 // после ввода выходим из цикла
            END_IF
            IF(($response = 2) | ($response = 0))
                LOGWRITE ("НЕ распознано. Ошибка!")
                WAITMS(300)
            END_IF
        END_IF
    END_CYC
    IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF
END_SUB
[/spoiler]
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 28, 2017, 11:03:52 PM
Типа так?
БИНГО-О-О-О!!!
А Clickermann видит это так:
Code: (clickermann) [Select]
#name "WOF"
WAIT(1)

// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280


SUB(cap4a)
   FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
      GETSCREEN(450,430, 490,470)
      COLORMODE(6, 450,430, 490,470)
      IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
         TFCLEAR("out.txt")
         WAITMS(50)
         TFWRITE("out.txt", "0")
         waitms(200)
         
         // последовательное задание координат
         PostMessage($hwnd, 0x555, 1, $x1)
         PostMessage($hwnd, 0x555, 2, $y1)
         PostMessage($hwnd, 0x555, 3, $x2)
         PostMessage($hwnd, 0x555, 4, $y2)
         PostMessage($hwnd, 0x555, 5, 0) // распознать
         waitms(200)
         $response = 0
         
         $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
         WHILE(($response = 0) & ($time_cap4a < $_time_t))
            $response = TFREAD("out.txt", 1)
            WAITMS(500)
         END_CYC
         
         IF($response = 1)
            $str = TFREAD("out.txt", 2)
            LOGWRITE("Распознано. Ответ: ", $str)
            FOR($step=1, $step < 4)
               $click = STRCUT($str, $step, 1)
               WAITMS(100)
               SWITCH($click)
               CASE(1)
                  LCLICK(350,330)
               CASE(2)
                  LCLICK(475,330)
               CASE(3)
                  LCLICK(600,330)
               CASE(4)
                  LCLICK(350,390)
               CASE(5)
                  LCLICK(475,390)
               CASE(6)
                  LCLICK(600,390)
               CASE(7)
                  LCLICK(350,455)
               CASE(8)
                  LCLICK(475,455)
               CASE(9)
                  LCLICK(600,455)
               END_SWITCH
            END_CYC
            WAITMS(100)
            LCLICK(480,520) // отправить
            WAITMS(300)
            $cap4a = 100 // после ввода выходим из цикла
         END_IF
         IF(($response = 2) | ($response = 0))
            LOGWRITE ("НЕ распознано. Ошибка!")
            WAITMS(300)
         END_IF
      END_IF
   END_CYC
   IF($cap4a < 100)
      LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
      HALT
   END_IF
END_SUB
wndpos( wndfind("NoxPlayer"), 0, 0)

IF( wndfind("AGClient v1.5"))
   WAITMS(100)
ELSE
   execute("AGClient.exe")
   WAITMS(300)
   wndpos( wndfind("AGClient v1.5"), 1000, 219)
   WAITMS(100)
   LCLICK(1122,314)
END_IF

$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
cap4a()
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 11:10:25 PM
Типа так?
БИНГО-О-О-О!!!
Та же шляпа
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось
До того как винт добавил цикл фор все работало но не было остановки скрипта если капча зависла. Мне кажется проблема кроется где то тут:

Code: (clickermann) [Select]
WAIT(1)
$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
 
// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280

Code: (clickermann) [Select]
FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
   
Code: (clickermann) [Select]
IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 28, 2017, 11:16:28 PM
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось
Ты это скопировал из прошлого поста(время то-же)? >:( Ключевая строчка эта: AGClient hwnd: 0 Значит программа не видит окно AGClient`а.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 11:18:02 PM
Как работает инклюд я уже понял Винт норм объяснил, вот только проблема в другом.
Вот то что у меня было и работает норм. Просто сюда нужно добавить цикл что бы после того как капча зависла через 5 попыток скрипт остановился.
Code: (clickermann) [Select]
sub(cap4a)
   GETSCREEN(450,430, 490,470)
   COLORMODE(6, 450,430, 490,470)
   IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
      $cap4a = 1
      WHILE($cap4a = 1) // цикл распознавания капчи
         // Область снимка капчи
         $x1 = 285
         $y1 = 160
         $x2 = 675
         $y2 = 280
         
         WAIT(1)
         $hwnd = wndFind("AGClient v1.5") // находим окно
         LOGWRITE ("AGClient hwnd: ", $hwnd)
         
         TFCLEAR("out.txt")
         WAITMS(50)
         TFWRITE("out.txt", "0")
         waitms(200)
         
         // последовательное задание координат
         PostMessage($hwnd, 0x555, 1, $x1)
         PostMessage($hwnd, 0x555, 2, $y1)
         PostMessage($hwnd, 0x555, 3, $x2)
         PostMessage($hwnd, 0x555, 4, $y2)
         PostMessage($hwnd, 0x555, 5, 0) // распознать
         waitms(200)
         $response = 0
         
         WHILE($response = 0)
            $response = TFREAD("out.txt", 1)
            WAITMS(500)
         END_CYC
         
         IF ($response = 1)
            $str = TFREAD("out.txt", 2)
            LOGWRITE ("Распознано. Ответ: ", $str)
            FOR($step=1,$step<4)
               $click=STRCUT($str,$step,1)
               WAITMS(100)
               SWITCH($click)
               CASE(1)
                  LCLICK(350,330)
               CASE(2)
                  LCLICK(475,330)
               CASE(3)
                  LCLICK(600,330)
               CASE(4)
                  LCLICK(350,390)
               CASE(5)
                  LCLICK(475,390)
               CASE(6)
                  LCLICK(600,390)
               CASE(7)
                  LCLICK(350,455)
               CASE(8)
                  LCLICK(475,455)
               CASE(9)
                  LCLICK(600,455)
               END_SWITCH
            END_CYC
            WAITMS(100)
            LCLICK(480,520) // отправить
            WAITMS(300)
            $cap4a = 0 // после ввода выходим из цикла
         END_IF
         IF ($response = 2)
            LOGWRITE ("НЕ распознано. Ошибка!")
            WAITMS(300)
         END_IF
      END_CYC
   END_IF
end_sub
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 11:20:03 PM
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось
Ты это скопировал из прошлого поста(время то-же)? >:( Ключевая строчка эта: AGClient hwnd: 0 Значит программа не видит окно AGClient`а.
Да скопировал просто не стал в лог лезть.
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 28, 2017, 11:29:41 PM
Да скопировал просто не стал в лог лезть.
Дык может там другие цифры? При отладке скрипта из лога вылазить нельзя, а он лезть не стал... Может картинку не видит.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 28, 2017, 11:42:34 PM
Картинку находит 100% ни разу не было сбоя!
AGClient тоже находит.
Проблема в том что скрипт сразу останавливается, а это значит что прога работает потому как HALT стоит только тут
Code: (clickermann) [Select]
    IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 28, 2017, 11:53:43 PM
Это условие будет верным только если это- IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) неверным.
Ща проверим. Вставляй в инклюд, запускай, смотри лог.
Code: (clickermann) [Select]
WAIT(1)

// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280


SUB(cap4a)
   FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
      GETSCREEN(450,430, 490,470)
      COLORMODE(6, 450,430, 490,470)
      IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
         LOGWRITE ("Капча нашлась!!!")
         TFCLEAR("out.txt")
         WAITMS(50)
         TFWRITE("out.txt", "0")
         waitms(200)
         
         // последовательное задание координат
         PostMessage($hwnd, 0x555, 1, $x1)
         PostMessage($hwnd, 0x555, 2, $y1)
         PostMessage($hwnd, 0x555, 3, $x2)
         PostMessage($hwnd, 0x555, 4, $y2)
         PostMessage($hwnd, 0x555, 5, 0) // распознать
         waitms(200)
         $response = 0
         
         $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
         WHILE(($response = 0) & ($time_cap4a < $_time_t))
            $response = TFREAD("out.txt", 1)
            WAITMS(500)
         END_CYC
         
         IF($response = 1)
            $str = TFREAD("out.txt", 2)
            LOGWRITE("Распознано. Ответ: ", $str)
            FOR($step=1, $step < 4)
               $click = STRCUT($str, $step, 1)
               WAITMS(100)
               SWITCH($click)
               CASE(1)
                  LCLICK(350,330)
               CASE(2)
                  LCLICK(475,330)
               CASE(3)
                  LCLICK(600,330)
               CASE(4)
                  LCLICK(350,390)
               CASE(5)
                  LCLICK(475,390)
               CASE(6)
                  LCLICK(600,390)
               CASE(7)
                  LCLICK(350,455)
               CASE(8)
                  LCLICK(475,455)
               CASE(9)
                  LCLICK(600,455)
               END_SWITCH
            END_CYC
            WAITMS(100)
            LCLICK(480,520) // отправить
            WAITMS(300)
            $cap4a = 100 // после ввода выходим из цикла
         END_IF
         IF(($response = 2) | ($response = 0))
            LOGWRITE ("НЕ распознано. Ошибка!")
            WAITMS(300)
         END_IF
      ELSE
         LOGWRITE ("Капча нифига не нашлась!!!")
         WAITMS(100)
      END_IF
   END_CYC
   IF($cap4a < 100)
      LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
      HALT
   END_IF
END_SUB
Так запускай
Code: (clickermann) [Select]
#name "WOF"
#include "cap4a.cms"
wndpos(wndfind("NoxPlayer"), 0, 0)

IF(wndfind("AGClient v1.5")=0)
   execute("AGClient.exe")
   WHILE($hwnd=0)
      $hwnd=wndfind("AGClient v1.5")
      WAITMS(50)
   END_CYC
ELSE
   $hwnd=wndfind("AGClient v1.5")
END_IF
wndpos($hwnd,1000,219)
WAITMS(100)
LCLICK(1122,314)

LOGWRITE ("AGClient hwnd: ",$hwnd)
cap4a()
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 08:44:12 AM
Неправда. А как же это?
Code: (clickermann) [Select]
$cap4a = 100 // после ввода выходим из цикла
Title: Re: Подпрограмма помогите не доходит
Post by: Vint on August 29, 2017, 09:47:02 AM
А так?
Code: (clickermann) [Select]
#name "WOF"
#include "cap4a.cms"

// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280


SUB(cap4a)
    GETSCREEN(450,430, 490,470)
    COLORMODE(6, 450,430, 490,470)
    IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
        FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
            TFCLEAR("out.txt")
            WAITMS(50)
            TFWRITE("out.txt", "0")
            waitms(200)
           
            // последовательное задание координат
            PostMessage($hwnd, 0x555, 1, $x1)
            PostMessage($hwnd, 0x555, 2, $y1)
            PostMessage($hwnd, 0x555, 3, $x2)
            PostMessage($hwnd, 0x555, 4, $y2)
            PostMessage($hwnd, 0x555, 5, 0) // распознать
            waitms(200)
            $response = 0
           
            $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
            WHILE(($response = 0) & ($time_cap4a < $_time_t))
                $response = TFREAD("out.txt", 1)
                WAITMS(500)
            END_CYC
           
            IF($response = 1)
                $str = TFREAD("out.txt", 2)
                LOGWRITE("Распознано. Ответ: ", $str)
                FOR($step=1, $step < 4)
                    $click = STRCUT($str, $step, 1)
                    WAITMS(100)
                    SWITCH($click)
                    CASE(1)
                        LCLICK(350,330)
                    CASE(2)
                        LCLICK(475,330)
                    CASE(3)
                        LCLICK(600,330)
                    CASE(4)
                        LCLICK(350,390)
                    CASE(5)
                        LCLICK(475,390)
                    CASE(6)
                        LCLICK(600,390)
                    CASE(7)
                        LCLICK(350,455)
                    CASE(8)
                        LCLICK(475,455)
                    CASE(9)
                        LCLICK(600,455)
                    END_SWITCH
                END_CYC
                WAITMS(100)
                LCLICK(480,520) // отправить
                WAITMS(300)
                $cap4a = 100 // после ввода выходим из цикла
            END_IF
            IF(($response = 2) | ($response = 0))
                LOGWRITE ("НЕ распознано. Ошибка!")
                WAITMS(500)
                GETSCREEN(450,430, 490,470)
                COLORMODE(6, 450,430, 490,470)
                IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70)
                ELSE
                    $cap4a = 100
                END_IF
            END_IF
        END_CYC
        IF($cap4a < 100)
            LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
            HALT
        END_IF
    END_IF
END_SUB



wndpos( wndfind("NoxPlayer"), 0, 0)

IF( wndfind("AGClient v1.5"))
    WAITMS(100)
ELSE
    execute("AGClient.exe")
    WAITMS(300)
    wndpos( wndfind("AGClient v1.5"), 1000, 219)
    WAITMS(100)
    LCLICK(1122,314)
END_IF

$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
cap4a()

Хотя твоя проблема с
Code: [Select]
22:49:16 AGClient hwnd: 0к этому отношения не имеет. У тебя до подпрограммы проблема, не видит AGClient.

Ты скрипт не переместил? Времени на запуск 300+100 мс хватает?
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 11:48:35 AM
А обязательно добавлять в скрипт область ввода капчи? Если прописать в ини файле аг клиента она что сбрасывается? И еще вопросик как в место switch прописать что бы цифры как с клавы писались?
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 01:10:58 PM
А обязательно добавлять в скрипт область ввода капчи? Если прописать в ини файле аг клиента она что сбрасывается? И еще вопросик как в место switch прописать что бы цифры как с клавы писались?
Этим постом ты хочешь сказать что всё заработало, и у тебя появились новые вопросы?
Ну ладно.
Не обязательно. Но может случиться такое что у тебя появится вторая игрушка с капчей. Ты-ж не хочешь каждый раз лазить в ини файл с целью изменения области? А на последний вопрос отвечать не буду. Читай справку, учи коды клавиш, команды нажатия клавиш. Привык уже что всё здесь сделают вот и не напрягаешься. Всю твою рыбалку полностью написали на этом форуме. Имей совесть.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 03:12:54 PM
Этим постом ты хочешь сказать что всё заработало, и у тебя появились новые вопросы?
Нет, пока не было возможности проверить, на работе. Да и ты заблуждаешся немного. По началу я пришол чисто из за рыбалки, но посидев тут немного меня затянуло.  :) Сейчас у меня больше интерес к скрипту чем к рыбалке, а на рыбалке я практику скрипт. Справка это хорошо, НО там все прямолинейно и понятно написано для тех кто знает хоть какой то язык програмирования. А я вот не знаю ни одного и поэтому мне трудно там с некоторыми вещами разобратся. Да не спорю с многими строками помогли на форуме но есть и такие которые я уже сам сделал)
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 03:44:02 PM
Согласен, в справке не всё прозрачно. Если трудно в справке, пользуйся поиском по сайту. Тут многие вопросы уже обсуждались по несколько раз. Только в старину сильно не копай. Если интересен сам скрипт, то попробуй сам решить проблему с вводом цифр с клавиатуры. Там всё просто. Весь SWITCH можно заменить одной строкой и цифры как с клавы писаться будут.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 04:30:52 PM
Согласен, в справке не всё прозрачно. Если трудно в справке, пользуйся поиском по сайту. Тут многие вопросы уже обсуждались по несколько раз. Только в старину сильно не копай. Если интересен сам скрипт, то попробуй сам решить проблему с вводом цифр с клавиатуры. Там всё просто. Весь SWITCH можно заменить одной строкой и цифры как с клавы писаться будут.
Уверяю тебя, я прежде чем написать сюда, смотрю сперва справку если не понял иду в поиск и только после этого пишу в теме. А про то что я спрашивал вот сам пытался но опять какието не понятки...
В логе пишет правильно Лог: "Распознано. Ответ: 239" а вот нажимает на фоне текстового файла только "39" в файле "out.txt" в первой строке "1" а во второй "239"
Code: (clickermann) [Select]
$response = 1

IF($response = 1)
   $str = TFREAD("out.txt", 2)
   LOGWRITE("Распознано. Ответ: ", $str)
KEYSTRING($str, 50)
END_IF

halt

Добавил задержку вроде пишет что нужно но иногда первую цифру сьедает
Code: (clickermann) [Select]
$response = 1

IF($response = 1)
   $str = TFREAD("out.txt", 2)
   LOGWRITE("Распознано. Ответ: ", $str)
   WAITMS(200)
   KEYSTRING($str, 50)
END_IF

halt
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 04:46:12 PM
Иногда нужно перевести фокус на окно в которое вводим данные. Добавь клик по окну (по текстовому файлу).
Code: (clickermann) [Select]
$response = 1
 
IF($response = 1)
   $str = TFREAD("out.txt", 2)
   LOGWRITE("Распознано. Ответ: ", $str)
   LCLICK(10,10)
   KEYSTRING($str, 50)
END_IF
 
halt
В игре должно и так работать, без клика.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 05:13:26 PM
Иногда нужно перевести фокус на окно в которое вводим данные. Добавь клик по окну (по текстовому файлу).
Вот видиш, работает, а вить в справке про такие тонкости, не написано.  :)
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 05:21:35 PM
Вот видишь, только это и подсказал. Остальное ты сам решил.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 05:25:58 PM
Code: (clickermann) [Select]
    IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF
Это условие будет верным только если это- IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) неверным.
Ща проверим. Вставляй в инклюд, запускай, смотри лог.
Ну по твоим словам, выходит что, как раз в этом и проблема. Изначально вить,окна с капчей нет, соотвтственно:
Code: (clickermann) [Select]
IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70)
// Равно "0"
// Срабатывает условие
    IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF
// Кликер останавливается, как раз то, что и происходит

Вот лог:
Code: [Select]
18:34:41 AGClient hwnd: 656174
18:34:41 Капча нифига не нашлась!!!
18:34:41 Капча нифига не нашлась!!!
18:34:41 Капча нифига не нашлась!!!
18:34:41 Всё пропало, шеф! Ничего не получилось.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 05:48:41 PM
А так?
Code: (clickermann) [Select]
#name "WOF"
#include "cap4a.cms"

// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280


SUB(cap4a)
    GETSCREEN(450,430, 490,470)
    COLORMODE(6, 450,430, 490,470)
    IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
        FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
            TFCLEAR("out.txt")
            WAITMS(50)
            TFWRITE("out.txt", "0")
            waitms(200)
           
            // последовательное задание координат
            PostMessage($hwnd, 0x555, 1, $x1)
            PostMessage($hwnd, 0x555, 2, $y1)
            PostMessage($hwnd, 0x555, 3, $x2)
            PostMessage($hwnd, 0x555, 4, $y2)
            PostMessage($hwnd, 0x555, 5, 0) // распознать
            waitms(200)
            $response = 0
           
            $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
            WHILE(($response = 0) & ($time_cap4a < $_time_t))
                $response = TFREAD("out.txt", 1)
                WAITMS(500)
            END_CYC
           
            IF($response = 1)
                $str = TFREAD("out.txt", 2)
                LOGWRITE("Распознано. Ответ: ", $str)
                FOR($step=1, $step < 4)
                    $click = STRCUT($str, $step, 1)
                    WAITMS(100)
                    SWITCH($click)
                    CASE(1)
                        LCLICK(350,330)
                    CASE(2)
                        LCLICK(475,330)
                    CASE(3)
                        LCLICK(600,330)
                    CASE(4)
                        LCLICK(350,390)
                    CASE(5)
                        LCLICK(475,390)
                    CASE(6)
                        LCLICK(600,390)
                    CASE(7)
                        LCLICK(350,455)
                    CASE(8)
                        LCLICK(475,455)
                    CASE(9)
                        LCLICK(600,455)
                    END_SWITCH
                END_CYC
                WAITMS(100)
                LCLICK(480,520) // отправить
                WAITMS(300)
                $cap4a = 100 // после ввода выходим из цикла
            END_IF
            IF(($response = 2) | ($response = 0))
                LOGWRITE ("НЕ распознано. Ошибка!")
                WAITMS(500)
                GETSCREEN(450,430, 490,470)
                COLORMODE(6, 450,430, 490,470)
                IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70)
                ELSE
                    $cap4a = 100
                END_IF
            END_IF
        END_CYC
        IF($cap4a < 100)
            LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
            HALT
        END_IF
    END_IF
END_SUB



wndpos( wndfind("NoxPlayer"), 0, 0)

IF( wndfind("AGClient v1.5"))
    WAITMS(100)
ELSE
    execute("AGClient.exe")
    WAITMS(300)
    wndpos( wndfind("AGClient v1.5"), 1000, 219)
    WAITMS(100)
    LCLICK(1122,314)
END_IF

$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
cap4a()
А вот так заработало, во всяком случае, кликер не останавливается сразу. Надо щас имитировать, зависание капчи и посмотреть, что сделает кликер. Спасиб за помощь пойду переваривать.
Title: Re: Подпрограмма помогите не доходит
Post by: Vint on August 29, 2017, 05:53:01 PM
Вот видиш, работает, а вить в справке про такие тонкости, не написано.  :)
А каким боком здесь справка? Так устроена Windows. Ты же перед вводом руками переводишь фокус на поле ввода и если нужно ещё и окно активируешь.
Такие общеWINдовые вопросы и не должны быть в справке кликермэна.
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 05:56:16 PM
Изначально вить,окна с капчей нет
А вот это мы только сейчас узнаём. Очевидные для тебя вещи для нас неизвестны. Чем больше информации ты дашь в вопросе, тем короче будет тема. Vint в своём примере, я уверен, просто догадался.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 06:00:29 PM
Вот видиш, работает, а вить в справке про такие тонкости, не написано.  :)
А каким боком здесь справка? Так устроена Windows. Ты же перед вводом руками переводишь фокус на поле ввода и если нужно ещё и окно активируешь.
Такие общеWINдовые вопросы и не должны быть в справке кликермэна.
Привет. :) Я проверял так, перевел мышь в окно блокнота, кликнул по нему и и горячими клавишами alt+A запустил не вводилась первая цифра. А с кликом в скрипте работает. А такие тонкости не написаны в справке, это приходит с помощью знатоков и практикой!)
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 06:05:43 PM
Изначально вить,окна с капчей нет
А вот это мы только сейчас узнаём. Очевидные для тебя вещи для нас неизвестны. Чем больше информации ты дашь в вопросе, тем короче будет тема. Vint в своём примере, я уверен, просто догадался.
Ну извини, я не думал что, очевидные вещи тоже нужно писать. Капча вить не все время висит, она появляется раз в 30-40 мин очевидно вить что цикл должен проходить мимо если нет капчи, сработать только при ее наличии и остановить кликер при зависании.
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 06:09:16 PM
Мы ниразу не видели полного скрипта. В какое место вставлены куски тоже не очевидные вещи. Возможно капча это вход в игру например, и появляется вначале.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 06:49:00 PM
Мы ниразу не видели полного скрипта. В какое место вставлены куски тоже не очевидные вещи. Возможно капча это вход в игру например, и появляется вначале.
Тоже нет логики, зашел в игру разгадал капчу и стоп скрипт. Ладно не будем дуть тему. Вы реально помогаете, и за это вам большое спасибо!!!
 Но проблема не решилась, вот появилась капча отправлен запрос и стоп кликер(
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 08:22:20 PM
Иногда нужно перевести фокус на окно в которое вводим данные. Добавь клик по окну (по текстовому файлу).
Вот видиш, работает, а вить в справке про такие тонкости, не написано.  :)
это секрет Полишанеля, все знают что клавиатурный ввод работает только в активное окно и не удивляются этому когда  сами печатают на клавиатуре, а когда набор ввод делает скрипт то почему-то это забывается напрочь и должно постоянно описываться дополнительно.
Уже писал выше, скрипт запускал в активном окне блокнота с мигаюшим внутри курсором, горячими клавишами alt+A  но все равно не работало.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 08:44:39 PM
Заменяю SWITCH на KEYSTRING получается какая та фигня...

SWITCH это работает нор. Тоесть если есть капча разгадывает ее, если нет проходит мимо.
[spoiler]
Code: (clickermann) [Select]
sub(cap4a)
   GETSCREEN(450,430, 490,470)
   COLORMODE(6, 450,430, 490,470)
   IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
      $cap4a = 1
      WHILE($cap4a = 1) // цикл распознавания капчи
         // Область снимка капчи
         $x1 = 285
         $y1 = 160
         $x2 = 675
         $y2 = 280
 
         WAIT(1)
         $hwnd = wndFind("AGClient v1.5") // находим окно
         LOGWRITE ("AGClient hwnd: ", $hwnd)
 
         TFCLEAR("out.txt")
         WAITMS(50)
         TFWRITE("out.txt", "0")
         waitms(200)
 
         // последовательное задание координат
         PostMessage($hwnd, 0x555, 1, $x1)
         PostMessage($hwnd, 0x555, 2, $y1)
         PostMessage($hwnd, 0x555, 3, $x2)
         PostMessage($hwnd, 0x555, 4, $y2)
         PostMessage($hwnd, 0x555, 5, 0) // распознать
         waitms(200)
         $response = 0
 
         WHILE($response = 0)
            $response = TFREAD("out.txt", 1)
            WAITMS(500)
         END_CYC
 
         IF ($response = 1)
            $str = TFREAD("out.txt", 2)
            LOGWRITE ("Распознано. Ответ: ", $str)
            FOR($step=1,$step<4)
               $click=STRCUT($str,$step,1)
               WAITMS(100)
               SWITCH($click)
               CASE(1)
                  LCLICK(350,330)
               CASE(2)
                  LCLICK(475,330)
               CASE(3)
                  LCLICK(600,330)
               CASE(4)
                  LCLICK(350,390)
               CASE(5)
                  LCLICK(475,390)
               CASE(6)
                  LCLICK(600,390)
               CASE(7)
                  LCLICK(350,455)
               CASE(8)
                  LCLICK(475,455)
               CASE(9)
                  LCLICK(600,455)
               END_SWITCH
            END_CYC
            WAITMS(100)
            LCLICK(480,520) // отправить
            WAITMS(300)
            $cap4a = 0 // после ввода выходим из цикла
         END_IF
         IF ($response = 2)
            LOGWRITE ("НЕ распознано. Ошибка!")
            WAITMS(300)
         END_IF
      END_CYC
   END_IF
end_sub
[/spoiler]
KEYSTRING Тут заменяю свич на кейстринг, идет постояная отправка капчи на сервер, даже когда нет капчи, почему так?
[spoiler]
Code: (clickermann) [Select]
sub(cap4a)
   GETSCREEN(450,430, 490,470)
   COLORMODE(6, 450,430, 490,470)
   IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
      $cap4a = 1
      WHILE($cap4a = 1) // цикл распознавания капчи
         // Область снимка капчи
         $x1 = 285
         $y1 = 160
         $x2 = 675
         $y2 = 280
 
         WAIT(1)
         $hwnd = wndFind("AGClient v1.5") // находим окно
         LOGWRITE ("AGClient hwnd: ", $hwnd)
 
         TFCLEAR("out.txt")
         WAITMS(50)
         TFWRITE("out.txt", "0")
         waitms(200)
 
         // последовательное задание координат
         PostMessage($hwnd, 0x555, 1, $x1)
         PostMessage($hwnd, 0x555, 2, $y1)
         PostMessage($hwnd, 0x555, 3, $x2)
         PostMessage($hwnd, 0x555, 4, $y2)
         PostMessage($hwnd, 0x555, 5, 0) // распознать
         waitms(200)
         $response = 0
 
         WHILE($response = 0)
            $response = TFREAD("out.txt", 1)
            WAITMS(500)
         END_CYC
 
         IF ($response = 1)
            $str = TFREAD("out.txt", 2)
            LOGWRITE ("Распознано. Ответ: ", $str)
            KEYSTRING($str, 60)
            WAITMS(200)
            LCLICK(480,520) // отправить
            WAITMS(500)
            $cap4a = 0 // после ввода выходим из цикла
         END_IF
         IF ($response = 2)
            LOGWRITE ("НЕ распознано. Ошибка!")
            WAITMS(300)
         END_IF
      END_CYC
   END_IF
end_sub
[/spoiler]
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 08:54:49 PM
Кажется я в скрипте Vint`a ошибку нашел. Испытай.
Code: (clickermann) [Select]
#name "WOF"
#include "cap4a.cms"
 
// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280
 
 
SUB(cap4a)
    GETSCREEN(450,430, 490,470)
    COLORMODE(6, 450,430, 490,470)
    IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
        FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
            TFCLEAR("out.txt")
            WAITMS(50)
            TFWRITE("out.txt", "0")
            waitms(200)
 
            // последовательное задание координат
            PostMessage($hwnd, 0x555, 1, $x1)
            PostMessage($hwnd, 0x555, 2, $y1)
            PostMessage($hwnd, 0x555, 3, $x2)
            PostMessage($hwnd, 0x555, 4, $y2)
            PostMessage($hwnd, 0x555, 5, 0) // распознать
            waitms(200)
            $response = 0
 
            $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
            WHILE(($response = 0) & ($time_cap4a > $_time_t))
                $response = TFREAD("out.txt", 1)
                WAITMS(500)
            END_CYC
 
            IF($response = 1)
                $str = TFREAD("out.txt", 2)
                LOGWRITE("Распознано. Ответ: ", $str)
                FOR($step=1, $step < 4)
                    $click = STRCUT($str, $step, 1)
                    WAITMS(100)
                    SWITCH($click)
                    CASE(1)
                        LCLICK(350,330)
                    CASE(2)
                        LCLICK(475,330)
                    CASE(3)
                        LCLICK(600,330)
                    CASE(4)
                        LCLICK(350,390)
                    CASE(5)
                        LCLICK(475,390)
                    CASE(6)
                        LCLICK(600,390)
                    CASE(7)
                        LCLICK(350,455)
                    CASE(8)
                        LCLICK(475,455)
                    CASE(9)
                        LCLICK(600,455)
                    END_SWITCH
                END_CYC
                WAITMS(100)
                LCLICK(480,520) // отправить
                WAITMS(300)
                $cap4a = 100 // после ввода выходим из цикла
            END_IF
            IF(($response = 2) | ($response = 0))
                LOGWRITE ("НЕ распознано. Ошибка!")
                WAITMS(500)
                GETSCREEN(450,430, 490,470)
                COLORMODE(6, 450,430, 490,470)
                IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70)
                ELSE
                    $cap4a = 100
                END_IF
            END_IF
        END_CYC
        IF($cap4a < 100)
            LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
            HALT
        END_IF
    END_IF
END_SUB
 
 
 
wndpos( wndfind("NoxPlayer"), 0, 0)
 
IF( wndfind("AGClient v1.5"))
    WAITMS(100)
ELSE
    execute("AGClient.exe")
    WAITMS(300)
    wndpos( wndfind("AGClient v1.5"), 1000, 219)
    WAITMS(100)
    LCLICK(1122,314)
END_IF
 
$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
cap4a()
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 09:14:10 PM
Ребят извините но я немного запутался, может я не правильно вставляю скрипт? Да и он как то побольше стал. Что в инклюд вставить а что в основной скрипт? Или все в основной скрипт? Кстати я тут еще почитал и понял что мне подпрограмма не нужна, распознавалку можно просто в инклюд засунуть и поставить вызов в начале скрипта.
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 09:17:50 PM
В инклюд вставь область снимка капчи и тело подпрограммы SUB(cap4a)..........END_SUB.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 09:38:38 PM
Походу РАБОТАЕТ Ураааа  ;D ;D ;D Осталось проверить если капча зависнет, остановится скрипт или нет. А где ошибка была?
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 29, 2017, 09:45:11 PM
Проверь сначала. Потом кричи. :D В 31 строке вместо $time_cap4a > $_time_t было $time_cap4a < $_time_t.
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 29, 2017, 11:21:22 PM
Облом, все работает но при зависании скрипт не останавливается. И еще он не в цикле крутится а по всему скрипту.
Title: Re: Подпрограмма помогите не доходит
Post by: open_78 on August 30, 2017, 09:24:23 AM
Если этот не заработает - я умываю руки.
Code: (clickermann) [Select]
// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280
 
 
SUB(cap4a)
   GETSCREEN(450,430, 490,470)
   COLORMODE(6, 450,430, 490,470)
   IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
      FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
         TFCLEAR("out.txt")
         WAITMS(50)
         TFWRITE("out.txt", "0")
         waitms(200)
 
         // последовательное задание координат
         PostMessage($hwnd, 0x555, 1, $x1)
         PostMessage($hwnd, 0x555, 2, $y1)
         PostMessage($hwnd, 0x555, 3, $x2)
         PostMessage($hwnd, 0x555, 4, $y2)
         PostMessage($hwnd, 0x555, 5, 0) // распознать
         waitms(200)
 
         $response = 0         
         $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
         WHILE(($response = 0) | ($time_cap4a > $_time_t))
            $response = TFREAD("out.txt", 1)
            WAITMS(500)
         END_CYC
 
         IF($response = 1)
            $str = TFREAD("out.txt", 2)
            LOGWRITE("Распознано. Ответ: ", $str)
            KEYSTRING($str, 50)
            WAITMS(100)
            LCLICK(480,520) // отправить
            WAITMS(500)
            GETSCREEN(450,430, 490,470)
            COLORMODE(6, 450,430, 490,470)
            IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70)
               LOGWRITE ("Распознано не верно. Ошибка!")
            ELSE
               $cap4a = 100
            END_IF
         ELSE
            LOGWRITE ("НЕ распознано. Ошибка капчи!")
            WAITMS(500)
         END_IF
      END_CYC
      IF($cap4a < 100)
         LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
         HALT
      END_IF
   END_IF
END_SUB
Title: Re: Подпрограмма помогите не доходит
Post by: Ramzesia on August 30, 2017, 10:49:28 AM
Теперь точно Урааа :)
Code: (clickermann) [Select]
LOGWRITE ("Всё отлично, шеф! Все получилось.")Огромное спасибо:)!
Title: Re: Подпрограмма помогите не доходит
Post by: Vint on August 30, 2017, 06:23:56 PM
Я проверял так, перевел мышь в окно блокнота, кликнул по нему и и горячими клавишами alt+A запустил не вводилась первая цифра. А с кликом в скрипте работает. А такие тонкости не написаны в справке, это приходит с помощью знатоков и практикой!)

Давай я тебя удивлю.
Выключи кликер совсем и проделай то же самое руками:
Курсор в поле ввода блокнота.
Нажми и отпусти Alt
Введи 123.

Введётся "23"

Спрашивается при чём здесь кликер?

Нажатием Alt ты перешёл в меню окна блокнота. Выделился пункт и подчеркнулись буквы в словах. Винда ждёт ввода символа для выбора пункта меню.
Если нажать один из подчёркнутых символов, откроется соответствующий пункт меню.
Если нажатого символа нет среди подчёркнутых - фокус с меню пропадает и возвращается на окно ввода.

Или переводи фокус после запуска кликом по полю ввода, для снятия Alt. Либо... переназначь хоткеи кликера нет, без либо, запуск может быть и с кнопки "пуск" кликера, тогда фокус вообще на кликере.