Что это

Это программа-кликер, эмулирующая работу пользователя мышкой и клавиатурой, хотя помимо этих простых действий она может еще много чего. Программа использует специальные сценарии (или макросы, скрипты), которые пользователь вводит вручную либо записывает непосредственно во время работы. Что характерно, сценарии полностью открыты для редактирования в любом текстовом редакторе и, конечно же, в специально оптимизированном для этого собственном редакторе кликера.

Программа была создана для автоматизации простых повторяющихся действий пользователя за компьютером. В частности, программа нашла успешное применение в области браузерных многопользовательских игр, в которых зачастую половина игрового времени уходит на однообразные рутинные действия (т.н. задротство), которые только способствуют быстрому надоеданию игры. Более того, подобные программы являются единственным аргументом донату (игровому преимуществу, покупаемогу игроками за живые деньги). Не то чтобы я не ценил труд разработчиков, но в этой стране донат принимает настолько уродливые формы, что порой игра из развлечения превращается в анальное изнасилование. Разумеется, в большинстве игр любые нештатные средства автоматизации игрового процесса запрещены. Поэтому будьте готовы к противостоянию.
Однако неправильно считать, что эта программа лишь чит (жульническая программа) для игр. Программа может использоваться для чего угодно. Я читал отзывы, когда программа помогала в областях, далеких от игр. Например, ей копировались данные из других программ, где такой функционал почему-то не был предоставлен.

Как работать

Как было сказано, программа использует сценарии (наборы команд), согласно которым осуществляются действия.
Получить сценарий можно двумя способами. Первый из них - это написать самому, опираясь на справочные материалы и встроенный редактор. Второй способ - использовать систему записи, которая напишет сценарий сама. Эти два способа имеют преимущества и недостатки. Ручной ввод сценария позволяет создавать более гибкие, нелинейные сценарии, но требует от пользователя определенной теоретической подготовки и наличия логического мышления. Автоматическое формирование сценария избавляет пользователя от ручного ввода, однако оно не так гибко поскольку просто записывает действия за пользователем.
Каким образом работать с программой - дело каждого. Но я бы настоятельно рекомендовал изучить ручной ввод сценария. Это основной режим работы, ради которого и затевалась программа. А запись это так, приятное дополнение, появившееся после.

Язык сценариев

Он несложный, чем-то напоминает PHP (или С++ если хотите), хотя интерпретируется построчно, как BASIC. Если вы владеете азами хотя бы Паскаля, у вас не возникнет трудности с языком сценариев. Он интуитивно понятен.
Справка по языку представляет собой отдельный раздел, рекомендую его внимательно изучить, там с примерами описаны все команды и конструкции для текущей версии.


Главное окно

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

Слева располагаются кнопки управления сценарием. Это "запуск", "запись", "остановить" и "редактор".
Кнопка "Запуск" запускает выполнение текущего сценария. Текущий сценарий - это сценарий, который был загружен из файла, загружен из редактора (через кнопку "Применить") или записан вживую. Если сценарий уже запущен, то повторное нажатие на эту кнопку включает и выключает паузу. После снятия паузы, сценарий запускается с того места, где его остановили.
Кнопка "Запись" предназначена для записи в сценарий действий пользователя. Все действия, которые пользователь сделает после нажатия этой кнопки будут помещены в сценарий.
Кнопка "Остановить" предназначена для прерывания процесса выполнения или записи сценария. Кнопка "Редактор" вызывает редактор сценария.

Для облегчения управления за кнопками закреплена комбинация горячих клавиш, которая работает даже если кликер не является активным приложением. По умолчанию это: Alt+A - запуск / пауза, Alt+S - остановить, Alt+R - запись. Однако они могут быть изменены через окно настроек программы.

Помимо этих кнопок окно содержит информационную панель, отображающую информацию по оконному режиму и панель настроек режима выполнения сценария.


Редактор сценария

1. Кнопки управления файлом скрипта. Новый, открыть, открыть историю, сохранить, сохранить как 2. Вспомогательные кнопки. Включают поиск и замену текста, активируют экранную лупу, применяют автоформатирование кода и прочее 3. Кнопки быстрой вставки готовых кусков кода из существующих шаблонов 4. Кнопки управления скриптом.

Редактор сценария - основной инструмент для создания сценариев. Поскольку все сценарии используют собственный язык программирования, основную часть редактора представляет текстовое поле ввода. В отличие от других (не будет показывать пальцем) программируемых кликеров, здесь редактору - как той части программы, где пользователь будет проводить 80% рабочего времени - было уделено очень много внимания. Поэтому редактор имеет подсветку синтаксиса, функции форматирования кода и быстрой вставки шаблонов, различные вспомогательные инструменты.

Работать с редактором очень просто. Гораздо сложнее разобраться с азами программирования...
Вверху редактора располагается ряд функциональных кнопок. Слева находятся кнопки, вызывающие меню шаблонов кода и быстрой вставки команд в редактор. Шаблоны находятся в директории %Clickermann%/data/lang/ru/templates/ (в место ru может быть другой язык) и вы сами можете править их и создавать новые. Файл иерархического меню вставки команд так же можно править обычным блокнотом, соблюдая формат. Он находится по адресу%Clickermann%/data/lang/ru/qinsert_menu.txt
Ниже находятся кнопки "Применить", "пуск", "стоп" и "лог". Последние три дублируют функции аналогичных кнопок в главном окне, а кнопка "Применить" обновляет рабочий сценарий кликера на тот, что сейчас отображен в редакторе.

Еще ниже отображается информация в реальном времени: текущее положение курсора, а так же цвет пикселя и hwnd элемента под ним. Очень рекомендуется освоить комбинацию Alt + Q (по умолчанию). Она осуществляет быструю вставку в сценарий этих координат и цвета в виде инструкции LCLICK, чтоб не перепечатывать эти числа вручную. Либо копирует текущие координаты в буфер обмена (при включении соотв. режима кнопкой с клипбордом).
В самом низу находится лупа, позволяющая более детально изучить картинку. К тому же лупа отображает экран именно так, как его "видит" кликер, то есть с учетом всех цветокоррекций и прочего. По умолчанию лупа выключена, так как она дополнительно нагружает процессор. Включается она с верхней панели функциональной кнопкой с изображением лупы. Под лупой находятся кнопки (слева на право) увеличения изображения, уменьшения, изменения цвета прицела и переключатель режима цветокоррекции. Стоит заметить, что в момент включения лупы скорость указателя мыши замедляется для более комфортного наведения. Не забудьте перед закрытием программы выключить лупу чтобы восстановить прежнюю скорость.
Существует возможность сделать быстрый скриншот 100х100 той области, которую видит лупа, через комбинацию Alt + G. К скриншоту будет автоматически применена цветокоррекция, и он будет сохранен в формате bmp, что обеспечит удобство использования в скрипте. Остается только обрезать в Paint.

