Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: K7A4 on November 27, 2014, 09:20:53 PM
-
Решил создать подобную тему.
Похожей не нашел.
Первый вопрос:
а нельзя передать в процедуру в качестве параметра массив (точнее фактически ссылку на него)?
Т.е. указать при вызове имя массива, а в процедуре уже использовать его как массив.
Или можно как-то иначе?
Заранее благодарю.
-
не, ссылочные типы данных отсутствуют, может позже.
если очень хочется, можешь через функции записи, чтения массива из файла попробовать, там тоже довольно быстро. в качестве параметра соотв. имя файла
-
Johnny, спасибо зо ответ. Очень приятно. )
Интересно, что заполнять массив и предполагалось из ini-файла.
Но процедуру надо бы вызывать несколько раз в секунду (ожидание появления одной из картинок, со списком имен их файлов как раз в массиве) и каждый раз грузить ini - не айс ((
Сорри, почитал про TFReadArr, померил скорость (1000 загрузок - менее 3 секунд) - не критично. Подходит.
Еще раз спасибо! )
-
Это прямо такая универсальная функция которую ты будешь подключать к разным скриптам? Если нет, то зачем такие сложности? Вообще не передавай массив, просто используй глобальный.
А вот если универсальная, где массивы могут быть разные, тогда только через файл. Или каждому свою подпрограмму.
-
Универсальная - не универсальная, к разным - не разным, но фактически еще только начав писать бота уже трижды ищу разные наборы картинок.
А ведь еще эта функция впишет в пределы экрана (усечет) область поиска и округлит значения ее координат. Удобно.
Ей же можно задать максимальное время ожидания - и она вернет в $_Return3 или 0 (если так ничего и не появилось) или номер найденой картинки (а в $_Return1 и $_Return2 - ее координаты).
А вообще, возможно, подобную функцию стоило бы реализовать "системно" в кликере.
Мне то приходится использовать в цикле If_Picture_In(), каждый раз перебирая весь буфер (пока не попадется очередной образец), а можно было бы за один проход сразу искать все картинки - какая раньше встретится. Но это уже в идеи. )
-
...
Мне то приходится использовать в цикле If_Picture_In(), каждый раз перебирая весь буфер (пока не попадется очередной образец), а можно было бы за один проход сразу искать все картинки - какая раньше встретится. Но это уже в идеи. )
А с чего ты взял, что так будет быстрее? Я думаю от ситуации будет зависеть. Когда и быстрее, но чаще медленней.
Может там изменения незначительные и достаточно будtт colormode+% ?
Хотя нередки случаи где действительно нужен перебор. Я тоже часто пользуюсь различными вариантами подпрограмм тоже с флагом найденности, даже не для перебора, а обычного поиска, но создавать для этого отдельную смысла нет.
//=== поиск картинки с ожиданием 10 сек. ======================================
SUB(FIND_PIC, $stcoord_X,$stcoord_Y,$encoord_X,$encoord_Y,$name_image,$percent,$colorm)
// Пример вызова:
//FIND_PIC(0,0,$_xmax,$_ymax,"pic.bmp",90,6)
//$stcoord_X,$stcoord_Y,$encoord_X,$encoord_Y // область поиска
//$name_image = "islands.bmp" // имя картинки
//$percent = 100 // процент совпадения
//$colorm = 0 // режим колормода
$pic_find = 0
IF($mmov = 0)
MOVE(0,$_ymax) //паркуемся
WAITMS(20)
END_IF
$time_notfound = $_time_t+10 // 10 сек
WHILE(($pic_find = 0) & ($time_notfound > $_time_t))
GETSCREEN
IF($colorm ! 0)
COLORMODE($colorm, $stcoord_X,$stcoord_Y,$encoord_X,$encoord_Y)
END_IF
IF_PICTURE_IN ($stcoord_X,$stcoord_Y,$encoord_X,$encoord_Y,STRCONCAT("textures\",$name_image),-1,$percent)
$pic_find = 1
IF($log=1)
LOGWRITE ("Найдена картинка ",$name_image," в X/Y ",$_return1," / ",$_return2)
END_IF
ELSE
WAITMS(50)
END_IF
END_CYC
END_SUB
//==============================================================================
Ещё вариант передавать не массив, а индексы-диапазон индексов. Но лучше упорядочить картинки дав им буквенно-числовые имена в нужном порядке, тогда перебор вообще легко осуществим без массивов.
-
Могли бы вы написать коды и псевдонимы данных клавиш на клаве:
1. Стрелки (Вверх, вниз, влево, вправо).
2. И enter.
Заранее благодрарю)
-
Подскажите, пожалуйста, как правильнее все в скрипте закрыть окно (например - с браузером)?
Причем в идеале с результатом - закрыто или нет (зависло, пока еще не закрыто и т.д.)
Вижу варианты:
1. Кликнуть на крестик в правом верхнем углу. Но разве что ждать пропадания этого крестика.
2. Выдать в окно ALT+F4. Но как проверять - вообще не понятно.
3. Может быть можно как-то через SENDMESSAGE, POSTMESSAGE? Но как? И как узнать закрылось или нет?
Заранее спасибо.
-
Чтобы наверняка, процесс можно убить
EXECUTE("TASKKILL","/F /IM firefox.exe")
Но так закроет все открытые окна firefox.exe
ключи разные можно использовать
/F Принудительное завершение процесса
/PID <процесс> Идентификатор процесса, который требуется завершить.
/IM <образ> Имя образа процесса, который требуется завершить. Для указания всех процессов можно использовать символ шаблона '*'.
/T Завершение указанного процесса и всех его дочерних процессов.
-
Подскажите, пожалуйста, как правильнее все в скрипте закрыть окно (например - с браузером)?
Причем в идеале с результатом - закрыто или нет (зависло, пока еще не закрыто и т.д.)
Вижу варианты:
1. Кликнуть на крестик в правом верхнем углу. Но разве что ждать пропадания этого крестика.
2. Выдать в окно ALT+F4. Но как проверять - вообще не понятно.
3. Может быть можно как-то через SENDMESSAGE, POSTMESSAGE? Но как? И как узнать закрылось или нет?
Заранее спасибо.
Вот пример, Проверяет есть ли окно по заголовку и посылает ему команду закрыть, через SENDMESSAGE.
$zag = "Блокнот"
WHILE((WNDFIND($zag,0) > 0))
SENDMESSAGE(WNDFIND($zag,0),0x0010,0,0)
WAITMS(300)
END_CYC
HALT
-
Вот пример, Проверяет есть ли окно по заголовку и посылает ему команду закрыть, через SENDMESSAGE.
$zag = "Блокнот"
WHILE((WNDFIND($zag,0) > 0))
SENDMESSAGE(WNDFIND($zag,0),0x0010,0,0)
WAITMS(300)
END_CYC
HALT
Так если не закроется - зациклится пока не устраним причину.
Нужно писать ещё обработку что делать...
Например файл был изменён и потребует сохранения. Нужно ответить или мышью или клавой (клик или Enter)
Тогда уж все способы хороши и ALT+F4 и SENDMESSAGE. Если просто проверить потом закрылось или нет.