Author Topic: Подпрограмма помогите не доходит  (Read 13588 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #45 on: August 29, 2017, 05:53:01 PM »
Вот видиш, работает, а вить в справке про такие тонкости, не написано.  :)
А каким боком здесь справка? Так устроена Windows. Ты же перед вводом руками переводишь фокус на поле ввода и если нужно ещё и окно активируешь.
Такие общеWINдовые вопросы и не должны быть в справке кликермэна.


open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #46 on: August 29, 2017, 05:56:16 PM »
Изначально вить,окна с капчей нет
А вот это мы только сейчас узнаём. Очевидные для тебя вещи для нас неизвестны. Чем больше информации ты дашь в вопросе, тем короче будет тема. Vint в своём примере, я уверен, просто догадался.
« Last Edit: August 29, 2017, 05:58:25 PM by open_78 »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #47 on: August 29, 2017, 06:00:29 PM »
Вот видиш, работает, а вить в справке про такие тонкости, не написано.  :)
А каким боком здесь справка? Так устроена Windows. Ты же перед вводом руками переводишь фокус на поле ввода и если нужно ещё и окно активируешь.
Такие общеWINдовые вопросы и не должны быть в справке кликермэна.
Привет. :) Я проверял так, перевел мышь в окно блокнота, кликнул по нему и и горячими клавишами alt+A запустил не вводилась первая цифра. А с кликом в скрипте работает. А такие тонкости не написаны в справке, это приходит с помощью знатоков и практикой!)

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #48 on: August 29, 2017, 06:05:43 PM »
Изначально вить,окна с капчей нет
А вот это мы только сейчас узнаём. Очевидные для тебя вещи для нас неизвестны. Чем больше информации ты дашь в вопросе, тем короче будет тема. Vint в своём примере, я уверен, просто догадался.
Ну извини, я не думал что, очевидные вещи тоже нужно писать. Капча вить не все время висит, она появляется раз в 30-40 мин очевидно вить что цикл должен проходить мимо если нет капчи, сработать только при ее наличии и остановить кликер при зависании.

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #49 on: August 29, 2017, 06:09:16 PM »
Мы ниразу не видели полного скрипта. В какое место вставлены куски тоже не очевидные вещи. Возможно капча это вход в игру например, и появляется вначале.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #50 on: August 29, 2017, 06:49:00 PM »
Мы ниразу не видели полного скрипта. В какое место вставлены куски тоже не очевидные вещи. Возможно капча это вход в игру например, и появляется вначале.
Тоже нет логики, зашел в игру разгадал капчу и стоп скрипт. Ладно не будем дуть тему. Вы реально помогаете, и за это вам большое спасибо!!!
 Но проблема не решилась, вот появилась капча отправлен запрос и стоп кликер(
« Last Edit: August 29, 2017, 08:51:21 PM by Ramzesia »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #51 on: August 29, 2017, 08:22:20 PM »
Иногда нужно перевести фокус на окно в которое вводим данные. Добавь клик по окну (по текстовому файлу).
Вот видиш, работает, а вить в справке про такие тонкости, не написано.  :)
это секрет Полишанеля, все знают что клавиатурный ввод работает только в активное окно и не удивляются этому когда  сами печатают на клавиатуре, а когда набор ввод делает скрипт то почему-то это забывается напрочь и должно постоянно описываться дополнительно.
Уже писал выше, скрипт запускал в активном окне блокнота с мигаюшим внутри курсором, горячими клавишами alt+A  но все равно не работало.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #52 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]

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #53 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()

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #54 on: August 29, 2017, 09:14:10 PM »
Ребят извините но я немного запутался, может я не правильно вставляю скрипт? Да и он как то побольше стал. Что в инклюд вставить а что в основной скрипт? Или все в основной скрипт? Кстати я тут еще почитал и понял что мне подпрограмма не нужна, распознавалку можно просто в инклюд засунуть и поставить вызов в начале скрипта.
« Last Edit: August 29, 2017, 09:16:16 PM by Ramzesia »

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #55 on: August 29, 2017, 09:17:50 PM »
В инклюд вставь область снимка капчи и тело подпрограммы SUB(cap4a)..........END_SUB.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #56 on: August 29, 2017, 09:38:38 PM »
Походу РАБОТАЕТ Ураааа  ;D ;D ;D Осталось проверить если капча зависнет, остановится скрипт или нет. А где ошибка была?

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #57 on: August 29, 2017, 09:45:11 PM »
Проверь сначала. Потом кричи. :D В 31 строке вместо $time_cap4a > $_time_t было $time_cap4a < $_time_t.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #58 on: August 29, 2017, 11:21:22 PM »
Облом, все работает но при зависании скрипт не останавливается. И еще он не в цикле крутится а по всему скрипту.

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #59 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