Всю правую часть занимает текстовое поле. Оно ведет себя так же как любое другое, поэтому все комбинации горячих клавиш распространяются и на него (например Ctrl + S, хотя явно это нигде не указано. Помимо этого существует комбинации для оформления отступов (Tab, Shift + Tab).


Менеджер окон

Бестолковая на первый взгляд штука на самом деле предоставляет ряд уникальных возможностей.
Во-первых, это получение параметров окна. Если приложение, с которым работает кликер, не полноэкранное, то нет никаких гарантий что в следующую сессию оно будет в том же самом месте. Однако благодаря менеджеру окон вы легко узнаете параметры любого окна и сможете их восстановить при необходимости.
Во-вторых, менеджер может управлять прозрачностью (альфа-канал) окон. Как вы знаете, прозрачные окна кликер не видит (вместо этого он видит то что под ними), хотя может по ним тыкать. Однако вы можете выставить 100% альфа и тогда ранее прозрачное окно станет полностью видимо и для кликера и для вас.


Привязка к окну

Еще одна феня, введенная по просьбам трудящихся. Являет собой воистину чудесную вещь - возможность одновременно работать и кликеру и пользователю, при этом совершенно не мешая друг другу. Во время этого режима кликер "привязывается" к конкретному окну и посылает ему (и только ему) готовые сообщения, при этом не взаимодействуя с устройствами ввода и не мешая работе пользователя.

Сама суть

Дело в том что понятие "окно" для нас и для Windows обозначают немного разные вещи. В принципе, даже само понятие "окно" немного неверно. Если для нас окно это прямоугольник с крестиком в правом углу, то для системы окно - это элемент типа кнопки, надписи, поля ввода. И в каждом привычном для нас окне, может находиться с десяток дочерних "окон".
Каждое "окно"-элемент имеет свой уникальный номер (HWND), зная который к нему можно обратиться. Все необходимые для работы данные собирает сам кликер. Номер элемента выводится на главную форму, в область "Привязка к окну". Эта область содержит состояние режима, номер захваченного элемента (hWND), ID процесса, которому принадлежит окно и имя exe файла, породившего процесс. Кликер выводит данные для элемента, который находится под курсором мыши, в принципе вам важен только HWND. Помимо этого, существует ряд инструкций, позволяющих получить HWND в процессе выполнения сценарий.

Как работать?

Первое что вам предстоит уяснить, это то, что оконный режим включается только комбинацией горячих клавиш ввиду того, что мышь в этот момент должна указывать на рабочий элемент. Вы находите свою цель курсором (к примеру это флешка в окне браузера, она тоже является "отдельным окном"), включаете оконный режим комбинацией клавиш (Alt+W по умолчанию), происходит захват рабочего элемента. После этого HWND на главной форме меняться уже не будет, он будет отображать рабочий элемент. Так же изменятся координаты, отображаемые в редакторе сценария, поскольку каждое отдельное "окно"-элемент обладает собственной относительной системой координат, где (0,0) находится в левом верхнем углу элемента. Относительная она потому что если передвигать окно по экрану, его "внутренняя" система координат не изменится.
Сам синтаксис сценариев является единым и для обычного режима, и для оконного. Исключая, разумеется, специальных команд для включения оконного режима и смены рабочего элемента из сценария. Единственное уже озвученное изменение - это координаты для курсора мыши с учетом системы координат: абсолютной (весь экран) или относительной (только границы рабочего элемента).
Так же очень важно отметить то, что функции анализа экрана будут корректно работать только в случае наличия рабочего окна на десктопе. Допускается перекрытие рабочего окна другим окном (к примеру Word или даже фильм), но если его свернуть, то функции анализа графики работать не будут, так как Windows не отрисовывает свернутые окна для экономии ресурсов. Выяснить доступен ли анализ экрана очень просто. Достаточно включить захват окна и открыть редактор. Цвет (картинка в лупе) будет меняться даже под другим окном, если все ОК. В противном случае цвет всегда будет черный.

Альтернативное решение

Другой способ запустить кликер, чтоб он при этом не мешал работе - это установка виртуального компьютера. Сейчас много программ, организующих компьютер в компьютере. К примеру MS Virtual PC, VMWare. Вы просто ставите на них ОС, игру и кликер. Запускаете. Все работает. Вы сворачиваете виртуальную машину и она вам не мешает в то время как трудится кликер.
К сожалению такой подход требует достаточно мощной машины, чтоб потянуть две операционки и игру (а то и две). К тому же ряд игр довольно плохо работают на виртуальных машинах, а то и явно отказываются на них работать. Но зато, если все получится, вы безо всяких заморочек и танцев с бубном сможете запустить кликер и при этом спокойно работать дальше.


Цветовосприятие

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

Использование

Что бы понять как кликер видит "мир", существует два способа. Первый - это лупа редактора. При включенной лупе есть возможность "на лету" изменять ее цветовосприятие от 0 до 7 (правая кнопка с цифрой под лупой). При этом, эта настройка никак не влияет на работу скрипта.
Второй же способ непосредственно "боевой". Цветокоррекция применяется единственной процедурой COLORMODE (см справку по языку). При этом существует возможность как применять коррекцию выборочно (причем для каждого участка буфера свою), так и полностью на весь буфер. Следует помнить, что чем больше область для обработки, тем дольше будет думать скрипт в момент выполнения COLORMODE. Поэтому целесообразно подвергать коррекции только те участки буфера, с которыми будет работа.

Наглядно

На последок покажу маленький фрагмент того, что примерно получается при коррекции. Эта картинка знакома всем игрокам Dark Orbit (с которыми у нас исторически сложилась большая и чистая любовь и, собственно, благодаря им и случаю кликер имеет место быть таким какой он есть сейчас). Это потроха, оставшиеся после уничтожения коробля. Их можно собрать. Но сначало их нужно найти на экране. При этом они еще и красиво крутятся. Но мы включаем коррекцию и наш кликер начинает видеть мир примерно так:

COLORMODE(0) | COLORMODE(5) | COLORMODE(6)
5581 цвет | 107 цветов | 29 цветов

Невооруженным глазом видно, что качество картинки с коррекцией хуже чем без коррекции. Однако, количество уникальных цветов (оттенков) на второй и третьей картинках меньше в десятки раз (уникальные цвета нам посчитал Irfan Viewer). И главное: картинка стала более однородной. А следовательно никакая "красивая анимация" теперь нам не помешает легко отыскивать эти потроха по яркому однородному желтому "ядру".


Режим PS/2

В качестве противодействия ряду защитных систем (напр. Frost) был внедрен механизм альтернативной симуляции управления, а именно через низкоуровневые порты PS/2. В отличие от USB, этот довольно старый интерфейс не использует WinAPI (хотя бы по тому что был разработан еще раньше, чем вышла в свет первая версия Windows), поэтому он имеет крайне близкий к железу доступ. Это позволяет посылать сигналы управления в обход защите (хотя она продолжает свою штатную работу).

Данный метод имеет ряд требований. Прежде всего, это наличие PS/2 устройства. Именно устройства, потому что если у вас будет просто пустая "дырка", данный метод не пройдет (не пройдет инициализация устройства в момент загрузки BIOS). Поэтому прежде чем работать (прежде чем включить комп - PS/2 устройства не подключаются "на горячую"), подключите в порт соответствующее устройство. Стоит заметить, что в большинстве ноутбуков их клавиатуры и тачпады так же являются PS/2 устройствами, что нас вполне устраивает. Вы можете воспользоваться переходником USB-to-PS/2 если у вас нет PS/2 клавиатуры, но есть сам порт.

Для доступа к порту Clickermann использует низкоуровневый драйвер, включенный в дистрибутив. Драйвер поддерживает работу в Win7 x64 и устанавливается автоматически при запуске кликера. Поэтому обеспечьте запуск кликера от имени администратора.

Наконец, в сценарии необходимо указать директивы #ps2_mouse и/или #ps2_keyboard для перевода на работу через PS/2 соответственно мыши и/или клавиатуры. При указании этих директив все стандартные функции управления (нажатия, клики) будут посылаться через PS/2 порт. В остальном, структура скрипта не меняется и каких-либо дополнительных действий пользователя не требуется. При режиме PS/2 управление происходит так же, как при обычном режиме, то есть без привязки к конкретному окну.

Например, обычный режим, как и ранее:

keypress(32) // жмак пробел
Для того же чтобы пробел жмакался "через PS/2 клавиатуру" код видоизменяется до:
#ps2_keyboard

keypress(32) // жмак пробел по другому
Аналогично для мышинных команд, режим включиется директивой #ps2_mouse


Плагины

Плагины - это отдельные программные модули, невходящие в состав кликера, но способные с ним взаимодействовать. Они существенно расширяют возможности программы в руках специалиста.
Плагины представляют собой стандартную DLL библиотеку с одной единственной экспортной функцией. В этой библиотеке можно реализовать все, чего вам не хватает в кликере. Единственное, что здесь используется настоящий "серьезный" язык программирования, куда сложнее, чем скриптовый язык кликера. Но если вы - уверенный программист, вы оцените новые, практически неограниченные, возможности.

Техническая реализация (плагин)

Как вы понимаете, среда и язык разработки роли не играют. Все библиотеки приводятся к стандартному виду компилятором. Все что вам необходимо знать - это формат экспортной функции, которую вызывает кликер. Она выглядит так в стандарте С++:

int execute(int* _arr, int _size)

То есть это функция "execute" типа int, принимающая два параметра. Первый параметр представляет собой указатель на массив целых чисел, который передается в плагин. Второй параметр - размер этого массива (количество элементов) - нужен чтоб не выйти за пределы памяти. Данный подход позволяет передать в плагин практически неограниченное количество параметров.

Техническая реализация (кликер)

В кликере вызов плагина реализуется следующим (к примеру) образом:

CALL("plugin.dll", 1, 2, 3)
print("result: ", $_return1)

Инструкции CALL передается любое число целых параметров. Однако, первый параметр - обязательное строковое имя плагина. При этом сам плагин должен находиться в папке проекта, рядом с исполняемым сценарием, либо в подкаталоге. Если он там не обранужтся по заданному имени, инструкция call молча завершается. Стоит учитывать, что пока функция execute в плагине не завершит свою работу, сценарий в кликере дальше не пойдет. После отработки плагина, его функция вернет свое значение в системную переменную $_return1.

Предупреждение

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


FAQ - часто задаваемые вопросы

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

В ряде случаев можете. При использовании т.н. режима привязки к окну (см. соотв. раздел) кликер не использует мышь и клавиатуру, работая даже в неактивном или перекрытом окне, позволяя вам заниматься своими делами. При этом в ряде случаев даже имеется возможность анализировать графику в перекрытых (но не свернутых) окнах.
Однако, есть определенные сложности в данной настройке, далеко не все приложения позволяют проворачивать такие штуки. Работоспособность данного режима зависит от конечного приложения.

Не работают клики / нажатия клавиатуры или работают только на рабочем столе

  • В случае с играми (особенно НЕ браузерными) может мешаться защита (GameGuard, Frost, ...). О противодействии этому часто пишут на читерских форумах (например zhyk.ru, на allcheats не ходите, тамошние петушки пишут все под хайдом, который открыть новичку очень проблематично, учитывая аутизм местных модераторов). В качестве первого средства: читайте про режим PS/2.
  • В случае если вы пытаетесь использовать привязку к окну (оконный режим), могут возникнуть различные специфические проблемы, зависимые сугубо от реализации программы ("в Firefox работает, в Google Chrome нет"). Откажитесь от него в пользу обычного режима, если это приемлемо.

    Игра вылетает при запуске кликера

    Попробуйте спрятать кликер различными способами: переименовыванием окна и exe файла, применением специальных программ защиты, виртуализацией и т.п. Ищите информацию на эту тему на профильных ресурсах.

    Проблема с экранными функциями

  • Игра использует очень хитрый рендер (отрисовку). Оверлеи и "слоеные" (прозрачные) окна не захватываются, и вряд ли будут. Кстати, по поводу прозрачных окон. С этим вам поможет менеджер окон, так как он может управлять прозрачностью. Если выставить прозрачность (читать "видимость") на 100%, то флаг использования слоев с окна снимается и кликер начинает видеть окно.
  • Еще один интересный момент может случиться в крутых играх. Может возникнуть проблема с составлением скрипта если в игре используется свой графический курсор. Редактор просто все время видит пиксель одного цвета (цвета графического курсора). Решить проблему можно отключив графический курсор в настройках игры (если такое можно). Либо перед анализом угонять курсор в дальний угол, делать скриншот и работать уже с ним.
  • Прежде чем вопить "в редакторе работает, а так нет!!1", прочтите руководство и поставьте наконец GETSCREEN (очень частая ошибка у новичков)

    Поддерживает ли програма несколько мониторов

    Программа поддерживает расширенный рабочий стол (несколько мониторов) как в плане анализа экрана, так и в плане кликов, не зависимо положительные координаты указаны или отрицательные.

    Как сделать автозапуск сценария?

    В сценарий нужно добавить директиву #autorun. Далее, сделать через меню настроек ассоциацию файлов *.cms с кликером. С этого момента файлы *.cms будут сразу открываться кликером, подобно тому как файлы *.txt открываются блокнотом. Запустится кликер и начнет выполнение заданного сценария.
    Автозапуск не распространяется на открытие сценария "с формы" даже при наличии дерективы.

    Проблема с горячими клавишами

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

    Я записал сценарий, но он огромный и состоит из одних move. Очень неудобно править

    Снимите галочку "записывать движения мыши" в настройках перед записью.

    Программа выказывает сетевую активность при запуске

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

    У меня ругается антивирус

    Антивирусу (как правило, малоизвестному, непопулярному) может не понравится возможность отслеживания мыши, клавиатуры и еще черт знает что. Добавьте его в исключения антивируса и проблема должна пропасть. В Clickermann нет вирусов. Эта программа старее большинства антивирусов из списка virustotal. Если вы не готовы принять этот догмат - просто воздержитесь от использования программы. Не надо писать "Там вирус!".

    Как я могу помочь проекту?

    Во-первых деньгами. Если программа бесплатна это не значит что автору не нужны деньги. Реквизиты на офф сайте и в "О программе". Больше сумма пожертвований, я более радостно делаю новую версию (устраняя косяки старой).
    Во-вторых, кричите о программе на каждом углу. Выкладывайте ее в каталоги. Объясняйте новичкам основы. Чем больше новых активных пользователей, тем сильнее сообщество.

    У меня есть предложение! Куда я могу его засунуть?

    В группе VK, а так же на официальном форуме есть специальные темы для ваших предложений. Пишите туда или напрямую на почтовый ящик кликера. Ссылки в "О программе"


История развития программы

v4.13.014 (16.05.18)
+ Ядро
  + Переход на Юникод, теперь в файлах применяется кодировка UTF-8
  + Создана 64-битная версия программы
  + Улучшена поддержка расширенного рабочего стола
  + Исправлен сбой при работе системы больше 49 дней без перезагрузки
+ Редактор:
  + Блокировка редактирования кода во время выполнения скрипта
  + Улучшено быстродействие лупы
  + Исправление выпадающих меню
  + Исправление автокомментирования
  + Исправление сворачивания и разворачивания окна
  + Исправление сбоя при закрытии объекта привязки
  + Окно теперь запоминает положение при переходе на главное окно
  + Добавлен хоткей Ctrl + S для быстрого сохранения
  + Добавлены хоткеи Tab, Shift + Tab для групповой табуляции
  + Возможность задать сценарий по умолчанию через файл "\data\default.txt"
  + Добавлена возможность делать быстрые скриншоты 100 х 100 относительно
    позиции курсора (скриншот лупы)
  + Добавлен глобальный хоткей Alt + G (сменяемый) для скриншота лупы
+ Интерпретатор:
  + Добавлена базовая проверка синтаксиса
  + Добавлены инструкции:
    + HGETPID
    + ARRSORT
    + GETMESSAGE
    + CHAR
  + Добавлены системные переменные:
    + $_pdir
    + $_hwnd
    + $_hwnd_self
    + $_time_str
    + $_date_str
    + $_ver_self
    + $_ver_sys
    + $_arch_sys
    + $_param_str
  + Исправления:
    + Доработка всей математики, новые операции
    + Доработка функций граф. поиска, небольшое ускорение поиска
    + Изменение параметров в WRITEMEM(), READMEM()
    + Доработка READMEM(), теперь функция
    + Доработка STRPOS(), добавлено смещение
    + Доработка DIST(), теперь поддерживает параметры с точкой
    + Доработка KEYSTRING(), теперь он сам жмет Shift
    + Исправление GETFILELIST()
    + Исправление GETDIRLIST()
    + Исправление ряда проблем с кавычками в возвращаемых строках
    + При оконном режиме картинка теперь не "сползает"
    + SCREENSHOTFIX() более не созадет пустую папку
    + Исправление ряда багов потоков
    + Предупреждение об отсутствии файла в #include
    + Доработка #logfile, теперь можно задать произвольное имя лога
    + Процедуры управления курсором более не осуществляют действие в текущей точке
      если обе координаты отрицательные
+ Прочее:
  + Отказ от библиотеки httpwork.dll
  + Актуализация справки
  + Прочие оптимизации и исправления

v4.12.001 (25.03.16)
+ Интерпретатор:
  + Добавлены инструкции:
    + RADIOBOX
    + GETKEYSDOWN
    + GETDIRLIST
    + GETFILELIST
    + SETVAR
    + GETVAR
    + SCREENSHOTFIX
    + PXLREPLACE
  + Убраны инструкции:
    + LOAD
  + Изменены инструкции:
    + SETTHREAD
+ Прочее:
  + Исправлена ошибка со строками, содержащими символ "$"
  + Исправлена утечка памяти при включении режима привязки
  + Исправлено зависание программы в ряде случаев при чтении строк
  + Исправлена INC()
  + Снятие с паузы программы больше не снимает с паузы потоки, остановленные скриптом
  + Введена поправка для записи (опять)
  + Прочие множественные оптимизации и исправления

v4.11.000 (15.10.14)
+ Ядро
  + Добавлена поддержка многопоточности
+ Интерфейс:
  + Обновленный интерфейс настройки горячих клавиш
    ( Не совместим со старыми файлами config.ini )
  + На главную форму добавлена кнопка "Поверх всех окон"
  + Строка состояния на главной форме теперь отображает последнюю строчку лога
  + В настройки добавлены кнопки добавления и удаления ассоциации файлов CMS с программой
    ( Ранее эти настройки прописывалась в реестре автоматически при запуске )
+ Интерпретатор:
  + Добавлены инструкции:
    + TFREADARR
    + TFWRITEARR
    + STRSEPARATE
    + THREAD .. END_THREAD
    + SETTHREAD
    + ARCSIN
    + ARCCOS
    + WNDGETINFO
    + WNDSETINFO
    + WNDBUMP
  + Добавлены параметры GETSCREEN
  + Добавлены макросы для препроцессора
  + Исправления:
    + Вложеный SWITCH не вешает программу
    + "Заменить все" в редакторе не вешает программу
    + Цикл FOR не обнуляет индекс, если он (индекс) уже был инициализирован ранее
    + Несколько частных случаев
+ Прочее:
  + Обе справки объединины в один файл help.chm
  + Прочие оптимизации и исправления

v4.10.000 (03.04.14)
+ Ядро:
  + Размер данных хранимых переменной больше не ограничен 255 символами
  + Полностью переписан механизм записи: проблем меньше, точность больше
  + Полная поддержка расширенного рабочего стола
+ Интерпретатор:
  + Переписана логическая часть:
    + Добавлены битовые операции
    + Добавлена поддержка приоритетных скобок
  + Добавлен восьмой фильтр для COLORMODE
  + Для цикла FOR появилась возможность задать начальное значение параметра
+ Прочее:
  + Исправлены некоторые ошибки предыдущих версий
  + Прочие оптимизации и исправления

v4.9 (31.12.13)
+ Интерпретатор:
  + Добавления:
    + Добавлена конструкция SWITCH
  + Изменения:
    + Изменен вид и вызов подпрограмм, теперь они поддерживают параметры
      ( callsub более не используется )
    + Изменен цикл for, теперь, первая итерация идет от нуля
    + Изменена функция DIST, теперь она возвращает число с плавающей точкой
    + Переписаны DIALOGBOX, INPUTBOX
      dialogbox теперь может управляться клавишами Enter и Escape
    + Изменен HALT, теперь он может закрыть кликер целиком
  + Исправления:
    + Исправлена ошибка "пустой строки"
    + Исправлена ошибка "шести параметров"
    + Исправлены функции sin, cos
    + Исправлен баг вычислений чисел с большим кол-вом знаков после точки
    + Исправление ряда конфликтов числовых и строковых типов
      массивы теперь могут содержать как строковые так и числовые элементы

v4.8.000 (01.10.13)
+ Ядро:
  + Добавлена возможность имитации ввода через PS/2 порт
+ Интерпретатор:
  + Добавлены директивы:
    + #logfile
    + #autorun
    + #ps2_mouse
    + #ps2_keyboard
  + Добавлена поддержка массивов
  + Добавлены инструкции:
    + ARRPUSH
    + ARRPOP
    + ARRSIZE
    + SCANPXL
    + SCANPICTURE
    + DIALOGBOX
  + WAIT теперь может принимать дробные значения для задания мс
    ( wait(1.5) = waitms(1500) )
+ Интерфейс:
  + Добавлена история открытых файлов
+ Прочее:
  + Исправлены некоторые ошибки

v4.7.000 SE (05.12.12)
+ Интерпретатор:
  + Парсер больше не пытается вычислять строки
  + Исправлена работа ф-ций PXLCRC, ROUND, WNDFIND
  + Исправлена ошибка сложения (и других действий) двух и более функций
  + Исправлена ошибка вычитания отрицательного числа (частично)
  + Исправлено сравнение в условиях чисел с точкой
  + Исправлены неработающие директивы препроцессора, если после них шел комментарий
  + Добавлены инструкции:
    + POW
    + TFREAD
    + TFWRITE
    + TFDELETE
    + TFCLEAR
    + TFCOUNT
    + GETKBLAYOUT
    + SETKBLAYOUT
  + Изменена инструкция IF_PICTURE_IN
  + Добавлены сист. переменные:
    + $_DATE_Y
    + $_DATE_M
    + $_DATE_D
+ Редактор:
  + Добавлено меню быстрой вставки команд
  + Шаблоны теперь так же в виде выпадающего меню
  + Включение лупы замедляет скорость указателя мыши
+ Прочее:
  + Режимы выполнения вернулись в виде отдельного окна

v4.7.000 (12.10.12)
+ Ядро:
  + Добавлена возможность ставить скрипт на паузу
  + В записываемый сценарий добавлен коэффициент, регулирующий скорость воспроизведения
  + Возможность задать абсолютный путь к файлам
    (относительным как и ранее считается путь от текущей папки проекта)
  + Возможность задавать числа в шестнадцатеричном виде
  + Добавлена поддержка дробных чисел (с точкой)
  + Убраны строковые переменные как таковые; теперь переменные могут принимать сл. типы данных:
    целые числа, числа с точкой, строки
+ Интерпретатор:
  + Общее улучшение алгоритмов парсера
  + Возможность использования AND, OR, XOR в условиях (вместо &, |, ^)
  + Изменен механизм цветокоррекции и процедура COLORMODE
  + Добавлены инструкции:
    + MCLICK
    + MDOWN
    + MUP
    + INIREAD
    + INIWRITE
    + PXLCRC
    + SIN
    + COS
    + SQRT
    + ROUND
    + INT
  + Добавлена системная переменная $_hwnd
  + Убраны
    + TOINT
    + TOSTR
+ Редактор:
  + Добавлен переключатель для быстрой вставки, позволяющий копировать координаты в буфер
    (вставка LCLICK при этом не происходит)
  + Исправлено комментирование блоков ("забивание")
  + Добавлен интерфейс поиска и замены текста
  + Добавлен мастер автоотступов (мастер автооформления)
  + Скорректирован прицел лупы
  + Добавлена возможность переключать цветовосприятие для лупы
  + Добавлена возможность посмотреть и изменить значение переменной, если кликер стоит на паузе
+ Прочее:
  + С формы убраны режимы работы кликера
  + Уведомление о доступной новой версии теперь всплывает в трее
  + В справку по языку добавлен перечень всех команд
  + Исправлены некоторые баги и ошибки прошлых версий
  + Произведены некоторые оптимизации

v4.6.000 (09.03.12)
+ Ядро:
  + Введено понятие "папка проекта"
    (Теперь все пути считаются относительно директории, в которой находится загруженный скрипт)
  + Добавлены директивы:
    + #include
    + #name
+ Интерпретатор:
  + Добавлены функции и процедуры:
    + HintPopup
    + strmd5
    + strcut2
  + Модифицированы функции и процедуры:
    + httpget
    + showlog
    + strwriteln
+ Редактор:
  + Убраны подменю "мышь", "клавиатура", "прочее"
  + Добавлены шаблоны кода
+ Прочее:
  + Исправлено "залипание" клавиш в ряде случаев
  + Исправлены некоторые ошибки прошлой версии
  + Актуализация справок

v4.5.000 (16.09.11)
+ Ядро:
  + Возможность сохранять скриншоты в JPEG
  + Расширен файл конфигурации, ряд настроек с формы выведен туда
  + Добавлен альтернативный способ взятия HWND для ок. режима по правой кнопке мыши
+ Интерпретатор:
  + Добавлены функции и процедуры:
    + INPUTBOX
    + IF_PICTURE_IN
    + ISKEYDOWN
    + HTTPGET
+ Интерфейс:
  + Возможность ручного ввода HWND в менеджере окон
+ Прочее:
  + Небольшие исправления в справке по языку
  + Прочие мелкие исправления и оптимизации (по традиции)

v4.4.000 (20.07.2011)
+ Ядро:
  + Существенно сократили погрешность задержек WAIT, WAITMS
+ Интерпретатор:
  + Изменены инструкции:
    + SCREENSHOT
    + HSET
  + Процедура SOUND теперь воспроизводит звук независимо от настроек программы
  + Добавлены функции и процедуры:
    + STRFILTER
    + STRCUT
    + STRLEN
    + STRCONCAT
    + STRREPLACE
    + STRREADLN
    + STRWRITELN
    + TOSTR
    + TOINT
    + WNDFIND
    + WNDSIZE
    + WNDPOS
    + WNDSTATE
    + POSTMESSAGE
    + SENDMESSAGE
    + COLORGEN
    + COLORR
    + COLORG
    + COLORB
    + BEEP
  + Восстановлена работа строковых переменных
  + Исправлена ошибка при использовании функции в качестве аргумента другой функции
  + GOTO больше не поддерживает переход по номеру строки, только текстовые метки
+ Редактор:
  + Добавлена экранная лупа
+ Прочее:
  + Реструктурирована справка по языку сценариев
  + Прочие исправления и оптимизации

v4.3.000 (26.11.2010)
+ Интерфейс:
  + Мультиязычность интерфейса
  + Расширение функционала менеджера окон
+ Интерпретатор:
  + Добавлены системные переменные:
    + $_time_h, $_time_m, $_time_s
  + Добавлены инструкции:
    + HSET
    + HSETTEXT
  + Добавлены функции:
    + HGET
    + HGETTEXT
+ Прочее:
  + Мелкие повсеместные исправления
  + Новая авторская иконка :D

v4.2.000 (05.10.2010)
+ Ядро:
  + Изменен механизм плагинов
+ Интерфейс:
  + "Официальная" возможность запуска из редактора
+ Интерпретатор:
  + Добавлены комплесные условия для IF, FOR, WHILE
  + Изменен IF_PIXEL_IN
  + Добавлены инструкции:
    + COLORMODE
    + MOVER
  + Добавлены системные переменные:
    + $_xmax, $_ymax
    + $_time_t
  + Восстановлена работоспособность циклов до второго уровня вложенности
    + Параметр FOR обнуляется после завершения цикла

v4.1.000 (02.09.2010)
+ Ядро:
  + Добавлена возможность корректировки цветовосприятия программы
+ Интерпретатор:
  + Добавлена функция:
    + DIST
  + Добавлены инструкции:
    + READMEM
    + WRITEMEM
    + SUB .. END_SUB
    + GOSUB
+ Редактор:
  + После нажатия "Применить" текущий скрипт сохраняется в файл backup.cms
+ Интерфейс:
  + Переработано окно настроек

v4.0.002 (11.06.2010)
+ Интерпретатор:
  + Поддержка плагинов
  + Добавлен второй тип переменных - строки
  + Инструкция IF_TIME усовершенствована
  + Быстродействие анализаторов экрана увеличено в десятки раз
    + Цвет теперь представлен обычным десятичным числом
  + Контроль ошибок интерпретации
  + Добавлены функции:
    + PXL
    + PXLXOR
    + PXLCOUNT
    + RND
    + RNDFROM
    + FROMCLIP
  + Добавлена инструкции
    + BREAK
    + CALL
  + Введена поддержка ELSE в условиях
  + Следующие инструкции убраны:
    + IF_VAR, IF_NOT_VAR
    + IF_PIXEL, IF_NOT_PIXEL
    + IF_NOT_KEYDOWN
    + IF_NOT_TIME
    + SETVAR
    + DELVAR
    + Убран старый рандом (R1:2)
  + Введена поддержка текстовых меткок для GOTO
  + Константы выведены в изменяемый файл /data/const.txt
+ Интерфейс:
  + Подправлен интерфейс всех окон
  + Улучшен редактор сценариев
  + Возможность запуска сценария с произвольной задержкой
  + Добавлена автоматическая ассоциация файлов "cms" с программой
+ Прочие добавления, исправления и оптимизации

v3.2 RC1 (15.03.2010)
+ Интерпретатор:
  + Переменные:
    + Инструкции IF_[NOT_]VAR ... END_IF, SETVAR, DELVAR считать устаревшими
      (Их поддержка прикратится в ближайшей старшей версии)
    + Добавлено условие IF ... END_IF
    + Добавлены инструкции DEFINE, UNDEFINE
    * Вместо "setvar($var, 0)" можно писать "$var = 0"
    * Вместо "setvar($var, 0, #true)" можно писать "define($var)"
  + Изменены инструкции циклов
  + Цикл WHILE_NOT считать устаревшим
  + Добавлена инструкция PIXELCOUNT
+ Прочие мелкие исправления и оптимизации
+ Примеры из дистрибутива и справки переписаны с учетом последних изменений

v3.2 beta (08.02.2010)
+ Интерпретатор:
  + Поддержка арифметики в параметрах
  + Добавлены циклы FOR, WHILE, WHILE_NOT
  + Добавлен анализ экрана для оконного режима
  + Добавлены системные переменные $_line, $_cursor
  + Добавлены константы #C_NORM, #C_HAND, #C_EDIT
  + Инструкция KEYSTRING переписана
  + Добавлено условие IF_KEYDOWN
  + Добавлена инструкция TOCLIP
+ Ликвидирован баг, приводящий к краху программы при частом вызове GETSCREEN
  (Отдельное спасибо за помощь нашему сообществу в Вконтакте)
+ Прочие мелкие исправления и оптимизации

v3.1 final (25.01.2010)
+ Интерпретатор:
  + Добавлена инструкция KEYSTRING
+ Настройки:
  + Добавлена автопроверка обновлений
+ Мелкие исправления

v3.1 RC1 (16.01.2010)
+ Интерпретатор:
  + Добавлены системные переменные $_return1, $_return2
  + Добавлено условие IF_PIXEL_IN ... END_IF
  + Добавлена инструкция SOUND
+ Мелкие исправления

v3.1 beta (05.01.2010)
+ Интерфейс:
  + При быстрой вставке LCLICK по хоткею теперь так же добавляется цвет пикселя в комментарии
+ Интерпретатор:
  + Добавлены системные переменные $_xmouse, $_ymouse
  + Добавлены константы #true, #false, #null
  + Добавлено условие IF_TIME ... END_IF
Исправления альфа версии:
  + Вложенные друг в друга условия теперь работают корректно
  + GOTO снова корректно работает с переменными
  + Сценарий при загрузке больше не деформируется

v3.1 alpha (12.12.2009)
+ Ядро:
  + Изменен алгоритм интерпретации
    (теоретически увеличилось быстродействие плюс новые возможности)
  + Оконный режим работы (параллельный режим)
  + Новое окно "Лог" для вывода текстовых сообщений отладки
+ Интерпретатор:
  + Инструкции для лога logshow, logclear, logwrite
  + Конструкции условий IF_VAR ... END_IF, IF_PIXEL ... END_IF
  + Инструкции: inc, screenshot, getscreen, halt
+ Интерфейс:
  + Доработан дизайн главного окна ввиду введения новых функций
  + Доработки окна редактора
    + Поле ввода работает в режиме переноса слов
      (нумерация строк при переносе сохраняется)
    + Вывод координат курсора, ID элемента и цвета пикселя под ним
+ Исправлен ряд незначительных багов

v3.0 (30.09.2009)
+ Интерфейс:
  + Немного переработан дизайн главного окна и окна редактора
  + Возвращена горячая клавиша вставки координат для редактора
  + Главное окно теперь скрывается при открытии окна редактора
  + Настройки главного окна теперь распространяются и на окно редактора
  + Всплывающее меню при щелчке ПКМ на значке в трее
+ Интерпретатор:
  + Пробелы в инструкциях теперь игнорируются
  + Поддержка переменных
  + Поддержка случайных значений
  + Поддержка псевдонимов для клавиатурных команд
  + Новые инструкции:
    + GOTO
    + SETVAR, DELVAR
  + Третий вариант выполнения сценария - через заданный интервал
+ Настройки:
  + Настройки ядра
+ Новый планировщик (сырой как портянки)
+ Исправлен ряд багов

v2.1 (05.08.2009)
+ Улучшенный редактор и ядро:
  + Кнопки быстрой вставки команды в редакторе
  + Подсветка синтаксиса в редакторе
  + Поддержка комментариев "//" (C++ Style)
  + Игнорирование пустых строк
  + Ряд новых команд, включая работу с клавиатурой (см. команды)
+ Добавлено озвучивание событий воспроизведения, записи и остановки
+ Прочие мелкие доработки и исправления
+ Новая модная справка

v2.0 (26.04.2009)
+ Переделан движок управления:
  + Более совершенная система записи и воспроизведения
+ Возможность запланированного запуска и остановки
+ Инструкции Вставка 1 и Вставка 2 относятся теперь к Редактору сценария
+ Изменен интерфейс
+ Прочие мелкие доработки и исправления

v1.3 (11.04.2009)
+ Введена возможность "записи" сценария
+ Доработан интерфейс
+ Прочие мелкие доработки и исправления

v1.2 (22.03.2009)
+ Добавлена система настроек программы:
  + Настройка горячих клавиш
  + Настройка быстрой вставки
+ В два раза уменьшено время отображения всплывающего сообщения о запуске\остановке

v1.1 (07.01.2009)
* Изменено название программы на более уникальное: Clickermann
+ Сворачивание в системный трей
+ Горячая клавиша F6 - вставка текущих координат курсора
+ Горячая клавиша F7 - запуск управления
+ Горячая клавиша F8 - остановка управления
- Убрана команда CLICK
+ Введена команда LCLICK
+ Введена команда RCLICK
+ Введена команда LDOWN
+ Введена команда LUP

v1.0 (когда-то в 2006 году...)
+ Релиз для ознакомления


О программе

Программа является бесплатной (FREEWARE) и распространяется "как есть". Запрещается продавать программу или любую ее часть. Исходные коды не предоставляются. Официальным дистрибутивом является только скачанный с официального сайта.
Автор программы снимает с себя всякую ответственность за использование программы в тех или иных целях. Вы используете программу на свой страх и риск. Автор программы не признает за собой вину в возможном причинении материальных убытков организациям и частным лицам в следствие использовании программы третьими лицами.
Программа является частной инициативой автора, создается и поддерживается по его желанию, никаких гарантий не предоставляется.

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

Реквизиты для перевода
Кошелек Яндекс | 41001436007777
Кошелек QIWI | 9831586490

Официальные ресурсы
Официальная группа ВКонтакте | http://vk.com/clickermann
Официальный сайт | http://crapware.aidf.org
Официальный Твиттер | ru_clickermann
Официальный почтовый ящик | clickermann@inbox.ru

Персональное спасибо от автора
Эти люди существенно помогли проекту на определенных этапах
Глеб Игоревич
Александр Юдин
Андрей Оравен
А так же спасибо всем участвующим в жизни нашего сообщества!


Справка по языку сценариев актуальна для версии 4.13.014
Дата последней ревизии справки: 24.04.2018
Если вы нашли ошибку в справке, то пишите на clickermann@inbox.ru

Содержание

  • КАК ЧИТАТЬ СПРАВКУ
  • ОПИСАНИЕ ЯЗЫКА СЦЕНАРИЕВ
  • ПЕРЕМЕННЫЕ И ТИПЫ ДАННЫХ
  • ПРОЦЕДУРЫ И ФУНКЦИИ
  • МАТЕМАТИЧЕСКИЕ ОПЕРАЦИИ
  • УСЛОВИЯ, СРАВНЕНИЯ, ЛОГИЧЕСКИЕ ОПЕРАЦИИ
  • МАССИВЫ
  • КОНСТАНТЫ
  • ДИРЕКТИВЫ ПРЕПРОЦЕССОРА
  • ПРОЧИЕ ОСОБЕННОСТИ

КАК ЧИТАТЬ СПРАВКУ

Справка исполнения в формате CHM. Доступ к основным разделам осуществляется из меню слева на вкладке Содержание. Справка имеет поиск по перечню описанных процедур и функций. Для доступка к перечню перейдите на вкладку Указатель.
При описании синтаксиса процедуры или функции:
- Синий цвет параметра означает что процедура или функция принимает численный параметр
- Фиолетовый цвет параметра означает что процедура или функция принимает строковый параметр
- Во всех прочих случаях см. описание и пример
- Квадратные скобки [ ] обозначают что параметр необязателен и если он опущен то будет использоваться значение по умолчанию (см. примечания)
- Троеточие ... означает что количество параметров неограничено, при этом их смысл соответствует предыдущему описанному параметру

ОПИСАНИЕ ЯЗЫКА СЦЕНАРИЕВ

Кликер использует собственный язык программирования, созданный специально максимально дружелюбным для неподготовленного пользователя. При этом в нем присутствует практически полный набор средств для решения всевозможных алгоритмических задач. В языке присутствуют: процедуры и функции, арифметические операции и вычисления, переменые и массивы, численные и строковые типы данных, логические конструкции (условия, циклы).
Сценарий состоит из последовательности строк, которая выполняется сверху вниз (если смотреть в Редакторе). Каждая строка сценария может содержать:
- Вызов процедуры
- Операцию присвоения
- Комментарий
- Различные служебные директивы
- Пустую строку (ничего не содержать)

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

Пример #1
// щелчек мышью
lclick(100, 200)

// пауза 1 сек
wait(1)

Первая строка данного примера содержит комментарий, дающий пояснение, что следующая команда на строке ниже осуществляет щелчек. Вторая строка содержит вызов процедуры lclick() с параметрами 100 и 200. Эта команда осуществляет щелчек левой кнопкой мыши в данные координаты на экране. Третья строка не содержит ничего (пустая строка) и служит лишь для удобства восприятия написанного кода. Четвертая строка - снова комментарий с пояснением. И, наконец, пятая строка содержит вызов процедуры wait() с параметром 1, что означает временную задержку выполнения на 1 секунду. После завершения последней команды данного примера, выполнение вновь начнется с первой строки.
Как видно из описания, фактически сценарий имеет всего две функциональные строки, содержащий действия. Остальные же строки служат исключительно для удобства восприятия сценария и не выполняют каких-либо действий.

ПЕРЕМЕННЫЕ И ТИПЫ ДАННЫХ

Что такое переменные, вы прекрасно знаете со школы. Это такие ячейки (в нашем случае памяти), имеющие собственное уникальное имя и содержащие некие данные. При этом переменные могут использоваться в качестве параметров или аргументов выражений. Результат таких действий будет зависить от того, какое конкретное значение в момент обращения содержит переменная.
Имена переменные в кликере всегда начинаются со знака $ ("доллар") после которых идет уникальное имя переменной. Допустимыми символами для имени являются цифры 0..9, символы латинского алфавита a..z и знак "_" (нижняя черта). Таким образом, целиком имя переменной может выглядеть как $var1 или $total_sum.
Перепишем Пример #1 используя полученные знания. Введем счетчик осуществленных щелчков и его вывод.

Пример #2
// щелчек мышью
lclick(100, 200)

// пауза 1 сек
wait(1)

// Увеличение переменной-счетчика
$count = $count + 1

// Вывод сообщения
print("Щелчков: ", $count)

Добавилось несколько строк. С первыми строками вы уже знакомы. Переходим сразу к восьмой строке. Здесь содержится присвоение значения переменной и ее увеличение путем прибавления к ее текущему значению единицы. В самый первый прогон скрипта счетчик равен 0. Так ведет себя любая переменная, которой еще не было присвоено значение, но к которой обратились. Затем к этому значению прибавляется 1 и результат вычисления правой части выражения присваивается той же переменной, обновляя ее значение. Подробнее про вычисления смотрите в соответствующем разделе ниже.
Одиннадцатая строка интереснее. Она содержит процедуру print(), которая выводит строку параметров в окно лога. Строка образуется путем "склеивания" параметров. Первым параметром идет строка "Щелчков: ", которая служит пояснением. Второй параметр - счетчик кликов $count. Поскольку при обработке параметра будет извлечено значение переменной $count, то в конечном итоге процедура print() при каждом повторе сценария будет выводить строки следующего вида: "Щелчков: 0", "Щелчков: 1", и т.д.
Проще говоря, код в кавычках являются строкой (строковый тип данных) и не подлежат обработке, даже если строка содержит имя переменной или арифметические операции. Все прочие данные (числа, переменные и пр.) кликер пытается обработать (выполнить, вычислить). Поэтому инструкция вида

print("$count = ", $count)
в итоге выдаст в лог строку "$count = 0". Собственно, это основная разница между типами данных. Численные - вычисляются, строковые - нет. При этом переменная, которая содержит строку или результат выполнения строковой функции, считается строкового типа, а переменная аналогичным образом содержащая число - числового типа.

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

Таблица #1 - Перечень служебных переменных

Имя переменной | Значение
$_xmouse | Текущие координаты мыши по оси Х
$_ymouse | Текущие координаты мыши по оси Y
$_xmax | Максимально допустимое значение X, вычисляется из конфигурации рабочего стола
$_ymax | Максимально допустимое значение Y, (..)
$_xmin | Минимально допустимое значение X, (..)
$_ymin | Минимально допустимое значение Y, (..)
$_return1 | Используется для возврата в нее значения определенными инструкциями
$_return2 | Аналогично
$_cursor | Текущий вид указателя мыши (стрелка, палец и т.п.)
$_ms | Системный таймер Windows, отсчитывающий миллисекунды с момента старта ОС
$_time_t | Текущее время в формате Unix-систем (подробнее)
$_time_h | Текущий час
$_time_m | Текущая минута
$_time_s | Текущая секунда
$_date_y | Текущий год
$_date_m | Текущий месяц
$_date_d | Текущие число
$_time_str | Текущие время
$_date_str | Текущая дата
$_hwnd | Текущий hwnd привязки (если 0, то привязки к окну нет)
$_hwnd_self | Собственный hwnd кликера
$_pdir | Текущая рабочая директория
$_ver_self | Версия программы
$_ver_sys | Версия системы
$_arch_sys | Разрядность системы
$_param_str | Параметры запуска программы, разделенные ";"

ПРОЦЕДУРЫ И ФУНКЦИИ

Что такое процедуры вы уже знаете (см. Пример #1). Типичная процедура это lclick(x, y). Где lclick - это имя процедуры, а в скобках указаны ее параметры: x и y.
Функции, как и процедуры, так же имеют свои собственные имена и набор параметров. При этом, функция, по аналогии с переменной, возвращает свое значение в то место, где она была вызвана.
Перепишем Пример #2 и введем функцию, возвращающую случайное число.

Пример #3
// щелчек мышью
lclick( rnd(50, 100) + 50, rnd(50, 100) + 50 )

// случайная пауза от 1 до 5 сек
wait( rnd(3, 5) )

// Увеличение переменной-счетчика
$count = $count + 1

// Вывод сообщения
print("Щелчков: ", $count)

Мы изменили вторую строчку таким образом, что щелчек теперь осуществляется в случайные координаты. Параметры x и y теперь принимают значения от 100 до 150. Это достигается использованием функции rnd(), которая возвращает значение от 50 до 100, к которому в свою очередь затем прибавляется 50. Точно так же на пятой строчке достигается случайная временная задержка от 3 до 5 секунд.
Таким образом, как вы видите, функции могут использоваться как самостоятельно в качестве параметров, так и в качестве участников выражения. В данной справке в описании всегда указывается является инструкция процедурой или функцией.

МАТЕМАТИЧЕСКИЕ ОПЕРАЦИИ

Вычисления являются важной частью составления алгоритмов. Кликер поддерживает все базовые математические операции. Правила вычислений соответствуют общепринятым нормам, поэтому вас не возникнет проблем в составлении выражений. К тому же в предыдущих примерах вы уж видели использование такой операции, как сложение.
Производить вычисления можно как при присвоении переменной какого-либо значения, так и прямо в параметре функции или процедуры (см. Пример 2 и Пример 3).

Таблица #2 - Перечень математических операций

Операция | Приоритет | Пример
Скобки приоритета "( )" | 1 | $var = (1 + 2) * 2
Умножение "*" | 2 | $var = 1 * 2
Деление "/" | 2 | $var = 1 / 2
Сложение "+" | 3 | $var = 1 + 2
Вычитание "-" | 3 | $var = 1 - 2

УСЛОВИЯ, СРАВНЕНИЯ, ЛОГИЧЕСКИЕ ОПЕРАЦИИ

Условия являются мозгом любого "умного" алгоритма, подразумевающего некие действия в зависимости от сложившейся ситуации. В языке сценариев за это отвечает условная конструкция if(). В отличие от математических вычислений, логические вычисления в конечном итоге всегда дают один из двух результатов: истину, если условие соответствует действительности, и ложь, если условие не соответствует. Обычно их сопостовляют с числами 1 и 0 соответственно. Типичный пример простейшего логического выражения - это сравнение двух значений. Рассмотрим очередной пример простейшего условия.

Пример #4
// генерация случайного числа
$var = rnd(1, 10)

// проверка условия
if ($var > 5)
  print($var, " > 5" )
end_if

Во второй строчке переменной $var присваивается случайное число от 1 до 10. На шестой строчке начинается условная констркция, в заголовке которой присутствует условие выполнения - логическое выражение $var > 5. В том случае если в момент выполнения это условие будет истинно (в $var будет число от 6 до 10), то внутренний код условия выполнится, в лог будет выведено сообщение. В случае если условие будет ложно, то ничего не произойдет. Хотя "ложный" исход так же можно обрабатывать при помощи блока else логической конструкции if(). Об этом написано в соответствующем разделе справки. Следующая таблица содержит все доступные операции сравнения.

Таблица #4 - Перечень операций сравнения

Операция | Синтаксис
Больше | >
Меньше | <
Равно | ==; =
Неравно | !=; !
Больше или равно | >=
Меньше или равно | <=

При этом зачастую не всегда можно обойтись одной операцией сравнения. Иногда нужно проверить сразу два условия, причем сразу. Для этого используются логические операции, позволяющие составлять сложные условия. Как и операции сравнения, они объединяют два операнда и их результатом в рамках конструкции if() будет либо истина либо ложь.
Всего таких операций три. И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ. Логическое И возвращает истину когда оба операнда истинны. Если же хоть один из них будет ложным, то все выражение становится ложным. Логическое ИЛИ возвращает истину когда хоть один операнд истинный. Ложь будет возвращена только если оба операнда ложны. Логическое исключающее ИЛИ вернет истину когда только один операнд соответствует истине. При этом ложь будет возвращена и в случае когда сразу оба операнда ложны, и в случае когда они оба истинны.

Таблица #5 - Перечень логических операций

Операция | Синтаксис
Логическое И | and; &
Логическое ИЛИ | or; |
Логическое исключающее ИЛИ | xor; ^

Рассмотрим несколько примеров для понимания.

Пример #5

// условие 1
if ((5 > 3) and (3 > 5))
  print("истина")
else
  print("ложь")
end_if

// условие 2
if ((5 > 3) or (3 > 5))
  print("истина")
else
  print("ложь")
end_if

// условие 3
if ( ((5 > 3) and (3 > 5)) or (5 > 3) )
  print("истина")
else
  print("ложь")
end_if
Разумеется, как и в Примере №4, здесь могли бы использоваться не только простые числа, но и переменные, функции и т.п. Но для обучения азам более наглядны будут простые числа 3 и 5. Обратите внимание, что в этом примере в конструкции if() добавлен блок else.
Итак, первое условие даст в итоге ложь потому что не все операнды истинны. Обратите внимание на второе сравнение (3 > 5). Совершенно очевидно, что это утверждение ложно. А значит и все выражение так же будет ложно, потому что используется логическое И. Второе условие похоже на первое, за тем исключением, что там используется более "лояльное" логическое ИЛИ. И поскольку как минимум одно сравнение дает истину (5 > 3), то этого становитс ядостаточно чтоб все выражение стало истинным. Третье условие просто демонстрирует, что в особо сложных случаях можно задействовать скобки приоритета. Здесь, в условиях, они выполняют ту же роль, что и в простой математике. Главное не запутаться в них.

МАССИВЫ

Массивы по сути это наборы все тех же переменных, однако объединенные общим именем. При этом каждый элемент массива имеет свой поряковый номер, называемый индексем. Индексация элементов массива начинается с нуля. Как и переменные, элементы массива могут использоваться в качестве аргументов или членов выражений. Кроме того, существуют специальные функции для работы исключительно с массивами. К примеру процедура tfreadarr()
, считывающая текстовый файл, помещая каждую его строку в отдельный элемент массива.
Работа с массивами отличается от работы с переменными только тем, что в синтаксисе после имени массива присутствуют квадратные скобки, содержащие индекс, который в свою очередь может быть как обычным числом, так и вычисляемой переменной. Как правило, работа с массивами плотно пересекается с циклами. Поэтому необходимо изучить и эту несложную тему.

Пример #6

// массив из трех элементов
$var[0] = 1
$var[1] = 2
$var[2] = 3

// накапливаемая сумма
$result = 0

// перебор через цикл элементов массива [0 .. 2]
for($i = 0, $i < 3)
  $result = $result + $var[ $i ]
end_cyc

// вывод суммы элементов
print( $result )
Данный пример считает сумму элементов массива. Первые три строчки очень просты. В них трем элементам массива $var присваиваются значения. На самом деле в реальной жизни так делают крайне редко, и здесь этот способ приведен скорее для упрощения примера. Вся магия начинается в цикле for(). Возможно новичку он покажется жутковатым, однако все что он делает - это просто выполняет свое тело, увеличивая при этом свою переменную $i, которая и используется в качестве индекса массива. То есть цикл перебирает один элемент массива за другим и считает общую сумму в переменной $result.
Более полно и детально работа с массивами рассмотрена в соответствующей теме на официальном форуме.

КОНСТАНТЫ

Константы играют ту же роль, что и переменные. За тем исключением, что константы нельзя изменить и их префикс "#".
Константы загружаются в программу при запуске из файла %Clickermann%/data/const.txt
Вы можете его править, однако тогда не забывайте делать его копию при скачивании новой версии ПО.

ДИРЕКТИВЫ ПРЕПРОЦЕССОРА

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

Директива | Значение | Пример
#name | Позволяет задать скрипту имя, которое будет отображаться рядом с названием программы. | #name "СуперБот v1.2"
#include | Вставляет в это место содержимое текстового файла из папки проекта. Это позволяет "прятать" объемный код, повышая таким образом читаемость скрипта. | #include "mylib.cms"
#logfile | Включает ведение лог-файла в папке проекта, куда дублируется весь вывод через logwrite / print | #logfile "debug.txt"
#autorun | Сценарий начинает выполняться сразу после загрузки | #autorun
#ps2_keyboard | Включает режим PS/2 клавиатуры | #ps2_keyboard
#ps2_mouse | Включает режим PS/2 мыши | #ps2_mouse
#define | Заменяет один текст на другой | #define <искомое>:<новое>

ПРОЧИЕ ОСОБЕННОСТИ

Шестнадцатиричная запись
Помимо обычного способа написания числа, вы можете использовать шестнадцатиричную запись. К примеру, число 255 в такой записи будет выглядеть как 0xFF, а 2018 - как 0x07E2. При этом префикс "0x" является обязательным и неизменным. Этот способ особенно подходит для работы с адресами в памяти. Таким образом можно записывать только целые положительные числа.


Процедуры и функции работы с числами

В этом разделе описаны процедуры и функции работы с числами, переменными и массивами.

Содержание

  • DEFINE
  • UNDEFINE
  • INC
  • RND
  • RNDFROM
  • INT
  • DIST
  • SIN
  • COS
  • ARCSIN
  • ARCCOS
  • SQRT
  • POW
  • ABS
  • ROUND
  • ARRPUSH
  • ARRPOP
  • ARRSIZE
  • ARRSORT
  • SETVAR
  • GETVAR

DEFINE

Объявляет переменную и присваивает ей значение.

Синтаксис

DEFINE ($var, [value] )

Параметры

$var - символьное имя переменной
value - необязательный параметр; числовое либо строковое значение

Пример

DEFINE($myvar, 5)
DEFINE($myvar, 10)
logwrite("Value: ", $myvar)

Примечания

Инструкция сработает только если переменная не была объявлена раньше. В противном случае инструкция игнорируется. Если параметр value опущен, переменная инициализируется нулем

UNDEFINE

Удаляет переменную из памяти.

Синтаксис

UNDEFINE ($var)

Параметры

$var - символьное имя переменной

Примечания

Если обратиться к удаленной переменной, ее значение представится как 0.
Так же эта процедура может использоваться для удаления массива и всех его элементов.

INC

Увеличивает значение переменной.

Синтаксис

INC ($var, [value] )

Параметры

$var - переменная
value - числовое значение, прибавляемое к переменной; необязательный параметр;

Пример

INC($myvar, 5) // увеличивает значение переменной на 5

INC($myvar, -3) // уменьшает значение переменной на 3

Примечания

Если параметр value не указан, происходит увеличение на 1

RND

Функция. Возвращает целое число, выбранное случайно из заданного интервала.

Синтаксис

RND (from, to)

Параметры

from - нижняя граница интервала
to - верхняя граница интервала

Пример

// клик в случайное место
lclick( RND(0, 100), RND(0, 100) )

Примечания

Числа from, to входят в выдаваемые функцией значения

RNDFROM

Функция. Возвращает случайно выбранный элемент из заданного набора аргументов.

Синтаксис

RNDFROM (a, b, ...)

Параметры

a, b, ... - набор элементов; число параметров функции неограниченно;

Пример

$var = RNDFROM(1, "apple", 5)
print($var)

INT

Функция. Возвращает целую часть числа без округления. Принудительно возвращает число.

Синтаксис

INT (num)

Параметры

num - число

Пример

$var = int(25.73)
print($var)   // 25

Примечания

Функция может использоваться для приведения типов данных. Позволяет представить строку как число.
Если вам нужно округлить число до заданной точности, см. функцию ROUND

DIST

Функция. Возвращает расстояние между двумя точками.

Синтаксис

DIST (x1, y1, x2, y2)

Параметры

x1, y1 - координаты одной точки
x2, y2 - координаты второй

Пример

$distance = DIST(0,0,3,3)

Примечания

Функция возвращает результат в виде числа с плавающей точкой

SIN

Функция. Тригонометрический синус.

Синтаксис

SIN (arg)

Параметры

arg - аргумент функции в градусах

Пример

// движение мыши по синусоиде
for ($i, $i < 500)
  $y1 = sin($i) * 180 / 3.1415
  move($i*2, int($y1) + 300)
  waitms(100)
end_cyc

COS

Синтаксис

COS (arg) - числовая функция; тригонометрический косинус

Параметры

arg - аргумент функции в градусах

ARCSIN

Функция. Тригонометрический арксинус.

Синтаксис

ARCSIN (arg)

Параметры

arg - аргумент функции

Описание

В тригонометрическом смысле, является обратной синусу функцией. Позволяет по известному значению функции синуса получить ее исходный аргумент.

Пример

$var = 30
print($var)

$var = sin($var)  // sin(30) = 0.5
print($var)

$var = arcsin($var) // arcsin(0.5) = 30
print($var)

ARCCOS

Функция. Тригонометрический арккосинус.

Синтаксис

ARCCOS (arg)

Параметры

arg - аргумент функции

Описание

В тригонометрическом смысле, является обратной косинусу функцией. Позволяет по известному значению функции косинуса получить ее исходный аргумент.

SQRT

Функция. Квадратный корень числа.

Синтаксис

SQRT (arg)

Параметры

arg - аргумент функции

POW

Функция. Возведение числа в степень.

Синтаксис

POW (arg, power)

Параметры

arg - число
power - степень

ABS

Синтаксис

ABS (arg) - числовая функция; возвращает модуль числа

Параметры

arg - число

ROUND

Функция. Округляет число до заданной точности.

Синтаксис

ROUND (arg, prec)

Параметры

arg - число
prec - точность

Пример

$r = ROUND(1236, 1) // $r = 1240
$r = ROUND(1236, 2) // $r = 1200

$r = ROUND(1.236, -2) // $r = 1.24
$r = ROUND(1.236, -1) // $r = 1.2
$r = ROUND(1.236, 0)  // $r = 1

Примечания

Округление происходит в сторону от нуля. То есть prec = 2 округлит число до сотен, а prec = -2 до сотых (два знака после точки). Откругление происходит по стандартному правилу 0.5

ARRPUSH

Добавляет элемент в конец массива.

Синтаксис

ARRPUSH ($var, value)

Параметры

$var - массив
value - число либо строка

Пример

arrpush($arr, 435)
arrpush($arr, 532)
arrpush($arr, 943)

print($arr[0])
print($arr[1])
print($arr[2])

ARRPOP

Функция. Извлекает из массива последний элемент.

Синтаксис

ARRPOP ($var)

Параметры

$var - массив

Пример

arrpush($arr, 435)
arrpush($arr, 532)
arrpush($arr, 943)

print( arrpop($arr) )
print( arrpop($arr) )
print( arrpop($arr) )

Примечания

Извлечение подразумевает возвращение значения и удаление элемента из массива

ARRSIZE

Функция. Возвращает количество элементов в массиве.

Синтаксис

ARRSIZE ($var)

Параметры

$var - массив

Пример

arrpush($arr, 435)
arrpush($arr, 532)
arrpush($arr, 943)

print( arrsize($arr) )
print( arrpop($arr) )
print( arrsize($arr) )

Примечания

Не стоит забывать, что индексация массива идет от нуля, поэтому максимально доступный индекс всегда будет arrsize()-1

ARRSORT

Сортирует элементы массива по возрастанию.

Синтаксис

ARRSORT ($var)

Параметры

$var - массив

Пример

// генерация массива
for($a=0, $a<5)
   $var[$a] = rnd(0,9)
   print($var[$a]);
end_cyc

// сортировка
arrsort($var)
print("sort:")

// вывод результата
for($a=0, $a<5)
   print($var[$a]);
end_cyc

halt

SETVAR

Присваивает значение переменной по ее имени.

Синтаксис

SETVAR ($var, value)

Параметры

$var - строка, содержащая имя переменной
value - присваемое значение

Пример

// подпрограмма, умножающая переменную на три
// имя переменной принимается в виде строки
sub(triple, $triple_var)
  $tmp = getvar($triple_var)
  setvar($triple_var, $tmp * 3)
end_sub

// инициализация
$var = 10

// вызов подпрограммы
triple("$var")

// вывод обновленной переменной
print( $var )
halt

Примечания

К моменту вызова переменная с указанным именем должна существовать

GETVAR

Функция. Возвращает значение переменной по ее имени.

Синтаксис

GETVAR ($var)

Параметры

$var - строка, содержащая имя переменной

Пример

см. SETVAR

Примечания

К моменту вызова переменная с указанным именем должна существовать


Процедуры и функции работы со строками

Строкой считается любой набор печатаемых символов. Строки-константы представляют собой набор символов в кавычках. Например, "это строка". Так же строкой считается результат возвращаемый текстовыми функциями.
Работа со строками может пригодится, когда есть возможность проанализировать текст в приложении, либо организовать ввод-вывод информации.

Содержание

  • INIREAD
  • INIWRITE
  • STRLEN
  • STRCUT
  • STRCUT2
  • STRFILTER
  • STRPOS
  • STRCONCAT
  • STRREPLACE
  • STRREADLN
  • STRWRITELN
  • STRMD5
  • STRSEPARATE
  • FROMCLIP
  • TOCLIP
  • HTTPGET
  • TFREAD
  • TFWRITE
  • TFREADARR
  • TFWRITEARR
  • TFDELETE
  • TFCLEAR
  • TFCOUNT
  • CHAR

INIREAD

Функция. Считывает параметр из файла конфгурации (*.ini).

Синтаксис

INIREAD (filename, parname, [section] )

filename - строка; имя ini файла
parname - строка; имя параметра в ini файле
section - строка, необязательный параметр; название секции в ini файле

Пример

$str = INIREAD("config.ini", "var")
print($str)

Примечания

По умолчанию section имеет значение "default"

INIWRITE

Записывает параметр из файла конфгурации (*.ini).

Синтаксис

INIWRITE (filename, parname, value, [section] )

Параметры

filename - строка; имя ini файла
parname - строка; имя параметра в ini файле
value - строка; записываемое значение
section - строка; необязательный параметр; название секции в ini файле

Пример

INIWRITE("config.ini", "var", "23")

Примечания

По умолчанию section имеет значение "default"

STRLEN

Функция. Возвращает длину входной строки в символах.

Синтаксис

STRLEN (str)

Параметры

str - строка; входная строка

Пример

print( strlen("lol") )
// результат "3"

STRCUT

Функция. Возвращает подстроку из входной строки.

Синтаксис

STRCUT (str, begin, size)

Параметры

str - входная строка
begin - позиция начала копирования
size - количество копируемых символов

Пример

print( strcut("hello2000", 6, 2 ) )
// результат "20"

STRCUT2

Функция. Возвращает подстроку из входной строки.

Синтаксис

STRCUT2 (str, begin, end)

Параметры

str - входная строка
begin - позиция начала копирования
end - позиция конца копирования

Пример

print( strcut2("hello2000", 2, 5 ) )
// результат "ello"

STRFILTER

Функция. Возвращает строку, из которой удаляются определенные символы.

Синтаксис

STRFILTER (str, set, mode)

Параметры

str - входная строка
set - набор символов маски
mode - режим фильтрации

Режим фильтрации

Если режим будет задан как 0, то из входной строки будут вырезаны все символы, указанные в маске
Если режим будет задан как 1, то из входной строки будут вырезаны все символы, кроме указанных в маске

Пример

print( strfilter("hello2000", "20", 0 ) )
// результат "hello"

print( strfilter("hello2000", "20", 1 ) )
// результат "2000"

STRPOS

Функция. Возвращает позицию начала искомой подстроки во входной строке.

Синтаксис

STRPOS (str, substr, [offset] )

Параметры

str - входная строка
substr - искомая подстрока
offset - необязательный параметр; смещение позиции, с которой начинается поиск

Пример

$search = "mind"
$r = strpos("where is my mind", $search)
print($r) // результат 13 (с 13 символа начинается подстрока)

$var = "abcabc"
$r = strpos($var, "a", 3)
print ( $r ) // результат 4, так как смещение на 3 пропускает первый символ "a"

Примечания

По умолчанию offset равен 1. Этот параметр не может быть меньше, чем 1.

STRCONCAT

Функция. Возвращает объединенную строку, состоящую из других строк.

Синтаксис

STRCONCAT (str1, str2, ...)

Параметры

str1, str2, ... - входные строки

Пример

print( StrConcat("hello", "2000", "!!!" ) ) // результат "hello2000!!!"

STRREPLACE

Функция. Возвращает результирующую строку, в которой искомая подстрока заменяется на другую строку.

Синтаксис

STRREPLACE (str, find, replace)

Параметры

str - входная строка
find - искомая подстрока
replace - заменяющая строка

Пример

$s = STRREPLACE("Hello, %username%!!!", "%username%", "John")
print($s) // результат "Hello, John!!!"

STRREADLN

Функция. Считывает произвольную строку из текстового файла.

Синтаксис

STRREADLN (file, str_n)

Параметры

file - имя файла
str_n - номер строки в файле

Пример

print( StrReadln("input.txt", 5 ) ) // результат (пятая строка из этого файла)

STRWRITELN

Записывает строку в конец файла.

Синтаксис

STRWRITELN (file, str, [rewrite] )

Параметры

file - имя файла
str - строка
rewrite - необязательный параметр; флаг перезаписи

Пример

// Этот код записывает в файл "out.txt" строки вида "Random:N", где N - случайное число от 1 до 9
StrWriteln("out.txt", StrConcat("Random:", rnd(1,9)) )

Примечания

Если файла с таким именем еще не существует, он будет создан. Если rewrite = 1, то перед записью строки все содержимое файла будет удалено.
Схожего поведения можно добиться используя более современные tfread и tfclear.

STRMD5

Функция. Возвращает md5 хеш для входной строки.

Синтаксис

STRMD5 (str)

Параметры

str - строка

Пример

print( strmd5("123") ) // 202CB962AC59075B964B07152D234B70

STRSEPARATE

Разбивает строку на подстроки, которые помещаются в массив.

Синтаксис

STRSEPARATE (str, substr, $arr)

Параметры

str - входная строка
substr - строка-разделитель
$arr - выходной массив

Пример

$str = "one,two,three"
strseparate($str, ",", $arr)
print($arr[1]) // "two"

FROMCLIP

Функция. Возвращает строку, находящуюся в буфере обмена.

Синтаксис

FROMCLIP ()

Параметры

отсутствуют

Пример

// обратите внимание что пустые скобки все равно ставятся
logwrite( FROMCLIP() )

TOCLIP

Помещает текст сообщения в буфер обмена.

Синтаксис

TOCLIP (str)

Параметры

str - строка

HTTPGET

Функция. Возвращает результат web-запроса.

Синтаксис

HTTPGET (url, [headers, ...] )

Параметры

url - запрос
headers - дополнительные заголовки запроса

Пример

// код вернет последную опубликованную версию Clickermann (можете проверить в браузере)
$str = httpget("http://crapware.aidf.org/version/clickermann.php")

// тот же запрос, но с добавленным заголовком Referrer
$str = httpget("http://crapware.aidf.org/version/clickermann.php", "Referrer: http://crapware.aidf.org")

print($str)

Примечания

Функция запрашивает данные по протоколу HTTP. Следовательно пока удаленный сервер не ответит (или не истечет таймаут), функция не завершится.
Так же функция может использоваться для отправки командных запросов (запросов с параметрами) удаленному серверу (запросы типа http://somegame.ru/index.php?act=go_to_work&player_id=12345). В любом случае, даже если возвращаемая строка не важна, функция должна вызываться как функция (см. пример)

TFREAD

Функция. Считывает произвольную строку из текстового файла.

Синтаксис

TFREAD (file, str_n)

Параметры

file - имя файла
str_n - номер строки в файле

Пример

print( TFRead("input.txt", 5 ) )

TFREADARR

Считывает текстовый файл в массив, помещая каждую строку в отдельный элемент массива.

Синтаксис

TFREADARR (file, $arr)

Параметры

file - имя файла
$arr - массив

Пример

TFReadArr("C:\out.txt", $arr )
print( $arr[0] )
print( $arr[1] )

TFWRITE

Записывает строку в текстовый файл. Возможна произвольная вставка.

Синтаксис

TFWRITE (file, str, [str_n] )

Параметры

file - имя файла
str - строка
str_n - необязательный параметр; номер строки в файле

Пример

TFWrite("input.txt", "Hello" )

Примечания

Новая строка записывается в файл на позицию str_n. При этом все строки (включая ту, которая была ранее на этой позиции) сдвигаются вниз. Если параметр str_n не задан, то новая строка добавляется в конец файла.

TFWRITEARR

Записывает массив в файл путем помещения каждого элемента массива в отдельную строку.

Синтаксис

TFWRITEARR (file, $arr)

Параметры

file - имя файла
$arr - массив

Пример

$arr[0] = "one"
$arr[1] = "two"
TFWriteArr("out.txt", $arr )

TFDELETE

Удаляет строку из файла.

Синтаксис

TFDELETE (file, str_n)

Параметры

file - имя файла
str_n - номер строки в файле

Пример

TFDelete("input.txt", 2)

Примечания

При удалении все строки ниже удаляемой сдвигаются вверх.

TFCLEAR

Очищает содержимое текстового файла.

Синтаксис

TFCLEAR (file, [delete] )

Параметры

file - имя файла
delete - необязательный параметр; флаг удаления файла

Пример

TFClear("input.txt")

Примечания

Если параметр flag = 1, то файл удаляется с жесткого диска, если нет, то просто очищается

TFCOUNT

Функция. Возвращает количествово строк в текстовом файле.

Синтаксис

TFCOUNT (file)

Параметры

file - имя файла

Пример

print ( TFCount("input.txt") )

CHAR

Функция. Возвращает символ по его коду.

Синтаксис

CHAR (code)

Параметры

code - числовой код символа

Пример

// генерация строки из случайных
// символов a..z длинной 10
$str = ""

for ($i=0, $i < 10)
 $chr = char( rnd(97, 122) )
 $str = strconcat($str, $chr)
end_cyc

print($str)

Примечания

Обратите внимание, что используются коды из таблицы юникода. Не путать с ASCII. Таблица кодов доступна в интернете. Например, здесь.


Процедуры и функции работы с мышью

Точнее не с самой мышью, а с программным указателем (курсором).
Почти все инструкции включают в себя два параметра - х и у. В них помешается курсор перед тем как совершить действие. Если необходимо совершить действие без перемещения курсора (в точке где он сейчас находится), то воспользуйтесь переменными $_xmouse и $_ymouse.

Содержание

  • LCLICK
  • LDOWN
  • LUP
  • RCLICK
  • RDOWN
  • RUP
  • MCLICK
  • MDOWN
  • MUP
  • DBLCLICK
  • MOVE
  • MOVER
  • WHEELDOWN
  • WHEELUP

LCLICK

Делает клик левой клавишей мышки в указанной точке.

Синтаксис

LCLICK (x, y)

Параметры

x, y - координаты точки на экране

Пример

// клик в координаты 10:10
lclick(10, 10)

// клик в текущие координаты курсора
lclick($_xmouse, $_ymouse)

LDOWN

Зажимает левую клавишу мышки в указанной точке.

Синтаксис

LDOWN (x, y)

Параметры

x, y - координаты точки на экране

Пример

// drag & drop
// перетаскивание из точки 10:10 в точку 20:20

ldown(10, 10)
waitms(300)
lup(20, 20)

LUP

Отпускает левую клавишу мышки в указанной точке.

Синтаксис

LUP (x, y)

Параметры

x, y - координаты точки на экране

RCLICK, RDOWN, RUP

Синтаксис

То же, что и LCLICK, LDOWN, LUP, но для правой кнопки мыши.

MCLICK, MDOWN, MUP

Синтаксис

То же, что и LCLICK, LDOWN, LUP, но для средней кнопки мыши.

DBLCLICK

Делает двойной клик левой клавишей мышки в указанной точке.

Синтаксис

DBLCLICK (x, y)

Параметры

x, y - координаты точки на экране

MOVE

Перемещает указатель мышки в указанную точку.

Синтаксис

MOVE (x, y)

Параметры

x, y - координаты точки на экране

MOVER

Смещает указатель мышки относительно текущего положения.

Синтаксис

MOVER (rx, ry)

Параметры

rx, ry - величины, на которые указатель будет сдвинут по соотв. осям

Примечания

Инструкция не работает в оконном режиме
Несмотря на схожее поведение с MOVE($_xmouse+1, $_ymouse+1), инструкция MOVER использует другой механизм работы и немного быстрее выполняется.
Внимание! Как выяснилось позднее, данная процедура работает немного странно и сдвигает курсор не на то количество пикселей, что указано. Нормального поведения можно добиться только опытным путем.

WHEELDOWN

Прокручивает колесико мышки вниз (на себя).

Синтаксис

WHEELDOWN ( [mult] )

Параметры

mult - необязательный параметр; множитель прокрутки

Примечания

Колесико прокручивается на дефолтное количество позиций, которое задается через панель управления Windows. По умолчанию оно равно 3 строкам текста. Множитель mult позволяет увеличить скорость прокрутки. Параметр mult по умолчанию равен 1.

WHEELUP

Прокручивает колесико мышки вверх (от себя).

Синтаксис

WHEELUP ( [mult] )

Параметры

mult - необязательный параметр; множитель прокрутки

Примечания

Колесико прокручивается на дефолтное количество позиций, которое задается через панель управления Windows. По умолчанию оно равно 3 строкам текста. Множитель mult позволяет увеличить скорость прокрутки. Параметр mult по умолчанию равен 1.


Процедуры и функции работы с клавиатурой

В этом разделе описаны процедуры и функции работы с клавиатурой. Все, что вам необходимо знать - это то, что у каждой клавиши на клавиатуре есть свой числовой код. К примеру для пробела это 32. Эти коды перечислены в Приложении 1.
Стоит понимать, что под нажатием в данном случае понимается программное сообщение (виртуальное нажатие), поведение которого иногда может отличаться от реального нажатия клавиши на клавиатуре.

Содержание

  • KEYPRESS
  • KEYDOWN
  • KEYUP
  • KEYSTRING
  • ISKEYDOWN
  • GETKBLAYOUT
  • SETKBLAYOUT
  • GETKEYSDOWN

KEYPRESS

Нажимает и отпускает клавишу клавиатуры.

Синтаксис

KEYPRESS (keycode)

Параметры

keycode - код клавиши

Пример

// нажатие пробела
keypress(32)

// нажатие с использованием константы
keypress(#space)

KEYDOWN

Нажимает и удерживает клавишу клавиатуры.

Синтаксис

KEYDOWN (keycode)

Параметры

keycode - код клавиши

Пример

// нажатие комбинации Ctrl + S
keydown(#ctrl)
keypress(#S)
keyup(#ctrl)

Примечания

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

KEYUP

Отжимает ранее зажатую клавишу клавиатуры.

Синтаксис

KEYUP (keycode)

Параметры

keycode - код клавиши

KEYSTRING

Нажимает клавиши соответственно символам входной строки.

Синтаксис

KEYSTRING (keystring, [delay] )

Параметры

keystring - входная строка
delay - необязательный параметр; задержка в милисекундах между каждым набором символа

Пример

keystring("hello world")

Примечания

Процедура не печатает строку в привычном понимании, а нажимает клавиши соответственно символам входной строки. Инструкция не может использоваться для нажатия несимвольных клавиш. На результат так же влияет текущая раскладка клавиатуры.

ISKEYDOWN

Функция. Возвращает 1 если в момент вызова функции зажата указанная клавиша и 0 - если нет.

Синтаксис

ISKEYDOWN (keycode)

Параметры

keycode - код клавиши

Пример

// проверка нажатия пробела
if ( iskeydown(#space)=1 )
 logwrite("space!")
end_if

// проверка нажатия пробела и клавиши A
if ( (iskeydown(#space)=1) & (iskeydown(#a)=1) )
 logwrite("space and a!")
end_if

Примечания

Этой функцией можно так же проверить состояние кнопок мыши (см. Приложение 1).

GETKBLAYOUT

Функция. Возвращает идентификатор языка ввода (раскладки) в конкретном окне.

Синтаксис

GETKBLAYOUT (hwnd)

Параметры

hwnd - hwnd окна

Пример

// получаем hwnd запущеной программы
$hwnd = wndfind("Блокнот")

// выводим раскладку
print( getkblayout($hwnd) )

Примечания

В современных операционных системах Windows каждое окно хранит свою собственную раскладку.

SETKBLAYOUT

Устанавливает языка ввода (раскладки) в конкретном окне.

Синтаксис

SETKBLAYOUT (hwnd, lang)

Параметры

hwnd - hwnd окна
lang - идентификатор языка ввода

Пример

$hwnd = wndfind("Блокнот")

// английский
setkblayout($hwnd, 1033)

GETKEYSDOWN

Помещает список зажатых в момент вызова клавиш в массив.

Синтаксис

GETKEYSDOWN ($arr)

Параметры

$arr - входной массив

Пример

// пример 1, вывод в лог кодов всех нажатых клавиш
getkeysdown($kvar)

for($i=0, $i < arrsize($kvar))
    print($kvar[$i])
end_cyc

waitms(100)
logclear

// пример 2, анализ нажатых клавиш через switch
// данный пример использует тот факт что $kvar тоже самое что и $kvar[0]
getkeysdown($kvar)

SWITCH($kvar)
CASE(#q)
   print("Q")
CASE(#w)
   print("W")
CASE(#e)
   print("E")
END_SWITCH

waitms(100)

Примечания

При вызове входной массив каждый раз очищается. Нажатые клавиши помещаются в массив по порядку, согласно их кодам (см. Приложение 1). Аналогично iskeydown, поддерживаются как клавиши мыши, так и клавиатуры.


Условия, циклы, подпрограммы

Элементы, делающие программы более "умными", а сценарии более короткими и лаконичными.

Содержание

  • IF ... END_IF
  • ELSE
  • SWITCH ... END_SWITCH
  • FOR ... END_CYC
  • WHILE ... END_CYC
  • SUB ... END_SUB
  • THREAD ... END_THREAD
  • SETTHREAD

IF ... END_IF

Условная конструкция. Выполняет часть сценария в зависимости от значения параметра условия.

Синтаксис

IF (expression )
...
END_IF

Параметры

expression - логическое выражение, при истинности которого выполняется тело условия

Описание

Инструкции, находящиеся между IF и END_IF выполняются в зависимости от значения параметра expression. Если данный параметр после всех вычислений равен 0, то инструкции в теле условия не выполняются. Во всех остальных случаях оно будет исполнено.
Параметр expression может быть представлен, как результат арифмитической или логической операции, а так же результатом выполнения функции. Подробнее об этом написано в вводной части.

Пример

// Простой пример
$var = 5

if($var > 3)
   logwrite("true") // сработает если $var больше 3
end_if

// Пример с комплексным условием
$var = 5

if( ($var > 3) & ($var < 10) )
   logwrite("true") // сработает если $var между 4 и 9
end_if

ELSE

Необязательная часть условной конструкции. Выполняет часть сценария в зависимости от результата проверки условия.

Синтаксис

IF (expression )
...
ELSE
...
END_IF

Описание

Блок ELSE позволяет объявить блок инструкций, которые выполнятся в том и только в том случае, если условие ложно и основной блок не выполнился (см. IF). Блок ELSE описывается прямо в блоке условия между заголовком и END_IF. Блок ELSE доступен для следующих условных конструкций: IF, IF_PICTURE_IN, IF_PIXEL_IN.

Пример

// условие без блока "иначе"
// в случае неверного выражения 5 > 3 ничего не делает
if (5 < 3)
   logwrite("true")
end_if

// тоже самое условие с блоком "иначе"
// в случае неверного выражения 5 > 3 выдаст сообщение "false"
if (5 < 3)
   logwrite("true")
else
   logwrite("false")
end_if

SWITCH ... END_SWITCH

Условная конструкция, состоящая из множества условий. Выполняет часть сценария в зависимости от значения параметра переключателя.

Синтаксис

SWITCH (var )
CASE (result1 )
...
CASE (result2 )
...
[DEFAULT]
[...]
END_SWITCH

Описание

Так называемый переключатель используется когда нагромождение условий (IF) нецелесообразно и портит читаемость сценария. Переключатель анализирует входное значение var и в зависимости от него выполняет часть сценария, находящегося после блоке case с соответствующим значением. При этом, все параметры указанных инструкций могут быть представлены как числом, так и переменной. Необязательный блок DEFAULT выполняется в случае, когда ни один CASE не подошел под текущее значение переключателя.

Пример

// генерируем случайное значение
$var = rnd(1,5)
print("$var = ", $var)

// анализируем значение переменной
// при этом явно обрабатываем случаи 1,2 и 3 и неявно в блоке по умолчанию

switch($var)
case(1)
   print("one")
case(2)
   print("two")
case(3)
   print("three")
default
   print("smth else")
end_switch

FOR ... END_CYC

Цикл в параметром.

Синтаксис

FOR ($var [=value], expression, [step] )
...
END_CYC

Параметры

$var - переменная, которая будет наращиваться на значение step после каждой итерации цикла (параметр цикла)
value - необязательный параметр; начальное значение значение параметра цикла
expression - логическое выражение, при истинности которого выполняется тело цикла
step - необязательный параметр; значение шага, на которое каждую итерацию увеличивается переменная

Описание

Тело цикла (инструкции, находящиеся между FOR и END_CYC) выполняется в случае истинности выражения expression, при этом, закончив выполнение тела, управление снова проверяет истинность выражения и если оно по прежнему истинно, тело цикла выполняется снова. Помимо этого, каждый повтор выполнения тела цикла (итерацию) параметр $var увеличивает свое значение на step. Цикл завершится, когда выражение expression будет ложным.
Если переменная $var до выполнения цикла уже была инициализирована (в том числе в этом же цикле на прошлом прогоне скрипта), то цикл начнется с использованием текущего значения переменной. Если это "новая" переменная, она будет инициализирована нулем. Если указано начальное значение value, то переменной присвоится его значение.
Параметр step по умолчанию равен 1.

Пример

// простой пример с минимумом данных
for($var, $var < 5)
  logwrite("var: ", $var)
end_cyc

// с инициализацией параметра
for($var=5, $var < 10)
  logwrite("var: ", $var)
end_cyc

// с инициализацией параметра и заданным шагом
for($var=10, $var < 100, 10)
  logwrite("var: ", $var)
end_cyc

// пример с вложенным циклом
FOR($x, $x < 3)
  FOR($y, $y < 3)
    print($x, ":", $y)
  END_CYC
END_CYC

// пример с комплексным условием
$y=0

FOR($x, ($y < 10)&($x < 10) )
   print("x:",$x," y:",$y)
   inc($y, 5)
END_CYC

WHILE ... END_CYC

Цикл с предусловием.

Синтаксис

WHILE (expression)
...
END_CYC

Параметры

expression - логическое выражение, при истинности которого выполняется тело цикла

Описание

Упрощенная версия цикла FOR, без параметра и шага. Действует аналогично и просто проверяет условие expression. При этом, существует опасность "зацикливания". По этому важно предусмотреть ситуацию, при которой expression станет ложным и цикл завершится.

Пример

// пример простого цикла
$var = 1

while($var < 5)
   logwrite("var: ", $var)
   inc($var)
end_cyc

// пример цикла с комплексным условием
$x=0
$y=0

while( ($x < 5) & ($y < 5) )
   print($x, ",", $y)
   inc($x, 1)
   inc($y, 2)
end_cyc

print("end: ", $x,",",$y)

SUB ... END_SUB

Описывает подпрограмму.

Синтаксис

SUB (sub_name, [$par1, $par2, ...] )
...
END_SUB

Параметры

sub_name - имя подпрограммы
$par1, $par2, ... - необязательные параметры подпрограммы

Описание

Подпрограмма - это последовательность действий, объединенная в блок. Подпрограмма обязательно имеет собственное уникальное имя sub_name и необязательно набор параметров $par1, $par2,.... Тело подпрограммы будет вызвано только в том случае, если в сценарии будет указано ее имя sub_name (см. пример). Подпрограмму можно описать в любом месте сценария. Однако, описание подпрограммы должно быть раньше (выше) любого из ее вызовов. Поэтому рекомендуется описывать подпрограммы сразу в начале сценария. Хорошим тоном считается вынесение тел подпрограмм в отдельный внешний файл, подключаемый затем через директиву #include.
Параметры, описанные в заголовке подпрограммы после ее имени, доступны в теле подпрограммы как переменные. Для вызова подпрограммы необходимо написать ее имя в сценарии вместе со всеми параметрами. Очень важно чтобы количество параметров в описании и в вызове совпадало. После выполнения подпрограммы, сценарий продолжится с момента вызова подпрограммы. Локальные переменные подпрограммы (параметры) при этом будут уничтожены. Вызов подпрограммы без параметров все равно должен включать в себя пустые скобки ().

Пример

// пример 1. описание и вызов подрограммы без параметров

// описание подпрограммы без параметров
sub(mysub)
 for($i, $i<3)
   print("flood ", $i)
 end_cyc
end_sub

// вызов подпрограммы
mysub()

// пример 2. подпрограмма умножения двух случайных числел
sub(mult, $par1, $par2)
  print("par1: ", $par1)
  print("par2: ", $par2)
  print("par1 * par2 = ", $par1 * $par2)
end_sub

// вызов подпрограммы (три раза)
for($i, $i < 3)
  mult(rnd(1,5), rnd(1,5))
end_cyc

// пример 3. подпрограмма приветствия (пример со строкой)
sub(sayhello, $name)
  print("Hello, ", $name)
end_sub

sayhello("John")

THREAD ... END_THREAD

Описывает поток.

Синтаксис

THREAD (thread_name, [init_state] )
...
END_THREAD

Параметры

thread_name - имя потока
init_state - необязательный параметр; начальное состояние потока (1 - запуск сразу, 0 - на паузе)

Описание

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

  • два состояния: приостановленное и рабочее; в рабочем состоянии выполняется тело потока, в приостановленном соответственно нет
  • собственный таймер, обрабатывающий задержки независимо от состояния сценария и других потоков; задержки, вызванные работой команд так же не влияют на основной сценарий и другие потоки
  • собственные подпрограммы; при необходимости использования внутри потока подпрограмму, она описывается и вызывается внутри тела потока; внешний вызов и описание подпрограмм не в рамках одного тела потока не допускается и ведет к ошибкам
  • все потоки и сценарий работают в одной области видимости, то есть им одинакого доступны все переменные и графический буфер
  • существует возможность приостанавливать и возобновлять потоки, используя процедуру SETTHREAD.
  • при запуске ("с формы") основного сценария все потоки находятся в состоянии, определенном при их объявлении; при паузе и останове потоки так же соответственно встают на паузу или останавливаются

    Пример

    // Данный простейший пример показывает одновременную работу трех потоков: родительского и двух дочерних.
// Все они "тикают" с разным интервалом не мешая друг другу.
//-----------------------------------------
// Описание первого потока
thread(t1)
   print("thr #1 tic-tak")
   wait(5)
end_thread

//-----------------------------------------
// Описание второго потока
thread(t2)
   print("thr #2 tic-tak")
   wait(3)
end_thread

//-----------------------------------------
// Основной сценарий
print("Main thr tic-tak")
wait(10)

    SETTHREAD

    Меняет состояние потока.

    Управление потоком

    SETTHREAD (thread_name, state)

    Параметры

    thread_name - имя потока
    state - задаваемое состояние

    Значения state

    0 - поток ставится на паузу
    1 - поток снимается с паузы (продолжает выполнение с места, где был остановлен паузой)
    2 - поток ставится на паузу, при этом при дальнейшем снятии с паузы он начинает выполняться с начала, независимо от того, на какой инструкции тела он был остановлен

    Пример

    //-----------------------------------------
// Описание остановленного потока
thread(t1, 0)
   print("thr #1 tic-tak")
   wait(5)
end_thread
//-----------------------------------------

// Снятие потока с паузы
setthread(t1, 1)
wait(10)


Процедуры и функции для работы с экраном

Экран состоит представляет собой прямоугольник, состоящий из точек-пикселей. Размеры (ширина и высота) этого прямоугольника обусловлены количеством пикселей в вертикальной и горизонтальной строках. Каждый пиксель на экране имеет свои координаты. В общем все как на уроке геометрии.
В левом верхнем углу находится пиксель с координатами 0,0. Соответственно, если у вас разрешение экрана 800х600, то нижний правый пиксель будет иметь координаты 799х599.
Помимо координат, каждый пиксель имеет свой собственный цвет свечения, образуемый тремя каналами - красным, зеленым и синим. Эти три канала для удобства кодируются в одно число. Это число и представляет собой цвет пикселя.
Для гибкости и удобства кликер работает не с живым экраном, а с его снимком, помещенным в буфер анализа. Это позволяет во первых ускорить работу, во вторых - наделить программу неким подобием зрительной памяти. Одновременно в памяти может храниться только один снимок экрана.

Содержание

  • GETSCREEN
  • PXL
  • PXLCOUNT
  • PXLXOR
  • PXLCRC
  • PXLREPLACE
  • IF_PIXEL_IN ... END_IF
  • IF_PICTURE_IN... END_IF
  • SCANPICTURE
  • SCANPXL
  • SCREENSHOT
  • SCREENSHOTEX
  • SCREENSHOTFIX
  • COLORMODE
  • COLORGEN
  • COLORR, COLORG, COLORB

GETSCREEN

Делает снимок экрана и помещает его в буфер анализа программы.

Синтаксис

GETSCREEN ([x1, y1, x2, y2] )

Параметры

x1, y1, x2, y2 - параметры, описывающие область экрана; необязательны

Описание

Данная процедура помещает снимок экрана в буфер программы. Затем, из этого буфера берут данные все графические функции, вызываемые в сценарии. Соответственно, в случае когда необходимо обновить хранящееся в памяти состояние экрана, нужно вызвать getscreen() еще раз.
В случае, если указаны параметры, описывающие область, будет обновлена только соответствующая область в графическом буфере. На некоторых системах это позволяет ускорить выполнение данной инструкции.

PXL

Функция. Возвращает код цвета для заданного пикселя.

Синтаксис

PXL (x, y)

Параметры

x, y - координаты пикселя

Пример

$clr = PXL(50,50)

PXLCOUNT

Функция. Производит подсчет количества пикселей заданного цвета в прямоугольной области буфера анализа.

Синтаксис

PXLCOUNT (x, y, x2, y2, color)

Параметры

x, y - числовые координаты левого верхнего угла области поиска
x2, y2 - числовые координаты правого нижнего угла области поиска
color - код цвета

Пример
GETSCREEN
$count = PXLCOUNT (10,20, 100, 40, 255)
logwrite("pixels: ", $count)

Примечания

Если ни одного пикселя не будет найдено, функция вернет ноль

PXLXOR

Функция. Производит подсчет контрольной суммы пикселей в заданной области, складывая их цвета оператором XOR.

Синтаксис

PXLXOR (x, y, x2, y2)

Параметры

x, y - числовые координаты левого верхнего угла области поиска
x2, y2 - числовые координаты правого нижнего угла области поиска

Пример
GETSCREEN
$count = PXLXOR (10,20, 100, 40)
logwrite("Hash: ", $count)

Примечания

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

PXLCRC

Функция. Производит подсчет контрольной суммы пикселей в заданной области, используя алгоритм CRC32.

Синтаксис

PXLCRC (x, y, x2, y2)

Параметры

x, y - числовые координаты левого верхнего угла области поиска
x2, y2 - числовые координаты правого нижнего угла области поиска

Пример
GETSCREEN
$count = PXLCRC (10,20, 100, 40)
logwrite("Hash: ", $count)

Примечания

Более актуальный метод подсчета хеша для области экрана. Лишен недостатков PXLXOR(), хотя работает примерно в два раза медленнее

PXLREPLACE

Производит замену в области графического буфера пикселей одного цвета на пиксели другого цвета.

Синтаксис

PXLREPLACE (x, y, x2, y2, color, newcolor)

Параметры

x, y - числовые координаты левого верхнего угла области
x2, y2 - числовые координаты правого нижнего угла области
color - заменяемый цвет
newcolor - новый цвет

Пример
GETSCREEN
PXLREPLACE(10,20, 100, 40, -1, 255)
screenshot

Примечания

Чтобы заменялись пиксели любого цвета, параметр color должен быть равен -1

IF_PIXEL_IN ... END_IF

Производит поиск пикселя заданного цвета в прямоугольной области буфера анализа.

Синтаксис

IF_PIXEL_IN (x, y, x2, y2, color1, ...)
...
END_IF

Параметры

x, y - числовые координаты левого верхнего угла области поиска
x2, y2 - числовые координаты правого нижнего угла области поиска
color1, ... - цвета, поиск которых будет осуществляться

Возвращаемые параметры

$_return1 - x координата найденного пикселя
$_return2 - y координата

Пример
getscreen

// поиск красного пикселя
IF_PIXEL_IN (10,20, 100, 40, 255)
 lclick($_return1, $_return2)
END_IF

// поиск красного или зеленого пикселя
IF_PIXEL_IN (10,20, 100, 40, 255, 65280)
 lclick($_return1, $_return2)
END_IF

Примечания

Как только первый попавшийся пиксель будет найден, инструкция вернет его координаты в переменные $_return1, $_return2 и прекратит анализ
Добавление каждого цвета увеличивает длительность анализа на 100%

IF_PICTURE_IN ... END_IF

Производит поиск изображения в прямоугольной области буфера анализа.

Синтаксис

IF_PICTURE_IN (x, y, x2, y2, file, [bgcolor], [currency] )
...
END_IF

Параметры

x, y - числовые координаты левого верхнего угла области поиска
x2, y2 - числовые координаты правого нижнего угла области поиска
file - bmp файл, поиск которого будет осуществляться
bgcolor - необязательный параметр; игнорируемый цвет фона входного изображения
currency - необязательный параметр; точность поиска в процентах (1..100)

Возвращаемые параметры

$_return1 - x координата найденного изображения
$_return2 - y координата -//-

Пример
getscreen

IF_PICTURE_IN (10,20, 300, 300, "somefile.bmp")
 move($_return1, $_return2)
END_IF

Примечания

Работает аналогично IF_PIXEL_IN. Как только первый попавшийся участок будет найден, инструкция вернет его координаты в переменные $_return1, $_return2 (координаты верхнего левого угла) и прекратит анализ.
Для того что бы участок признался подходящим, необходимо 100% соответствие пикселей bmp-файла и текущего снимка экрана. Так же можно задать цвет фона изображения, который не будет учитываться при поиске на экране. Если цвет фона не задан, изображение ищется с учетом всех пикселей.
Можно задать не 100% совпадение. Для этого укажите в параметре currency необходимую точность. Этот параметр определяет количество несовпавших пикселей, которые будут проигнорированы при анализе. Чем ниже значение точности, тем дольше идет поиск.
Если параметр currency не задан, по умолчанию он равен 100. Если параметр bgcolor не задан, по умолчанию он равен -1. Если есть необходимость задать точность, не задавая фон, сделайте bgcolor равным -1.
Входные файлы для анализа должны находиться в директории проекта, быть формта BMP и иметь стандартную разрядность 24 бита. В случае использования цветокоррекции, входной файл должен быть уже откорректирован. Чтобы добиться этого результата, сохраните скриншот формата bmp после вызова colormode(), затем вырежьте нужный участок картинки в графическом редакторе и сохраните как bmp.

SCANPICTURE

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

Синтаксис

SCANPICTURE ($var, x, y, x2, y2, file, [bgcolor], [currency] )

Параметры

$var - массив
x, y - числовые координаты левого верхнего угла области поиска
x2, y2 - числовые координаты правого нижнего угла области поиска
file - bmp файл, поиск которого будет осуществляться
bgcolor - необязательный параметр; игнорируемый цвет фона входного изображения
currency - необязательный параметр; точность поиска в процентах (1..100)

Пример
getscreen

// поиск изображения pict.bmp в области 0,0 - 1250,959
scanpicture($var, 0,0, 1250,959, "pict.bmp")

// вывод массива, содержащего результаты поиска
while (arrsize($var) > 0)
  $y = arrpop($var)
  $x = arrpop($var)
  print($x,":", $y)
end_cyc

Примечания

Основные параметры и тонкости работы аналогичны IF_PICTURE_IN
Результатом работы является массив $var, в который добавляются координаты найденных экземпляров изображения. Таким образом, координаты первого найденного изображения будут лежать в $var[0] и $var[1] для X и Y соответственно. Для второго экземпляра $var[2] и $var[3] и т.д.
SCANPICTURE и SCANPXL используют в своей работе массивы. Если вам не понятна работа с массивами, то прочтите учебную статью на официальном форуме в разделе "Учебные статьи".

SCANPXL

Производит поиск пикселей заданного цвета в прямоугольной области буфера анализа.

Синтаксис

SCANPXL ($var, x, y, x2, y2, color)

Параметры

$var - принимающий массив
x, y - числовые координаты левого верхнего угла области поиска
x2, y2 - числовые координаты правого нижнего угла области поиска
color - цвет, поиск которого будет осуществляться

Пример
getscreen

// поиск всех красный (255) пикселей в области 0,0 - 1250,959
scanpxl($var, 0,0, 1250,959, 255)

// вывод массива, содержащего результаты поиска
while (arrsize($var) > 0)
  $y = arrpop($var)
  $x = arrpop($var)
  print($x,":", $y)
end_cyc

Примечания

Результатом работы является массив $var, в который добавляются координаты найденных пикселей заданного цвета. Таким образом, координаты первого найденного пикселя будут лежать в $var[0] и $var[1] для X и Y соответственно. Для второго экземпляра $var[2] и $var[3] и т.д.

SCREENSHOT

Сохраняет графический буфер анализа на диск.

Синтаксис

SCREENSHOT ([pref] )

Параметры

pref - необязательный параметр; префикс для названия файла

Пример
getscreen

// будут созданы скриншоты error0000.bmp, error0001.bmp, error0002.bmp,
screenshot("error")
screenshot("error")
screenshot("error")

// будет создан скриншот shot0000.bmp
screenshot

Примечания

Скриншот экрана помещается в директорию текущено скрипта в каталог screens и ему присваивается имя вида pref0000.bmp. При этом номер 0000 будет наращиваться по мере необходимости
Если параметр pref опущен, он считается равным "shot". В случае использования оконного режима будет сделан скриншот только рабочей области.

SCREENSHOTEX

Сохраняет часть графического буфера анализа на диск.

Синтаксис

SCREENSHOTEX (x1, y1, x2, y2, [pref], [format] )

Параметры

x1, y1, x2, y2 - четыре координаты, описывающие сохраняемую область буфера
pref - необязательный параметр; префикс названия
format - необязательный параметр; тип файла (сжатие): 0 - bmp; 1 - jpeg

Пример
getscreen

// будет создан скриншот небольшого кусочка левого верхнего угла
screenshotex(10,10, 50,50)

Примечания

Скриншот экрана помещается в директорию текущено скрипта в каталог screens и ему присваивается имя вида pref0000.bmp. При этом номер 0000 будет наращиваться по мере необходимости.
Если параметр pref опущен, он считается равным "shot". В случае использования оконного режима скриншот будет вырезан из привязанной рабочей области.

SCREENSHOTFIX

Сохраняет часть графического буфера анализа на диск в конкретный файл.

Синтаксис

SCREENSHOTFIX (x1, y1, x2, y2, path, [format] )

Параметры

x1, y1, x2, y2 - четыре координаты, описывающие сохраняемую область буфера
path - путь, по которому будет сохранен скриншот
format - необязательный параметр; тип файла (сжатие): 0 - bmp; 1 - jpeg

Пример
getscreen

// будет создан скриншот небольшого кусочка левого верхнего угла
screenshotfix(10,10, 50,50, "D:\file.bmp")

Примечания

В отличие от SCREENSHOTEX, файл сохраняется в конкретное место по относительному или абсолютному пути, каждый раз перезаписываясь. Расширение файла желательно задавать исходя из параметра format (по умолчанию 0).

COLORMODE

Применяет цветокоррекцию к текущему снимку экрана.

Синтаксис

COLORMODE (mode, [x1, y1, x2, y2] )

Параметры

mode - число, соответствующее режиму коррекции
x1, y1, x2, y2 - область снимка экрана, к которой будет применена коррекция

Описаие

Процедура изменяет текущий снимок экрана, применяя к нему фильтр, снижающий количество цветов в палитре. В основной справке есть статья посвещенная цветокоррекции.
Есть возможность указать отдельную область для применения фильтра. Стоит учитывать, что на его применение так же затрачивается время, поэтому если нет необходимости менять весь снимок, указание конкретной области позволит выиграть немного времени в процессе выполнения сценария. Если область не описана, коррекция применяется ко всему экрану
Вызов COLORMODE(0) не имеет смысла. Поддерживается одностороннее увеличение режима (1, 2, 3..) без необходимости повторного вызова GETSCREEN. Обратно увеличить количество цветов невозможно. Новый "чистый" снимок экрана получается новым вызовом GETSCREEN

Таблица значений mode

mode | Макс. цветов
0 | 16 777 216
1 | 2 097 152
2 | 262 144
3 | 32 768
4 | 4 096
5 | 512
6 | 64
7 | 8
8 | 2

COLORGEN

Функция. Генерирует код цвета путем соединения значений красного, зеленого и синего каналов.

Синтаксис

COLORGEN (red, green, blue)

Параметры

red - значение красного канала (0..255) green - значение зеленого канала (0..255) blue - значение синего канала (0..255)

Пример
// создаем цвет
$c = colorgen(234,34,65)

// и разбираем его по каналам
print("red: ", colorR($c) ) // красный
print("grn: ", colorG($c) ) // зеленый
print("blu: ", colorB($c) ) // синий

COLORR, COLORG, COLORB

Функции. Извлекают из цвета значение красного (зеленого) (синего) канала.

Синтаксис

COLORR (color)
COLORG (color)
COLORB (color)

Параметры

color - код цвета

Пример
// хватаем произвольный пиксель с экрана
getscreen
$p = pxl(rnd(0,300), rnd(0,300))

// и разбираем его по цветам
print("R:", colorR($p) )
print("G:", colorG($p) )
print("B:", colorB($p) )


Процедуры и функции интерфейса

Инструкции, предназначенные для сигнализирования пользователю.

Содержание

  • LOGWRITE, PRINT
  • LOGCLEAR
  • LOGSHOW
  • SOUND
  • BEEP
  • HINTPOPUP

LOGWRITE (PRINT)

Выводит сообщение в окно лога программы.

Синтаксис

LOGWRITE (str, ...)

Параметры

str - строка сообщения

Пример

$var = 5

// вывод составного сообщения (коментарий и значение переменной)
LOGWRITE("Переменная $var = ", $var)

Примечания

Данная инструкция имеет псевдоним PRINT, синтаксис аналогичен. Число параметров данной инструкции неограниченно. В случае указания директивы #logfile, помимо окна лога, сообщение записывается в файл %папка_проекта%/log.txt

LOGCLEAR

Очищает окно лога программы.

Синтаксис

LOGCLEAR ()

Параметры

отсутствуют

LOGSHOW

Скрывает либо отображает окно лога программы.

Синтаксис

LOGSHOW (show, [x, y] )

Параметры

show - флаг отображения; если = 1, окно будет отображено, если = 0, то скрыто
x, y - необязательные параметры; позиция окна лога на экране

SOUND

Воспроизводит звуковой *.wav файл.

Синтаксис

SOUND (file)

Параметры

file - путь к файлу

BEEP

Воспроизводит звуковой сигнал через системный динамик (спикер).

Синтаксис

BEEP (freq, [time] )

Параметры

freq - высота воспроизводимого звука
time - необязательный параметр; продолжительность воспроизведения звука в миллисекундах

Пример

// Queen - Another One Bites The Dust ( lol :D )

beep(110,170)
waitms(10)
beep(100,140)
waitms(190)

for($i,$i<2)
beep(90,200)
waitms(300)
beep(90,200)
waitms(300)
beep(90,200)
waitms(500)

beep(90,140)
waitms(60)
beep(90,140)
waitms(60)
beep(95,120)
waitms(75)

beep(90,120)
waitms(60)
beep(95,140)
waitms(105)

beep(90,170)
waitms(10)
beep(110,150)
waitms(500)

end_cyc

Примечания

Данная процедура задерживает сценарий на время проигрывания сигнала. По умолчанию time = 333 (треть секунды).

HINTPOPUP

Выводит всплывающее сообщение в системный трей.

Синтаксис

HINTPOPUP (message, [title] )

Параметры

message - строка сообщения
title - необязательный параметр; заголовок сообщения


Процедуры и функции управления работой сценария

Инструкции для управления сценарием, плагинами и пр.

Содержание

  • WAIT
  • WAITMS
  • GOTO
  • CALL
  • EXECUTE
  • INPUTBOX
  • DIALOGBOX
  • RADIOBOX
  • HALT
  • READMEM
  • WRITEMEM
  • GETFILELIST
  • GETDIRLIST

WAIT

Приостанавливает выполнение сценария на несколько секунд.

Синтаксис

WAIT (delay)

Параметры

delay - числовое значение, обозначающее длину задержки в секундах между строками сценария

Примечания

Задержка имеет некоторую неустранимую погрешность, зависящую от некоторых факторов. На практике, погрешность обычно не превышает 5 мс (0,005 сек.)
Допускается указание дробного аргумента. Так, задержка 1.25 будет означать одну секунду и 250 милисекунд.

WAITMS

Приостанавливает выполнение сценария на несколько милисекунд.

Синтаксис

WAITMS (delay)

Параметры

delay - числовое значение, обозначающее длину задержки в миллисекундах между строками сценария

Примечания

В одной секунде 1000 миллисекунд
Задержка имеет некоторую неустранимую погрешность, зависящую от некоторых факторов. На практике, погрешность обычно не превышает 5 мс (0,005 сек.)

GOTO

Переводит интерпретацию на строку с меткой.

Синтаксис

GOTO (label)

Параметры

label - имя метки

Пример

goto(skip)

logwrite("nope") // пропускается
skip:
logwrite("yea")  // выполнится

Примечания

Переход на метку допускается в рамках блоков одного уровня вложенности. Текстовая метка задается без кавычек, в тексте скрипта после текстовой метки обязательно должно идти двоеточие ":", как в примере. Метка занимает всю строку

CALL

Вызывает плагин.

Синтаксис

CALL ("filename", par1, ...)

Параметры

filename - имя файла плагина относительно директории %Clickermann%/plugins
par1, ... - целочисленные параметры

Пример

call("plugin_example.dll", 5, 2, 3)

logwrite($_return1)

Примечания

Рекомендуется ознакомиться со статьей "Плагины" из основной справки. Кликер ждет момента как отработки плагина и только потом продолжает работу. Плагин возвращает значение в переменную $_return1.

EXECUTE

Вызывает внешний файл или консолькую команду.

Синтаксис

EXECUTE (filename, [param] )

Параметры

filename - имя файла
param - необязательный параметр; строка параметров

Пример

// вызываем батник
execute("some.bat")

// пингуем яндекс
execute("ping", "ya.ru -n 10")

Примечания

Инструкция вызывает произвольный внешний файл. При этом запуск обрабатывается согласно ассоциациям, прописанным в системе. Дает схожий результат с "Пуск" -> "Выполнить" (Win + R). Допускается как задание относительного пути к файлу, так и абсолютного. Инструкция сразу же возвращает управление в программу без ожидания независимо от времени загрузки внешнего файла и его обработчика.

INPUTBOX

Функция. Выводит диалоговое окно для ввода строки.

Синтаксис

INPUTBOX (message, default, [delay] )

Параметры

message - сообщение диалогового окна
default - значение по умолчанию
delay - необязательный параметр; таймаут

Пример

$str = inputbox("text", "hello")

print($str)

Примечания

Диалоговое окно находится на экране delay секунд. Если за это время пользователь не начал ввод или не нажал одну из кнопок, то функция вернет строку по умолчанию - default. Если пользователь нажал отмену, то будет возвращена пустая строка. По умолчанию параметр delay равен 5. Возможно использовать кнопки Enter для ввода и Esc для отмены

DIALOGBOX

Функция. Выводит диалоговое окно с кнопками.

Синтаксис

DIALOGBOX (message, buttons, [icon] )

Параметры

message - сообщение диалогового окна
buttons - код набора кнопок
icon - код иконки

Коды наборов кнопок

Код | Кнопка
0 | OK
1 | OK, CANCEL
2 | ABORT, RETRY, IGNORE
3 | YES, NO, CANCEL
4 | YES, NO
5 | RETRY, CANCEL

Коды иконок

Код | Кнопка
0 | Без иконки
1 | Ошибка
2 | Вопрос
3 | Внимание
4 | Информирование

Возвращаемые коды

Код | Кнопка
1 | OK
2 | CANCEL
3 | ABORT
4 | RETRY
5 | IGNORE
6 | YES
7 | NO

Пример

// Выводит диалоговое окно с двумя кнопками - Yes, No
$mr = dialogbox("Yes or No?", 4)

if ($mr = 6)
  print("Yes")
else
  print("No")
end_if

Примечания

Функция возвращает код той кнопки, которую нажал пользователь. Выполнение скрипта будет остановлено до тех пор, пока какая-либо из кнопок не будет нажата. По умолчанию параметр icon равен 0.

RADIOBOX

Функция. Выводит диалоговое окно с переключателями.

Синтаксис

RADIOBOX (message, radio1, ...)

Параметры

message - сообщение диалогового окна
radio1 - строка, описывающая переключатель

Пример

$res = radiobox("Выберете пункт", "1 Мясо", "2 Птица", "3 Рыба")

if ($res > 0)
  print("Вы выбрали: ", $res)
else
  print("Вы ничего не выбрали")
end_if

halt

Примечания

Число параметров данной инструкции неограниченно. Функция возвращает порядковый номер выбранного элемента. Выполнение скрипта будет остановлено до тех пор, пока не будет нажаты OK или CANCEL. В случае нажатия CANCEL, функция вернет 0.

HALT

Полностью останавливает выполнение сценария.

Синтаксис

HALT ([close] )

Параметры

close - необязательный параметр; если 1, то приложение закрывается целиком

READMEM

Функция. Извлекает целое значение из памяти процесса.

Синтаксис

READMEM (pid, addr, [size] )

Параметры

pid - идентификатор процесса
addr - строка, адрес памяти
size - тип значения (1,2,4,8)

Пример

$var = readmem(2080, 0x0006F2B7)
logwrite( $var )

Примечания

Идентификатор процесса pid можно узнать в диспетчере задач либо в самом кликере: в области "Оконный режим" и через функцию hgetpid()
Адрес представляет собой обычное целое число в десятичной или шестнадцатеричной записи. Параметр size указывает на размер целого значения: 1, 2, 4 или 8 байт. Если данный параметр опущен, то он принимается за 4

WRITEMEM

Помещает целое значение в память процесса.

Синтаксис

WRITEMEM (pid, addr, value, [size] )

Параметры

pid - идентификатор процесса
addr - адрес памяти
value - численное значение
size - тип значения (1,2,4,8)

Пример

writemem(2080, 0x0006F2B7, 5000)

Примечания

Идентификатор процесса pid можно узнать в диспетчере задач либо в самом кликере: в области "Оконный режим" и через функцию hgetpid()
Адрес представляет собой обычное целое число в десятичной или шестнадцатеричной записи. Параметр size указывает на размер целого значения: 1, 2, 4 или 8 байт. Если данный параметр опущен, то он принимается за 4

GETFILELIST

Помещает в массив список файлов, найденных согласно маске.

Синтаксис

GETFILELIST ($arr, [dir] )

Параметры

$arr - принимающий массив
dir - адрес, содержащий маску выборки

Пример

// пример1 вывод всех файлов из C:
getfilelist($arr, "C:\*.*")

for($i=0, $i< arrsize($arr))
   print($arr[$i])
end_cyc

halt

// пример2 вывод файлов sys из C:
getfilelist($arr, "C:\*.sys")

for($i=0, $i< arrsize($arr))
   print($arr[$i])
end_cyc

halt

Примечания

Путь должен обязательно содержать маску. По умолчанию путь равен "*".

GETDIRLIST

Помещает в массив список каталогов, найденных согласно маске.

Синтаксис

GETDIRLIST ($arr, [dir] )

Параметры

$arr - принимающий массив
dir - необязательный параметр; адрес, содержащий маску выборки

Пример

// вывод всех каталогов на C:
getdirlist($arr, "C:\*")

for($i=0, $i< arrsize($arr))
   print($arr[$i])
end_cyc

halt

Примечания

Путь должен обязательно содержать маску. По умолчанию путь равен "*".


Процедуры и функции WinAPI

В этом разделе описаны процедуры и функции, работающие с окнами Windows и их элементами. У каждого элемента есть свой уникальный идентификатор - hwnd, представленный числом. Зная его, можно обратиться к конкретному окну или его элементу.

Содержание

  • HGET
  • HSET
  • HGETPID
  • HGETTEXT
  • HSETTEXT
  • WNDFIND
  • WNDPOS
  • WNDSIZE
  • WNDGETINFO
  • WNDSETINFO
  • WNDSTATE
  • WNDBUMP
  • SENDMESSAGE, POSTMESSAGE
  • GETMESSAGE

HGET

Функция. Возвращает hwnd для элемента по заданным координатам.

Синтаксис

HGET (x, y)

Параметры

x, y - координаты пикселя, принадлежащего элементу

Пример

// получение hwnd элемента
$h = hget(44, 1010)

// вывод текста на элементе
print( hgettext($h) )

HSET

Устанавливает новый рабочий элемент для оконного режима кликера.

Синтаксис

HSET (hwnd, state)

Параметры

hwnd - hwnd элемента
state - состояние оконного режима (1 - вкл. 0 - выкл.)

Пример

// получение hwnd элемента
$h = hget(44, 1010)

// включение оконного режима, "нацеленного" на этот элемент
hset($h, 1)

Примечания

Если вы хотите просто сменить рабочий элемент - нет необходимости выключать оконный режим флагом 0. Просто задаете новый первым параметром.

HGETPID

Функция. Возвращает pid идентификатор родительского процесса по hwnd дочернего окна.

Синтаксис

HGETPID (hwnd)

Параметры

hwnd - hwnd элемента

Пример

// PID кликера
$h = hgetpid($_hwnd_self)

print( $h )

HGETTEXT

Функция. Возвращает текст на элементах управления в окнах Windows.

Синтаксис

HGETTEXT (hwnd)

Параметры

hwnd - hwnd элемента

Пример

// Пример 1
$h = hget(44,1010)

print( hgettext($h)   )

// Пример 2 (через строковую переменную)
$h = hget(44,1010)
$text = hgettext($h)

print( $text )

HSETTEXT

Устанавливает текст на элементах управления в окнах Windows.

Синтаксис

HSETTEXT (hwnd, text)

Параметры

hwnd - hwnd элемента
text - текст

Пример

$h = hget(44,1010)

hsettext($h, "my text")

WNDFIND

Функция. Возвращает HWND окна с заданным заголовком.

Синтаксис

WNDFIND (title, [begin] )

Параметры

title - заголовок окна либо его часть
begin - необязательный параметр; флаг сообщает о том что строка title может находиться ТОЛЬКО в начале заголовка

Пример

// скрипт найдет окно с заголовком, содержащим "Блокнот"
// и поместит его в левый верхний угол (с отступом 10 пикселей)
wndpos( wndfind("Блокнот"), 10, 10)

// скрипт найдет окно с заголовком, содержащим "Блокнот"
// и переименует его в "Калькулятор"
hsettext( wndfind("Блокнот"), "Калькулятор")

Примечания

Чем полнее будет указан заголовок, тем меньше шанс что функция "схватит" не то окно. Если функция не найдет окна, удовлетворяющего условиям, она вернет 0. Данная функция не подходит для поиска отдельных элементов окон (кнопки, поля, надписи).

WNDPOS

Помещает окно на экране в указанные координаты.

Синтаксис

WNDPOS (hwnd, x, y)

Параметры

hwnd - HWND окна
x, y - экранные координаты

Пример

// скрипт найдет окно с заголовком, содержащим "Блокнот"
// и поместит его в левый верхний угол 10:10
wndpos( wndfind("Блокнот"), 10, 10)

WNDSIZE

Задает размер окна.

Синтаксис

WNDSIZE (hwnd, w, h)

Параметры

hwnd - HWND окна
w, h - ширина, высота окна

Пример

// скрипт найдет окно с заголовком, содержащим "Блокнот"
// и изменит его размер на квадрат 300 на 300
wndsize( wndfind("Блокнот"), 300, 300)

Примечания

Уменьшить до одного пикселя окно не получится, так как будут "мешаться" иконки и пара букв из заголовка

WNDGETINFO

Получает информацию об окне и записывает ее в указанные переменные.

Синтаксис

WNDGETINFO (hwnd, $var1, $var2, $var3, $var4)

Параметры

hwnd - HWND окна
$var1 - X координата окна
$var2 - Y координата окна
$var3 - ширина окна
$var4 - высота окна

Пример

см. WNDSETINFO

WNDSETINFO

Обновляет информацию об окне.

Синтаксис

WNDSETINFO (hwnd, $var1, $var2, $var3, $var4)

Параметры

hwnd - HWND окна
$var1 - X координата
$var2 - Y координата
$var3 - ширина
$var4 - высота

Пример

// Забавляемся с калькулятором
$hwnd = wndfind("Калькулятор")

// получаем информацию
wndgetinfo($hwnd, $var1, $var2, $var3, $var4)

// перезаписываем размер окна
$var3 = 100
$var4 = 100

// обновляем информацию
wndsetinfo($hwnd, $var1, $var2, $var3, $var4)

WNDSTATE

Сворачивает (разворачивает) окно.

Синтаксис

WNDSTATE (hwnd, state)

Параметры

hwnd - HWND окна
state - состояние (0 - свернуто, 1 - развернуто)

Пример

// скрипт найдет окно с заголовком, содержащим "Блокнот", и свернет его
wndstate( wndfind("Блокнот"), 0)
wait(1)
// ... а потом развернет
wndstate( wndfind("Блокнот"), 1)
wait(1)

WNDBUMP

Помещает окно на передний план

Синтаксис

WNDBUMP (hwnd)

Параметры

hwnd - HWND окна

SENDMESSAGE, POSTMESSAGE

Посылает окну системное сообщение.

Синтаксис

SENDMESSAGE / POSTMESSAGE (hwnd, message, wParam, lParam)

Параметры

hwnd - HWND окна
message - сообщение окну (*)
wParam, lParam - параметры сообщения

Пример

см. GETMESSAGE

Примечания

Данные процедуры являются фактически обертками для одноименных WinAPI функций. Подробности вы можете найти в MSDN или на многочисленных форумах.
(*) Поскольку у нас нет всех констант "WM_", то параметр message необходимо задавать десятичным числом.

GETMESSAGE

Принимает системное сообщение 1024 (WM_USER), посланное главному окну кликера.

Синтаксис

GETMESSAGE (wParam, lParam, [isnew] )

Параметры

wParam, lParam - переменные под параметры принятого сообщения
isnew - необязательный параметр; переменная под флаг-индикатор нового сообщения

Пример

// поиск главного окна кликера
$h = wndfind("Clickermann")

// отправка сообщения окну кликера
postmessage($h, 1024, 123, 321)

// прием сообщения
getmessage($var1, $var2)
print("wParam:", $var1, "  lParam:", $var2)

Примечания

Данная процедура позволяет принимать ТОЛЬКО сообщения, в которых параметр message = 1024 (см. sendmessage). Процедура позволяет получить параметры только последнего полученного сообщения. Сообщения принимаются только во время выполнения сценария.
В момент получения нового сообщения от сторонней программы флаг isnew становится равен 1. При повторных вызовах процедуры до получения очередного сообщения флаг становится равен 0, однако параметры wParam, lParam сохраняют свои значения.
Идентификатор отлавливаемого сообщения message можно изменить в config.ini (параметр msg_hook).


Приложение 1. Коды клавиш

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

Таблица 1. Виртуальные коды клавиш
Клавиша | Константа | 10-ный код | 16-ный код
Левая кнопка мыши |  | 1 | 0x01
Правая кнопка мыши |  | 2 | 0x02
Средняя кнопка мыши |  | 4 | 0x04
Backspace | #BACKSPACE | 8 | 0x08
Tab | #TAB | 9 | 0x09
Enter | #ENTER | 13 | 0x0D
Shift | #SHIFT | 16 | 0x10
Ctrl | #CTRL | 17 | 0x11
Alt | #ALT | 18 | 0x12
Pause | #PAUSE | 19 | 0x13
CapsLock | #CAPSLOCK | 20 | 0x14
Esc | #ESC | 27 | 0x1B
Пробел | #SPACE | 32 | 0x20
PageUp | #PAGEUP | 33 | 0x21
PageDown | #PAGEDOWN | 34 | 0x22
End | #END | 35 | 0x23
Home | #HOME | 36 | 0x24
стрелка влево | #LEFT | 37 | 0x25
стрелка вверх | #UP | 38 | 0x26
стрелка вправо | #RIGHT | 39 | 0x27
стрелка вниз | #DOWN | 40 | 0x28
Insert | #INSERT | 45 | 0x2D
Delete | #DELETE | 46 | 0x2E
0 | #0 | 48 | 0x30
1 | #1 | 49 | 0x31
2 | #2 | 50 | 0x32
3 | #3 | 51 | 0x33
4 | #4 | 52 | 0x34
5 | #5 | 53 | 0x35
6 | #6 | 54 | 0x36
7 | #7 | 55 | 0x37
8 | #8 | 56 | 0x38
9 | #9 | 57 | 0x39
A | #A | 65 | 0x41
B | #B | 66 | 0x42
C | и так далее | 67 | 0x43
D |  | 68 | 0x44
E |  | 69 | 0x45
F |  | 70 | 0x46
G |  | 71 | 0x47
H |  | 72 | 0x48
I |  | 73 | 0x49
J |  | 74 | 0x4A
K |  | 75 | 0x4B
L |  | 76 | 0x4C
M |  | 77 | 0x4D
N |  | 78 | 0x4E
O |  | 79 | 0x4F
P |  | 80 | 0x50
Q |  | 81 | 0x51
R |  | 82 | 0x52
S |  | 83 | 0x53
T |  | 84 | 0x54
U |  | 85 | 0x55
V |  | 86 | 0x56
W |  | 87 | 0x57
X |  | 88 | 0x58
Y |  | 89 | 0x59
Z | #Z | 90 | 0x5A
левая клавиша Windows | #WIN, #LWIN | 91 | 0x5B
правая клавиша Windows | #RWIN | 92 | 0x5C
клавиша Applications |  | 93 | 0x5D
NumPad 0 |  | 96 | 0x60
NumPad 1 |  | 97 | 0x61
NumPad 2 |  | 98 | 0x62
NumPad 3 |  | 99 | 0x63
NumPad 4 |  | 100 | 0x64
NumPad 5 |  | 101 | 0x65
NumPad 6 |  | 102 | 0x66
NumPad 7 |  | 103 | 0x67
NumPad 8 |  | 104 | 0x68
NumPad 9 |  | 105 | 0x69
NumPad * |  | 106 | 0x6A
NumPad + |  | 107 | 0x6B
NumPad - |  | 109 | 0x6D
NumPad . |  | 110 | 0x6E
NumPad / |  | 111 | 0x6F
F1 | #F1 | 112 | 0x70
F2 | #F2 | 113 | 0x71
F3 | #F3 | 114 | 0x72
F4 | #F4 | 115 | 0x73
F5 | #F5 | 116 | 0x74
F6 | #F6 | 117 | 0x75
F7 | #F7 | 118 | 0x76
F8 | #F8 | 119 | 0x77
F9 | #F9 | 120 | 0x78
F10 | #F10 | 121 | 0x79
F11 | #F11 | 122 | 0x7A
F12 | #F12 | 123 | 0x7B
NumLock | #NUMLOCK | 144 | 0x90
ScrollLock | #SCROLLLOCK | 145 | 0x91
PrintScreen | #PRINTSCREEN | 154 | 0x9A
Meta (wtf?) |  | 157 | 0x9D
; |  | 186 | 0xBA
= |  | 187 | 0xBB
, |  | 188 | 0xBC
- |  | 189 | 0xBD
. |  | 190 | 0xBE
/ |  | 191 | 0xBF
~ |  | 192 | 0xC0
[ |  | 219 | 0xDB
\ |  | 220 | 0xDC
] |  | 221 | 0xDD
' |  | 222 | 0xDE


- Что это такое
- Главное окно
- Редактор сценария
- Менеджер окон
- Привязка к окну
- Режим PS/2
- Плагины
- Цветовосприятие
- Частые вопросы
- История развития
- О программе