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

Основной раздел => Общие вопросы => Topic started by: K7A4 on November 27, 2014, 09:20:53 PM

Title: Вопросы новичка
Post by: K7A4 on November 27, 2014, 09:20:53 PM
Решил создать подобную тему.
Похожей не нашел.

Первый вопрос:
а нельзя передать в процедуру в качестве параметра массив (точнее фактически ссылку на него)?
Т.е. указать при вызове имя массива, а в процедуре уже использовать его как массив.
Или можно как-то иначе?

Заранее благодарю.
Title: Re: Вопросы новичка
Post by: Johnny on November 27, 2014, 09:29:49 PM
не, ссылочные типы данных отсутствуют, может позже.
если очень хочется, можешь через функции записи, чтения массива из файла попробовать, там тоже довольно быстро. в качестве параметра соотв. имя файла
Title: Re: Вопросы новичка
Post by: K7A4 on November 27, 2014, 09:57:16 PM
Johnny, спасибо зо ответ. Очень приятно. )

Интересно, что заполнять массив и предполагалось из ini-файла.
Но процедуру надо бы вызывать несколько раз в секунду (ожидание появления одной из картинок, со списком имен их файлов как раз в массиве) и каждый раз грузить ini - не айс ((

Сорри, почитал про TFReadArr, померил скорость (1000 загрузок - менее 3 секунд) - не критично. Подходит.
Еще раз спасибо! )
Title: Re: Вопросы новичка
Post by: Vint on November 27, 2014, 11:09:51 PM
Это прямо такая универсальная функция которую ты будешь подключать к разным скриптам? Если нет, то зачем такие сложности? Вообще не передавай массив, просто используй глобальный.
А вот если универсальная, где массивы могут быть разные, тогда только через файл. Или каждому свою подпрограмму.
Title: Re: Вопросы новичка
Post by: K7A4 on November 27, 2014, 11:30:03 PM
Универсальная - не универсальная, к разным - не разным, но фактически еще только начав писать бота уже трижды ищу разные наборы картинок.
А ведь еще эта функция впишет в пределы экрана (усечет) область поиска и округлит значения ее координат. Удобно.
Ей же можно задать максимальное время ожидания - и она вернет в $_Return3 или 0 (если так ничего и не появилось) или номер найденой картинки (а в $_Return1 и $_Return2 - ее координаты).

А вообще, возможно, подобную функцию стоило бы реализовать "системно" в кликере.
Мне то приходится использовать в цикле If_Picture_In(), каждый раз перебирая весь буфер (пока не попадется очередной образец), а можно было бы за один проход сразу искать все картинки - какая раньше встретится. Но это уже в идеи. )
Title: Re: Вопросы новичка
Post by: Vint on November 28, 2014, 09:00:44 AM
...
Мне то приходится использовать в цикле If_Picture_In(), каждый раз перебирая весь буфер (пока не попадется очередной образец), а можно было бы за один проход сразу искать все картинки - какая раньше встретится. Но это уже в идеи. )
А с чего ты взял, что так будет быстрее? Я думаю от ситуации будет зависеть. Когда и быстрее, но чаще медленней.
Может там изменения незначительные и достаточно будtт colormode+%  ?
Хотя нередки случаи где действительно нужен перебор. Я тоже часто пользуюсь различными вариантами подпрограмм тоже с флагом найденности, даже не для перебора, а обычного поиска, но создавать для этого отдельную смысла нет.
Code: (clickermann) [Select]
//===  поиск картинки с ожиданием 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

//==============================================================================

Ещё вариант передавать не массив, а индексы-диапазон индексов. Но лучше упорядочить картинки дав им буквенно-числовые имена в нужном порядке, тогда перебор вообще легко осуществим без массивов.
Title: Re: Вопросы новичка
Post by: MoonLight on December 31, 2014, 06:42:05 PM
Могли бы вы написать коды и псевдонимы данных клавиш на клаве:
1. Стрелки (Вверх, вниз, влево, вправо).
2. И enter.
Заранее благодрарю)
Title: Re: Вопросы новичка
Post by: K7A4 on March 13, 2015, 03:26:35 PM
Подскажите, пожалуйста, как правильнее все в скрипте закрыть окно (например - с браузером)?
Причем в идеале с результатом - закрыто или нет (зависло, пока еще не закрыто и т.д.)

Вижу варианты:
1. Кликнуть на крестик в правом верхнем углу. Но разве что ждать пропадания этого крестика.
2. Выдать в окно ALT+F4. Но как проверять - вообще не понятно.
3. Может быть можно как-то через SENDMESSAGE, POSTMESSAGE? Но как? И как узнать закрылось или нет?

Заранее спасибо.
Title: Re: Вопросы новичка
Post by: Vint on March 13, 2015, 04:07:34 PM
Чтобы наверняка, процесс можно убить
Code: (clickermann) [Select]
EXECUTE("TASKKILL","/F /IM firefox.exe")
Но так закроет все открытые окна firefox.exe

ключи разные можно использовать
Code: [Select]

 /F                             Принудительное завершение процесса
 /PID <процесс>       Идентификатор процесса, который требуется завершить.
 /IM  <образ>           Имя образа процесса, который требуется завершить. Для указания всех процессов можно использовать символ шаблона '*'.
 /T                             Завершение указанного процесса и всех его дочерних процессов.



Title: Re: Вопросы новичка
Post by: Oraven on March 13, 2015, 04:18:58 PM
Подскажите, пожалуйста, как правильнее все в скрипте закрыть окно (например - с браузером)?
Причем в идеале с результатом - закрыто или нет (зависло, пока еще не закрыто и т.д.)

Вижу варианты:
1. Кликнуть на крестик в правом верхнем углу. Но разве что ждать пропадания этого крестика.
2. Выдать в окно ALT+F4. Но как проверять - вообще не понятно.
3. Может быть можно как-то через SENDMESSAGE, POSTMESSAGE? Но как? И как узнать закрылось или нет?

Заранее спасибо.

Вот пример, Проверяет есть ли окно по заголовку и посылает ему команду закрыть, через SENDMESSAGE.

Code: (clickermann) [Select]
$zag = "Блокнот"
WHILE((WNDFIND($zag,0) > 0))
   SENDMESSAGE(WNDFIND($zag,0),0x0010,0,0)
   WAITMS(300)
END_CYC

HALT
Title: Re: Вопросы новичка
Post by: Vint on March 13, 2015, 04:23:18 PM
Вот пример, Проверяет есть ли окно по заголовку и посылает ему команду закрыть, через SENDMESSAGE.

Code: (clickermann) [Select]
$zag = "Блокнот"
WHILE((WNDFIND($zag,0) > 0))
   SENDMESSAGE(WNDFIND($zag,0),0x0010,0,0)
   WAITMS(300)
END_CYC

HALT

Так если не закроется - зациклится пока не устраним причину.
Нужно писать ещё обработку что делать...

Например файл был изменён и потребует сохранения. Нужно ответить или мышью или клавой (клик или Enter)

Тогда уж все способы хороши и ALT+F4 и SENDMESSAGE. Если просто проверить потом закрылось или нет.