Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - ezfalcon

Pages: [1] 2
1
Что за программа? Твой секрет для тех, кто может здесь помочь носит лишь технический интерес, т.к. он не является оригинальной идеей, а скорее всего извратом, который можно наверняка рационально упростить. Помочь без поставновки задачи сложно.

Кликерманн может работать с окнами через хэндлы. Узнай HWND окна и работай с ним.

Для программ нет разницы работают они под виртуалкой или под "реальной" осью.

2
Различные менеджеры удаленного раб. стола по разному обрабатывают и передают нажатия спец. кнопок. Перехват сообщений от мыши может монопольно захватываться. Помимо всего прочего такие программы могут рендерить изображение в буфер, отличный от используемого функцией GETSCREEN. Кликерманн скорее всего будет видеть такое окно полностью черным.

Для начала нужно обкатать скрипт на удаленной машине, потом уже пробовать допилить работу через RDP.

3
Использование / Re: Скрипт на Animation cancel
« on: April 02, 2015, 05:22:00 PM »
И я всё не могу разобраться с этими координатами, ф ф не прожимаестся но вот сели  поставить так IF_PIXEL_IN (0, 0, $_xmax, $_ymax, 4613013) то всё начинает работать.
Поиск картинки у тебя долгий, потому что область поиска весь экран. Поиск картинки 5х5 для малой области будет работать быстрее, чем поиск твоего пикселя на всем экране. А поиск пикселя в области еще быстрее.

Если заклинание появляется всегда в том месте, как у тебя на скриншоте, то на глаз ограничь хотя бы область поиска так:
Code: (clickermann) [Select]
IF_PIXEL_IN (INT($_xmax / 2), INT($_ymax / 2), INT($_xmax * 3 / 4), INT($_ymax * 3 / 4), 4613013)скорость поиска увеличится в 16 раз примерно.

На твоем скриншоте разрешение 1280х1024. Для этого разрешения область поиска:
Code: (clickermann) [Select]
IF_PIXEL_IN (INT($_xmax / 2) + 105, INT($_ymax / 2) + 25, INT($_xmax / 2) + 160, INT($_ymax / 2) + 80, 4613013)

4
Использование / Re: Скрипт на Animation cancel
« on: April 01, 2015, 11:16:36 PM »
Сделай скриншот без потери качества. Вырежи середину из картинки Удар Неба примерно 5x5px, сохрани в <удар_неба.bmp>.

Code: (clickermann) [Select]
// координаты окна с игрой, если весь экран, то
$gamex1 = 0
$gamey1 = 0
$gamex2 = $_xmax
$gamey2 = $_ymax

// координаты центра экрана
$midx = INT(($gamex2 - $gamex1) / 2)
$midy = INT(($gameу2 - $gamey1) / 2)

// координаты области поиска картинки, нужно замерить на скриншоте от центра скриншота смещения
// ниже, на глаз значения:
$dx1 = $midx + 103
$dy1 = $midy + 31
$dx2 = $midx + 157
$dy2 = $midy + 88

// значения задержек между кликами и нажатиями подбирай на практике, 100мс может быть слишком много

