Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Ramzesia on August 24, 2017, 11:34:44 AM
-
Помогите разобраться, что то не могу вникнуть. Данная подпрограмма не работает.
proga.cms
SUB(Pod_proga)
LOGWRITE ("Подпрограмма")
END_SUB
GOSUB(Pod_proga)
main.cms
#include "proga.cms"
GOSUB(Pod_proga)
HALT
А вообще мне нужно вот это вывести в отдельный файл, что бы вызывалось после нахождения картинки капчи.
[spoiler]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]
-
Ты где "GOSUB" нарыл? Это антиквариат. С версии v4.9 подпрограммы вызываются по имени.
В справку опять не заглядываешь?
-
Ты где "GOSUB" нарыл? Это антиквариат. С версии v4.9 подпрограммы вызываются по имени.
В справку опять не заглядываешь?
Нарыл тут http://crapware.aidf.org/forum/index.php?topic=33.msg708#msg708
В справке не разобрался(
-
А дата? Там же 2012 год.
В этом проблема поиска решения в закромах форума или VK (и ютубы туда же) - устаревание информации. Нужно всегда смотреть на дату и сопоставлять версии программы.
Как можно не разобраться в справке? До сих пор не открывается?
-
А дата? Там же 2012 год.
В этом проблема поиска решения в закромах форума или VK (и ютубы туда же) - устаревание информации. Нужно всегда смотреть на дату и сопоставлять версии программы.
Как можно не разобраться в справке? До сих пор не открывается?
Ну то что нет свежих постов я не виноват.
Справка открывается и даже нашел раздел с "основные конструкции" SUB (подпрограммы) даже прочел все 3 раза, либо я тупой либо справка не понятно написана. В справке нет примера с инклюде, я не программист, программный язык для меня как космос.
// Тело подпрограммы
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
Так правильно?
-
Почти.
#include "cap4a.cms" не нужно писать внутри условия. Пиши в начале скрипта.
С #include всё просто, как табуретка. Перед запуском скрипта, скрипт пробегается как текстовый файл. Все найденные #include заменяются в этом же месте где он стоит кодом из указанного файла.
Сделай файл БЕЗ #include, потом то, что хочешь вынести в отдельный файл туда убирай и на этом месте пиши #include. Не можешь это сделать мысленно - сделай на яву.
Сейчас в твоём коде если содержимое из "cap4a.cms" (подпрограмму) вставить туда, где оно появится, то выйдет:
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
Ты так и будешь дальше ничего не понимать, пока будешь учить синтаксис не из справки, а по чужим постам на форуме. Там люди решают свои проблемы. И никто не будет писать "новые посты" переписывая туда инфу из справки, это мартышкин труд (для нерускоязычных - это фразеологизм такой).
-
Vint
Спасибо большое. Теперь стало понятно, оказалось действительно все очень легко и просто :)
-
Ребят помогите в подпрограмму добавить, проверку ушла ли капча, если нет то повторить распознавание 3 раза, если все равно капча не ушла то остановить скрипт. А то случается так, что капча зависает и происходит безостановочное распознавание.
[spoiler]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]
-
Что означает проверка "ушла ли капча". Ушла на распознавание в AGC? Или AGC вернул распознавание удачно?
Или "ушла" в смысле принята твоей программой?
-
Вот если пришёл ответ "не распознана" или в течении 60 секунд ответа нет - отправляем заново. И так 3 раза.
Если 3 раза неудача - HALT
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
-
Что означает проверка "ушла ли капча".
Нужно проверить ушло ли окно капчи если окно капчи не уходит нужно остановить кликер. Потому как бывает капча зависает или окошко с цифрами не появилось, то происходит постоянное распознавание а мне надо что бы 3-5 раз проверил если окошко не ушло то скрипт полностью остановился
Вот если эта картинка зависла по каким то причинам не уходит то нужно полностью остановить кликер
GETSCREEN(450,430, 490,470)
COLORMODE(6, 450,430, 490,470)
IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
-
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
-
Сори за назойливость, просто хочу понять как это работает.
Почему это ты вынес за пределы подпрограммы? И куда его вписать в основной скрипт? Оно вить не сработает если оставить так, это подключаемый файл.
WAIT(1)
$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280
Если я не ошибаюсь это проверит наличие капчи "картинка окна" 2 раза
FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
И вот это не понятно, насколько моего воображения хватило, мне кажется что все остановится при первом неудачном распознавании.
IF($cap4a < 100)
LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
HALT
END_IF
-
Почему это ты вынес за пределы подпрограммы? И куда его вписать в основной скрипт? Оно вить не сработает если оставить так, это подключаемый файл.
Можешь вписать в основной или оставить так. Сработает полюбому.
Если я не ошибаюсь это проверит наличие капчи "картинка окна" 2 раза
Ошибаешься. Первая проверка=0, вторая=1, третья=2. Цикл повторяется пока переменная меньше 3.
И вот это не понятно, насколько моего воображения хватило, мне кажется что все остановится при первом неудачном распознавании.
Так как это условие вынесено за пределы цикла, проверка будет выполнена только после его завершения.
-
Ок спасибо за помощь и разъяснения. Пойду пробовать.
-
Не работает, сразу остановка скрипта. Вот лог:
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось.
-
Не работает, сразу остановка скрипта. Вот лог:
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось.
С запущеным AGClient`ом такой результат? Или забыл про него?
-
С запущеным AGClient`ом такой результат? Или забыл про него?
С запущенным AGClient`ом. Он у меня сам запускается вот строки в основном скрипте:
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()
-
Где находится строчка
#include "cap4a.cms"
-
Где находится строчка #include "cap4a.cms"
В начале скрипта.
#name "WOF"
#include "cap4a.cms"
wndpos( wndfind("NoxPlayer"), 0, 0)
-
Вот это
$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
вырежи из "cap4a.cms" и вставь в основной скрипт после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
-
Не работает, сразу остановка скрипта. Вот лог:
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 .
-
Не работает, сразу остановка скрипта. Вот лог:
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
-
Директива #include "cap4a.cms" просто заменяет собой весь код который находится в файле cap4a.cms. Это то-же самое если написать весь код из подключаемого файла в основном. Никакого волшебства тут нет. Сделано для удобства. Надо это понимать при использовании. И форум чаще и больше читать.
-
Типа так?
Основной скрипт
#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]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]
-
Типа так?
БИНГО-О-О-О!!!
А Clickermann видит это так:#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()
-
Типа так?
БИНГО-О-О-О!!!
Та же шляпа
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось
До того как винт добавил цикл фор все работало но не было остановки скрипта если капча зависла. Мне кажется проблема кроется где то тут:
WAIT(1)
$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280
FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
IF($cap4a < 100)
LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
HALT
END_IF
-
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось
Ты это скопировал из прошлого поста(время то-же)? >:( Ключевая строчка эта: AGClient hwnd: 0 Значит программа не видит окно AGClient`а.
-
Как работает инклюд я уже понял Винт норм объяснил, вот только проблема в другом.
Вот то что у меня было и работает норм. Просто сюда нужно добавить цикл что бы после того как капча зависла через 5 попыток скрипт остановился.
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
-
22:49:16 AGClient hwnd: 0
22:49:20 Всё пропало, шеф! Ничего не получилось
Ты это скопировал из прошлого поста(время то-же)? >:( Ключевая строчка эта: AGClient hwnd: 0 Значит программа не видит окно AGClient`а.
Да скопировал просто не стал в лог лезть.
-
Да скопировал просто не стал в лог лезть.
Дык может там другие цифры? При отладке скрипта из лога вылазить нельзя, а он лезть не стал... Может картинку не видит.
-
Картинку находит 100% ни разу не было сбоя!
AGClient тоже находит.
Проблема в том что скрипт сразу останавливается, а это значит что прога работает потому как HALT стоит только тут
IF($cap4a < 100)
LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
HALT
END_IF
-
Это условие будет верным только если это- IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) неверным.
Ща проверим. Вставляй в инклюд, запускай, смотри лог.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
Так запускай#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()
-
Неправда. А как же это?
$cap4a = 100 // после ввода выходим из цикла
-
А так?
#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()
Хотя твоя проблема с
22:49:16 AGClient hwnd: 0
к этому отношения не имеет. У тебя до подпрограммы проблема, не видит AGClient.
Ты скрипт не переместил? Времени на запуск 300+100 мс хватает?
-
А обязательно добавлять в скрипт область ввода капчи? Если прописать в ини файле аг клиента она что сбрасывается? И еще вопросик как в место switch прописать что бы цифры как с клавы писались?
-
А обязательно добавлять в скрипт область ввода капчи? Если прописать в ини файле аг клиента она что сбрасывается? И еще вопросик как в место switch прописать что бы цифры как с клавы писались?
Этим постом ты хочешь сказать что всё заработало, и у тебя появились новые вопросы?
Ну ладно.
Не обязательно. Но может случиться такое что у тебя появится вторая игрушка с капчей. Ты-ж не хочешь каждый раз лазить в ини файл с целью изменения области? А на последний вопрос отвечать не буду. Читай справку, учи коды клавиш, команды нажатия клавиш. Привык уже что всё здесь сделают вот и не напрягаешься. Всю твою рыбалку полностью написали на этом форуме. Имей совесть.
-
Этим постом ты хочешь сказать что всё заработало, и у тебя появились новые вопросы?
Нет, пока не было возможности проверить, на работе. Да и ты заблуждаешся немного. По началу я пришол чисто из за рыбалки, но посидев тут немного меня затянуло. :) Сейчас у меня больше интерес к скрипту чем к рыбалке, а на рыбалке я практику скрипт. Справка это хорошо, НО там все прямолинейно и понятно написано для тех кто знает хоть какой то язык програмирования. А я вот не знаю ни одного и поэтому мне трудно там с некоторыми вещами разобратся. Да не спорю с многими строками помогли на форуме но есть и такие которые я уже сам сделал)
-
Согласен, в справке не всё прозрачно. Если трудно в справке, пользуйся поиском по сайту. Тут многие вопросы уже обсуждались по несколько раз. Только в старину сильно не копай. Если интересен сам скрипт, то попробуй сам решить проблему с вводом цифр с клавиатуры. Там всё просто. Весь SWITCH можно заменить одной строкой и цифры как с клавы писаться будут.
-
Согласен, в справке не всё прозрачно. Если трудно в справке, пользуйся поиском по сайту. Тут многие вопросы уже обсуждались по несколько раз. Только в старину сильно не копай. Если интересен сам скрипт, то попробуй сам решить проблему с вводом цифр с клавиатуры. Там всё просто. Весь SWITCH можно заменить одной строкой и цифры как с клавы писаться будут.
Уверяю тебя, я прежде чем написать сюда, смотрю сперва справку если не понял иду в поиск и только после этого пишу в теме. А про то что я спрашивал вот сам пытался но опять какието не понятки...
В логе пишет правильно Лог: "Распознано. Ответ: 239" а вот нажимает на фоне текстового файла только "39" в файле "out.txt" в первой строке "1" а во второй "239"
$response = 1
IF($response = 1)
$str = TFREAD("out.txt", 2)
LOGWRITE("Распознано. Ответ: ", $str)
KEYSTRING($str, 50)
END_IF
halt
Добавил задержку вроде пишет что нужно но иногда первую цифру сьедает
$response = 1
IF($response = 1)
$str = TFREAD("out.txt", 2)
LOGWRITE("Распознано. Ответ: ", $str)
WAITMS(200)
KEYSTRING($str, 50)
END_IF
halt
-
Иногда нужно перевести фокус на окно в которое вводим данные. Добавь клик по окну (по текстовому файлу).
$response = 1
IF($response = 1)
$str = TFREAD("out.txt", 2)
LOGWRITE("Распознано. Ответ: ", $str)
LCLICK(10,10)
KEYSTRING($str, 50)
END_IF
halt
В игре должно и так работать, без клика.
-
Иногда нужно перевести фокус на окно в которое вводим данные. Добавь клик по окну (по текстовому файлу).
Вот видиш, работает, а вить в справке про такие тонкости, не написано. :)
-
Вот видишь, только это и подсказал. Остальное ты сам решил.
-
IF($cap4a < 100)
LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
HALT
END_IF
Это условие будет верным только если это- IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) неверным.
Ща проверим. Вставляй в инклюд, запускай, смотри лог.
Ну по твоим словам, выходит что, как раз в этом и проблема. Изначально вить,окна с капчей нет, соотвтственно:
IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70)
// Равно "0"
// Срабатывает условие
IF($cap4a < 100)
LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
HALT
END_IF
// Кликер останавливается, как раз то, что и происходит
Вот лог:
18:34:41 AGClient hwnd: 656174
18:34:41 Капча нифига не нашлась!!!
18:34:41 Капча нифига не нашлась!!!
18:34:41 Капча нифига не нашлась!!!
18:34:41 Всё пропало, шеф! Ничего не получилось.
-
А так?
#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()
А вот так заработало, во всяком случае, кликер не останавливается сразу. Надо щас имитировать, зависание капчи и посмотреть, что сделает кликер. Спасиб за помощь пойду переваривать.
-
Вот видиш, работает, а вить в справке про такие тонкости, не написано. :)
А каким боком здесь справка? Так устроена Windows. Ты же перед вводом руками переводишь фокус на поле ввода и если нужно ещё и окно активируешь.
Такие общеWINдовые вопросы и не должны быть в справке кликермэна.
-
Изначально вить,окна с капчей нет
А вот это мы только сейчас узнаём. Очевидные для тебя вещи для нас неизвестны. Чем больше информации ты дашь в вопросе, тем короче будет тема. Vint в своём примере, я уверен, просто догадался.
-
Вот видиш, работает, а вить в справке про такие тонкости, не написано. :)
А каким боком здесь справка? Так устроена Windows. Ты же перед вводом руками переводишь фокус на поле ввода и если нужно ещё и окно активируешь.
Такие общеWINдовые вопросы и не должны быть в справке кликермэна.
Привет. :) Я проверял так, перевел мышь в окно блокнота, кликнул по нему и и горячими клавишами alt+A запустил не вводилась первая цифра. А с кликом в скрипте работает. А такие тонкости не написаны в справке, это приходит с помощью знатоков и практикой!)
-
Изначально вить,окна с капчей нет
А вот это мы только сейчас узнаём. Очевидные для тебя вещи для нас неизвестны. Чем больше информации ты дашь в вопросе, тем короче будет тема. Vint в своём примере, я уверен, просто догадался.
Ну извини, я не думал что, очевидные вещи тоже нужно писать. Капча вить не все время висит, она появляется раз в 30-40 мин очевидно вить что цикл должен проходить мимо если нет капчи, сработать только при ее наличии и остановить кликер при зависании.
-
Мы ниразу не видели полного скрипта. В какое место вставлены куски тоже не очевидные вещи. Возможно капча это вход в игру например, и появляется вначале.
-
Мы ниразу не видели полного скрипта. В какое место вставлены куски тоже не очевидные вещи. Возможно капча это вход в игру например, и появляется вначале.
Тоже нет логики, зашел в игру разгадал капчу и стоп скрипт. Ладно не будем дуть тему. Вы реально помогаете, и за это вам большое спасибо!!!
Но проблема не решилась, вот появилась капча отправлен запрос и стоп кликер(
-
Иногда нужно перевести фокус на окно в которое вводим данные. Добавь клик по окну (по текстовому файлу).
Вот видиш, работает, а вить в справке про такие тонкости, не написано. :)
это секрет Полишанеля, все знают что клавиатурный ввод работает только в активное окно и не удивляются этому когда сами печатают на клавиатуре, а когда набор ввод делает скрипт то почему-то это забывается напрочь и должно постоянно описываться дополнительно.
Уже писал выше, скрипт запускал в активном окне блокнота с мигаюшим внутри курсором, горячими клавишами alt+A но все равно не работало.
-
Заменяю SWITCH на KEYSTRING получается какая та фигня...
SWITCH это работает нор. Тоесть если есть капча разгадывает ее, если нет проходит мимо.
[spoiler]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]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]
-
Кажется я в скрипте Vint`a ошибку нашел. Испытай.
#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()
-
Ребят извините но я немного запутался, может я не правильно вставляю скрипт? Да и он как то побольше стал. Что в инклюд вставить а что в основной скрипт? Или все в основной скрипт? Кстати я тут еще почитал и понял что мне подпрограмма не нужна, распознавалку можно просто в инклюд засунуть и поставить вызов в начале скрипта.
-
В инклюд вставь область снимка капчи и тело подпрограммы SUB(cap4a)..........END_SUB.
-
Походу РАБОТАЕТ Ураааа ;D ;D ;D Осталось проверить если капча зависнет, остановится скрипт или нет. А где ошибка была?
-
Проверь сначала. Потом кричи. :D В 31 строке вместо $time_cap4a > $_time_t было $time_cap4a < $_time_t.
-
Облом, все работает но при зависании скрипт не останавливается. И еще он не в цикле крутится а по всему скрипту.
-
Если этот не заработает - я умываю руки.
// Область снимка капчи
$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
-
Теперь точно Урааа :)
LOGWRITE ("Всё отлично, шеф! Все получилось.")
Огромное спасибо:)!
-
Я проверял так, перевел мышь в окно блокнота, кликнул по нему и и горячими клавишами alt+A запустил не вводилась первая цифра. А с кликом в скрипте работает. А такие тонкости не написаны в справке, это приходит с помощью знатоков и практикой!)
Давай я тебя удивлю.
Выключи кликер совсем и проделай то же самое руками:
Курсор в поле ввода блокнота.
Нажми и отпусти Alt
Введи 123.
Введётся "23"
Спрашивается при чём здесь кликер?
Нажатием Alt ты перешёл в меню окна блокнота. Выделился пункт и подчеркнулись буквы в словах. Винда ждёт ввода символа для выбора пункта меню.
Если нажать один из подчёркнутых символов, откроется соответствующий пункт меню.
Если нажатого символа нет среди подчёркнутых - фокус с меню пропадает и возвращается на окно ввода.
Или переводи фокус после запуска кликом по полю ввода, для снятия Alt. Либо... переназначь хоткеи кликера нет, без либо, запуск может быть и с кнопки "пуск" кликера, тогда фокус вообще на кликере.