WHILE (1 = 1) // зацикливаем код
IF(iskeydown(#Q) = 1)
LCLICK(-1,-1)
waitms(100)
KEYPRESS(#2)
waitms(100)
LCLICK(-1,-1)
waitms(100)
GETSCREEN
IF_PICTURE_IN ($dx1, $dy1, $dx2, $dy2, "удар_неба.bmp", -1, 100)
KEYPRESS(#F)
waitms(100)
KEYPRESS(#F)
waitms(100)
END_IF
// подобрать задержку такую, чтобы не срабатывало несколько раз на одно нажатие кнопки <Q>
waitms(1000)
END_IF
waitms(50) // разгрузка
END_CYC

HALT // для красоты

Под спойлером разметка области поиска. В редакторе найди середину картинки. Замерь расстояния до области поиска.
Если все будет работать, то область поиска можно уменьшить, чтобы улучшить скорость нахождения.
[spoiler=найти координаты области поиска][/spoiler]

Можно заменить IF_PICTURE_IN ($dx1, $dy1, $dx2, $dy2, "удар_неба.bmp", -1, 100) на IF_PIXEL_IN($dx1, $dy1, $dx2, $dy2, COLORGEN(red, green, blue)). Вместо red, green, blue - подставь значения цветов для искомого пикселя. Область поиска можно еще уменьшить. Выбери один из этих, например:
[spoiler=пиксели][/spoiler]

GETSCREEN также можно применять не ко всему экрану, а к небольшой области, в которой находится твоя область поиска.

5
кликер на удаленной машине или локально работает?


6
Исходя из описания, примерно следующее:
Если найден контрольный пиксель, то искать пиксели заданных цветов и на каждом кликать и нажимать кнопки. Выше писал пример решения. Только там нужно сохранить полученные в первом условии координаты и засунуть во вложенные условия вместо $_return1, $_return2.

Более четко опиши задачу, скрин прикрепи или ссылку на игру дай.

                 Так кликает :

getscreen
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,7891634)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6839199)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6311826)
lclick($_return1,$_return2)
end_if
end_if


Тебе Oraven написал вариант.

Условие if_pixel_in(247,94,961,475,5967631) - нужно один раз тебе. Вложенные условия засовуй в него все вместе последовательно, ведь тебе нужно для каждого пикселя отдельно кликнуть. После lclick($_return1,$_return2) добавь, как тебе подсказали не раз :):
Code: (clickermann) [Select]
      KEYPRESS(#D) // нажимаем D
      WAITMS(500)
      KEYPRESS(#S) // нажимаем S
      WAITMS(500)

7
А если так:
Есть например такой алгоритм действий:
[spoiler]getscreen
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,7891634)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6839199)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6311826)
lclick($_return1,$_return2)
end_if
end_if[/spoiler]

Можно ли сделать так чтобы [spoiler] при обнаружении определённого цвета в зоне видимости нажатие на мышку по этому цвету происходило один раз и после этого нажималась кнопка D и S. Чтобы эти кнопки нажимались только если произошло нажатие мышки. И можно ли проверяемые цвета как-то в одно условие засунуть, чтобы не было куча if, я пробовал через запятую не получилось. Правда нужно чтобы не на один какой-то цвет из нескольких сработало нажитие мыши, а на все что найдутся в радиусе видимости. Спасибо [/spoiler]

В одном условии обработать все пиксели в зоне не получится. Если правильно понял задачу, то например можно сделать так:

Code: (clickermann) [Select]
getscreen

sub (clk_and_key, $__X, $__y) // процедура делает клик, затем нажатие D и нажатие S
lclick($__X, $__y)
waitms(30) // пауза после клика (подобрать нужное значение)
keypress(#D)
waitms(30) // пауза после нажатия кнопки (подобрать нужное значение)
keypress(#S)
waitms(30) // пауза после нажатия кнопки (подобрать нужное значение)
end_sub

$exit = 0 // признак завершения работы

while ($exit ! 1)
if_pixel_in(247, 94, 961, 475, 5967631) // если найден контрольный пиксель, то ищем все пиксели нужных цветов, щелкаем их и нажимаем кнопки
if_pixel_in($_return1-120, $_return2-120, $_return1+120, $_return2+120, 7891634) // если есть пиксель1
clk_and_key($_return1, $_return2)
end_if
if_pixel_in($_return1-120, $_return2-120, $_return1+120, $_return2+120, 6839199) // если есть пиксель2
clk_and_key($_return1, $_return2)
end_if
if_pixel_in($_return1-120, $_return2-120, $_return1+120, $_return2+120, 6311826) // если есть пиксель3
clk_and_key($_return1, $_return2)
end_if
end_if

waitms(50) // разгрузка процессора/пауза между проходами
end_cyc

halt

Или же создать массив с цветами и прогонять его в цикле.

Если в задаче есть пиксели с одинаковыми цветами, то можно сделать тюнинг: для массива цветов в цикле вызывать scanpxl и тут же обрабатывать массив полученных координат.

P.S. В коде есть ошибка, нужно сохранить $_return1, $return2. Смотри ниже у Oraven.

8
В чем прикол писать на С++ и Delphi, если можно писать на языке ассемблера, экономя память и несколько выигрывая в скорости, а главное контролируя каждый бит кода ;)
не могу представить для чего может понадобится чистый ассемблер,  бодяга ассемблера с делфи или с++ не считается)
Если нужен малый оверхед программы, жесткое ограничение аппаратных средств, патчи (кряки, анлокеры, расширители функционала для чужих программ).

Любое более-менее стандартное winapi ориентированное приложение пишется на ASM-е так же, как и на с или делфи.
Code: [Select]
;-----------------------------------------------------
; Функция замены подстроки в строке
;-----------------------------------------------------
; lpSrc - указатель на исходную строку
; lpDst - указатель на буфер для полученной строки
; lpPattern - указатель на заменяемую подстроку
; lpReplace - указатель на строку для замены
; dNum - количество замен (0 - заменить все)
;-----------------------------------------------------
proc    _replace lpSrc:DWORD, lpPattern:DWORD, lpReplace:DWORD,\
                 lpDst:DWORD, dNum:DWORD

        pusha

        ; Указатель на буфер-приемник
        mov     edx,[lpDst]

        ; Счетчик замен
        xor     ebx,ebx

        ; Исходная строка не пустая?
        mov     ecx,[lpSrc]
        cmp     byte [ecx],0
        jz      .loc_ret

        ; Заменяемая строка не пустая?
        mov     eax,[lpPattern]
        cmp     byte [eax],0
        jz      .loc_copy_all

.loc_scan:
        mov     esi,ecx
        mov     edi,[lpPattern]

        ; Исходная строка закончилась?
        cmp     byte [esi],0
        je      .loc_end_replace
@@:
        ; Строки совпали с паттерном?
        cmp     byte [edi],0
        je      .loc_move_replace

        ; Символ совпадает с
        lodsb

        ; Заменять все вхождения?
        cmp     [dNum],0
        je      .loc_skip_counter

        ; Уже заменили нужное количество?
        cmp     ebx,[dNum]
        je      .loc_move_one_char
.loc_skip_counter:
        cmp     al,byte [edi]
        jne     .loc_move_one_char

        inc     edi
        jmp     @b

.loc_move_replace:
        ; Увеличить счетчик замен
        inc     ebx

        mov     ecx,esi

        ; Записать заменяющую строку
        mov     esi,[lpReplace]
        mov     edi,edx
@@:
        lodsb
        or      al,al
        jz      .loc_scan
        stosb
        inc     edx
        jmp     @b

.loc_move_one_char:
        ; Скопировать один символ
        mov     al,byte [ecx]
        mov     byte [edx],al
        inc     edx
        inc     ecx
        jmp     .loc_scan

.loc_end_replace:
        ; Записать финальный 0 в строку
        mov     byte [edx],0

        jmp     .loc_ret
.loc_copy_all:
        ; Просто скопировать исходную строку
        mov     esi,[lpSrc]
        mov     edi,[lpDst]
@@:
        lodsb
        stosb
        or      al,al
        jnz     @b
.loc_ret:
        popa
        ret
endp

;---------------------------------------------


Языки высокого уровня дают разработчику абстракции в виде массивов, объединений, списков, структур, объектов, коллекций, векторов, шаблонов, прототипов, виртуальные и перегружаемые функции и многое-многое.

Есть также фреймворки, которые вносят свои абстракции поверх существующих, например jQuery. Писать на том же CoffeCup быстрее и удобнее, чем на чистом JS. Разрабатывать игры в Unity практичнее, чем пилить самому движок и геймплей.

Точно также язык кликермана предоставляет свои абстракции для анализа экрана и и управления клавиатурой и мышкой.

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

Кликерман в большинстве ситуаций выигрывает в затратах на разработку бота.

9
Директивы #include обрабатываются препроцессором. У тебя код из файла aukcion.cms вставляется в то место, где указана директива. Никакого запуска aukcion.cms не происходит. Внимательно прочитай справку еще раз.

Предлагаю оформить код в файле aukcion.cms в виде процедуры:
Code: (clickermann) [Select]
sub(aukcion)
// содержимое aukcion.cms
end_sub

Соответственно твой код преобразуется примерно так:
Code: (clickermann) [Select]
#include "aukcion.cms"

print ( $_time_m )

$exit = 0

while ($exit ! 1)
IF (($_time_m > 16) & ($_time_m < 24))
LCLICK(90, 40)
aukcion() // запускаем код из aukcion.cms
END_IF
        WAITMS(100)
end_cyc

halt

Дополнение. Так и задумывалось, что скрипт должен выполняться между 17 до 23 мин включительно? С задержкой в 100мс будет порядка (23-17+1)*10*60 = 4200 запусков aukcion() в час. Если нужен один запуск, то в условие нужно либо добавить проверку флага однократного запуска, либо после запуска aukcion() вставить задержку на 7мин<=DELAY<60мин

[spoiler=флаг однократного запуска]
Code: (clickermann) [Select]
#include "aukcion.cms"
 
print ( $_time_m )
 
$exit = 0
$run = 0
 
while ($exit ! 1)
IF (($_time_m > 16) & ($_time_m < 24))
                IF ($run ! 1)
    LCLICK(90, 40)
    aukcion() // запускаем код из aukcion.cms
                    $run = 1
                END_IF
        ELSE
                $run = 0
END_IF
        WAITMS(100)
end_cyc
 
halt
[/spoiler]

[spoiler=задержка после запуска аукциона]
Code: (clickermann) [Select]
#include "aukcion.cms"
 
print ( $_time_m )
 
$exit = 0
 
while ($exit ! 1)
IF (($_time_m > 16) & ($_time_m < 24))
    LCLICK(90, 40)
    aukcion() // запускаем код из aukcion.cms
            WAIT(7*60)
END_IF
        WAITMS(100)
end_cyc
 
halt
[/spoiler]

10
в чем прикол писать скрипты для кликкермана когда можно также написать программу например на том же делфи или с++ с ипользованием winapi
из-за абстракции. Скриптеру не нужно отвлекаться на множество специфических для языка программирования сущностей.

Ты можешь, разумеется, имплементировать в кроссплатформенную библиотеку для нескольких языков программирования анализ экрана и устройств ввода. Это будет хорошее подспорье для остальных.

Собственно, разработчик кликермана реализовал все в одном флаконе IDE+инструмент.

В чем прикол писать на С++ и Delphi, если можно писать на языке ассемблера, экономя память и несколько выигрывая в скорости, а главное контролируя каждый бит кода ;)

11
Единственно е еще было бы круто привязать это к окну браузера мозила что бы я мог его свернуть и заниматся другими делами. hwnd то я знаю а вот куда его.....
P.S. Блин. надо задонатить.

Ты же не Робинзон Крузо, зачем велосипеды изобретать. Есть множество решений для автоматизации работы браузеров, предназначенных специально для анализа веб-страниц и перехода по ссылкам, например PhantomJS.

Clickermann - универсальный инструмент. В ситуациях, когда нет тривиального решения задачи автоматизации он приходит на помощь. Ты же не пользуешься для готовки обеда дома универсальным складным ножом для путешествий.

12
Общие вопросы / Re: DLL файлы кликермана
« on: March 17, 2015, 02:17:16 PM »
Странный вопрос. Думаю, декомпиляция тебе ничего не даст, т.к., если бы ты раньше что-то декомпилировал, то не спрашивал бы декомпилятор для DLL файла кликера.

Если хочется поковыряться, воспользуйся IDA (interactive disassembler): https://www.hex-rays.com/products/ida/
[spoiler=IDA Pro][/spoiler]

У него уже имеются пресеты многих API для С, Delphi и т.д. Но тебе придется немного подучить ассемблер. Рекомендую книгу:
[spoiler=Крис Касперски: Искусство дизассемблирования][/spoiler]
Один из интересных блогов по кодокопанию: http://www.manhunter.ru/assembler/

А лучше всего: четко сформулировать то, что тебе нужно от кликера и создать тему на форуме.

13
Если необходимо автоматизировать работу в браузере, не связанную с Flash, то продуктивнее будет воспользоваться, например
.
Браузер не будет отображаться, ввод логинов, паролей, клики, переходы по ссылкам, анализ гипертекста и т.п. действия реализуются просто.

Если необходима автоматизация с Flash, тогда читай соответствующий раздел на этом форуме для начинающих.

14
Да, есть такой косяк со сворачиванием окна редактора: по аналогии с MDI (multi document interface) окно сворачивается в нижний левый угол родительского окна.

Видимо окно редактора создано, как дочернее по отношение к окну кликера, а так как окно кликера скрывается, когда открывается редактор, то возможно, что, не найдя контекст устройства окна, GDI (graphic device interface) считает, что "рабочая область" родительского окна весь экран.

Такова философия оберток для WinAPI касательно MDI. Такие же "бонусы" есть и в MFC (microsoft foundation classes).

Чтобы избавиться от казусов, связанных с дочерними и родительскими окнами в MDI, для окна редактора необходимо создать свой поток, свое окно свою процедуру обработки событий. Либо пойти другим путем: при переходе в режим редактора и обратно перестраивать интерфейс текущего окна. Оба способа тривиальны. Просто многие пользуются шаблонами IDE (integrated development environment) и базовыми классами языка, которые разрабатывались для общих штатных ситуаций  :)


15
Предложения / Re: команда UNDEFINE
« on: March 17, 2015, 12:39:14 PM »
Добавлю по теме

Есть пара проблем:
1) все переменные глобальные, где бы они не объявлялись.

2) утечка памяти. Вызов undefine, arrpop и любые другие операции, похоже, порождают мертвые куски выделенной памяти.

[spoiler=утечка памяти]
Code: (clickermann) [Select]
#name "Memory leak unit"

logshow(1)
LOGCLEAR

#define COUNT:1000000

sub (prnRes, $test, $count, $t)
   print($test, "(", $count") passed in: ", $t, " sec, (", int($count / $t), " op/sec)")
end_sub

sub (testDefUndef, $count)
   $t = $_ms
   for ($i = 0, $i < $count)
      define($var)
      undefine($var)
   end_cyc
   $t = ($_ms - $t) / 1000
   prnRes("testDefUndef", $count, $t)
end_sub

sub (testPushPop, $count)
   define($var)
   $t = $_ms
   for ($i = 0, $i < $count)
      arrpush($var, $i)
      arrpop($var)
   end_cyc
   undefine($var)
   $t = ($_ms - $t) / 1000
   prnRes("testPushPop", $count, $t)
end_sub

sub (testAssign, $count)
   $t = $_ms
   for ($i = 0, $i < $count)
      $var = "something"
   end_cyc
   $t = ($_ms - $t) / 1000
   prnRes("testAssign", $count, $t)
end_sub

sub (prnScr, $title)
   GETSCREEN
   screenshot($title)
end_sub

prnScr("memleak")

testDefUndef(COUNT)
prnScr("memleak")

testPushPop(COUNT)
prnScr("memleak")

testAssign(COUNT)
prnScr("memleak")

halt








[/spoiler]

Pages: [1] 2