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

Основной раздел => Общие вопросы => Topic started by: Johnny on October 26, 2012, 08:57:41 AM

Title: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Johnny on October 26, 2012, 08:57:41 AM
В данной теме предлагается размещать примеры простейших алгоритмов для конкретных задач. Тема призвана облегчить освоение программы новичками

Содержание:
- Поиск пикселя определенного цвета и щелчок по нему мышью (http://crapware.aidf.org/forum/index.php?topic=33.msg224#msg224)
- Запуск блокнота и запись в нем произвольного текста (http://crapware.aidf.org/forum/index.php?topic=33.msg229#msg229)
- WinAPI, работа с окнами через PostMessage (http://crapware.aidf.org/forum/index.php?topic=33.msg562#msg562)
- Привязка к окну (+ красивое рисование в Paint) (http://crapware.aidf.org/forum/index.php?topic=33.msg637#msg637)
- Написание подпрограммы для вычисления даты (http://crapware.aidf.org/forum/index.php?topic=33.msg708#msg708)
- Выполнение действия в разные промежутки времени (http://crapware.aidf.org/forum/index.php?topic=33.msg810#msg810)
- Пример использования функций работы с txt файлами (http://crapware.aidf.org/forum/index.php?topic=33.msg972#msg972)
- Сортировка массива (http://crapware.aidf.org/forum/index.php?topic=33.msg12641#msg12641)
- Распознавание чисел (http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571)  Распознавание текста (http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221)
- Развернуть окно на весь экран (http://crapware.aidf.org/forum/index.php?topic=33.msg17626#msg17626)
- Простое создание снимков c цветокоррекцией COLORMODE (http://crapware.aidf.org/forum/index.php?topic=2778.msg17791#msg17791)
- Ближайшая к заданным координатам/центру картинка/пиксель (http://crapware.aidf.org/forum/index.php?topic=33.msg20114#msg20114)
- /New/ ШИКАРНЫЙ симулятор человеческого движения мыши 'WindMouse' (http://crapware.aidf.org/forum/index.php?topic=33.msg37137#msg37137)


Title: Re: Типовые алгоритмы
Post by: Johnny on October 26, 2012, 10:00:25 AM
Поиск пикселя определенного цвета и щелчок по нему мышью

Использованные инструкции (ознакомьтесь с ними в справке по языку):

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

Code: (clickermann) [Select]
// помещение текущего снимка экрана в буфер программы
// это необходимо для работы всех графических функций и процедур
getscreen

// --- конструкция поиска пикселя в буфере экрана ---
// координаты 0, 0, $_xmax, $_ymax описывают прямоугольную область, в которой будет осуществлен поиск. при этом $_xmax и $_ymax содержат максимально возможные значения для текущего разрешения экрана. 255 это код цвета, он соответствует красному. код цвета можно узнать в редакторе, наведя курсор на нужного цвета пиксель
// сама инструкция поиска if_pixel_in по сути представляет собой условие, то есть выполнение кода, который описан внутри условия, зависит от результата проверки самого условия (если пиксель найден) с учетом всех вышеописанных параметров.
if_pixel_in(0, 0, $_xmax, $_ymax, 255)
   
   // если пиксель заданного цвета найден, его координаты будут помещены в системные переменные $_return1 и $_return2. можно их распечатать в лог ...
   print("Цвет обнаружен в координатах: ", $_return1, ,":", $_return2)
   
   // ... а можно сразу кликнуть по нему левой кнопкой мыши
   lclick($_return1, $_return2)

else   // блок else (вместе с кодом) не обязателен, но он обеспечивает обработку ситуации, когда условие вернуло отрицательный результат
   
   // если ничего не найдено, выводим сообщение
   print("ничего не найдено")

end_if   // конец условия

halt   // остановка скрипта, обеспечивает однократное выполнение

Title: Re: Типовые алгоритмы
Post by: Сергей on October 26, 2012, 04:53:11 PM
Запуск блокнота и запись в нем произвольного текста.

Данный скрипт запускает блокнот и 5 раз записывает в него строку "The quick brown fox jumps over the lazy dog."
Code: (javascript) [Select]
#name "Запись в блокнот"//Имя нашего скрипта

EXECUTE("notepad.exe")//Запускаем программу notepad.exe. Команда EXECUTE равносильна окну "Выполнить" в Виндовс (Win+R).
WNDSTATE(WNDFIND("Блокнот"), 1)//Разворачиваем окно в заголовке которого есть строка "Блокнот". 1 - означает развернуть, 0 - свернуть.   
WAITMS(500)//Ждем чтобы блокнот окончательно запустился. 500 мс достаточно

FOR($i, $i < 5)//Начало цикла. Цифра 5 означает что цикл повторится 5 раз
   KEYSTRING("The quick brown fox jumps over the lazy dog.", 20)//Вводим текст. 20 означает задержку в 20 мс между вводом каждой буквы
   KEYPRESS(#ENTER)//Нажимаем Enter чтобы перевести строку. #ENTER - код клавиши Enter
END_CYC//Заканчиваем цикл

HALT//Останавливаем скрипт

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

Используемые команды:
Title: Re: Типовые алгоритмы
Post by: Oraven on October 26, 2012, 05:30:14 PM
Данный скрипт запускает блокнот и 5 раз записывает в него строку "The quick brown fox jumps over the lazy dog."

Заметь, что должна быть включена английская раскладка.
Title: Re: Типовые алгоритмы
Post by: ЦИТРИН on October 26, 2012, 08:58:48 PM
Заметь, что должна быть включена английская раскладка.
Нельзя ли   процедуру  переключения раскладки  поручить  самой программе, или хотя бы дать понять пользователю , что  у него раскладка не та? 
Это я к чему?
Попробовал  воспользоваться примером .
НО!
 В моей ноуте никакие команды ( в языковой панели)  по изменению раскладки  так и не смогли "убедить" стандартный блокнот писать по английски. Хотя вручную все делаю  исправно.
  Если переключено на русский то  получаю пустой лист с  5 точками
 Если переключаю на англ , то печатается текст, но русскими буквами.
Title: внимание!
Post by: СлавьЯнИнъ on October 26, 2012, 10:21:09 PM
В переключении языка есть особенность.
Для корректного вывода раскладка должна быть одинакова и в кликере в поле ввода.
Title: Re: внимание!
Post by: ЦИТРИН on October 26, 2012, 10:50:03 PM
раскладка должна быть одинакова и в кликере в поле ввода.
Тут непонятный баг. Изначально у меня стоит англ и печатаю от руки в блокноте англ.
Но в момент запуска кликера визуально наблюдается самопроизвольный переход на  русскую раскладку  в языковой панели.
Title: Re: Типовые алгоритмы
Post by: СлавьЯнИнъ on October 27, 2012, 07:47:53 AM
1. Отследи постянно ли происходит этот переход.
2. Воспользуйся кодом:
Code: [Select]
KEYDOWN (#ALT)  // меняем на русскую раскладку
waitms(100)
KEYPRESS (#SHIFT)
 waitms(100)
 KEYUP (#ALT)
 waitms(100)
 KEYSTRING ("")
KEYDOWN (#ALT)  // меняем обратно
waitms(100)
KEYPRESS (#SHIFT)
waitms(100)
KEYUP (#ALT)

В моём случае замечено что команда KEYSTRING некорректно работает с раскладкой на русском языке. Мне пришлось писать по русски через KEYPRESS (#z).
Title: Re: внимание!
Post by: Johnny on October 27, 2012, 10:03:24 AM
Тут непонятный баг. Изначально у меня стоит англ и печатаю от руки в блокноте англ.
Но в момент запуска кликера визуально наблюдается самопроизвольный переход на  русскую раскладку  в языковой панели.
просто винда запоминает для каждого приложения раскладку. даже если это калькулятор и вводить ему нечего. насколько я помню за это отвечает процесс ctfmon.exe
можете поэкспериментировать.
вообще с нелатиницей у кейстринга всегда проблемы. поэтому обычно я рекомендую писать "привет мир" как "ghbdtn vbh"

но если кто-то разберется с непонятным багом и сделает его понятным, думаю я смогу его исправить :)
Title: Re: Типовые алгоритмы
Post by: Сергей on October 27, 2012, 11:17:49 AM
Нафлудили тут.
Заметь, что должна быть включена английская раскладка.
Поправил.

вообще с нелатиницей у кейстринга всегда проблемы. поэтому обычно я рекомендую писать "привет мир" как "ghbdtn vbh"
Почему бы кликерману самому, автоматически не конвертировать русский текст в лытдыбру и сразу печатать? А то сейчас поведение KEYSTRING очень странное.
Вот методом тыка я вывел:
Если в кликермане раскладка русская, то русские строки KEYSTRING понимает, но английские нет. Если раскладка английская, то наоборот.
От этого большая путаница, ведь за раскладкой нужно следить ещё и в целевом окне.

И ещё ввести бы функцию KEYLAYOUT($hwnd) которая возвращает текущую раскладку в заданном hwnd. Ну или хотя бы раскладку активного окна.

2. Воспользуйся кодом

Вариант чуть по-проще:
Code: [Select]
SUB(CHANGE_LAYOUT)
   KEYDOWN(#CTRL)
   KEYPRESS(#SHIFT)
   KEYUP(#CTRL)
   
   KEYDOWN(#ALT)
   KEYPRESS(#SHIFT)
   KEYUP(#ALT)
END_SUB
Title: Re: Типовые алгоритмы
Post by: ЦИТРИН on October 27, 2012, 12:06:55 PM
Нафлудили тут.
Вариант чуть по-проще:
Корифеям большое спасибо!
Если не затруднит , пишите полностью рабочие скрипты. Вам не трудно сделать  копипаст в скрипт ( туда куда нужно) зато  у нуба одним ступором меньше.
Title: Re: Типовые алгоритмы
Post by: Полуночник on October 31, 2012, 05:54:25 PM
Решил небольшую лепту внести...
Переменные.[/size]
 Что это и зачем? Допустим Вы пишете скрипт на 500 строк и нём есть много одинаковых действий, например одни и теже координаты для клика:
Code: [Select]
LCLICK(695,336)
WAITMS(500)           //Задержка выполнение следующей строки скрипта в милисекундах
LCLICK(728,375)
WAIT(5,8)             //Таже задержка, но в секундах

LCLICK(695,386)
WAIT(RND(3,5))  //А вот так далаем рандомную задержку от 3 до 5 секунд
LCLICK(728,375)
WAIT(RND(5,8))

LCLICK(695,433)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8)) и т.д.
Вместо того, что бы каждый раз вписывать одни и теже координаты, можно "обьявить переменную" - $
Прописывается так: $(название переменной) = её значение(число или слово)... Например:
$x = 695
$y = 728
$z = 375
В результате мы в скрипт можем вместо точек координат вставлять переменные и у нас получится следующее:
Code: [Select]
$x = 695
$y = 728
$z = 375
LCLICK($x,336)       //заменили координату 695 на переменную $x
WAITMS(500)
LCLICK($y,$z)         //дальше по аналогии, меняем координаты на нужные нам переменные
WAIT(RND(5,8))

LCLICK($x,386)
WAIT(RND(3,5))
LCLICK($y,$z)
WAIT(RND(5,8))

LCLICK($x,433)
WAITMS(RND(300,500))
LCLICK($y,$z)
WAIT(RND(5,8))
Цикличность действий.
Автоматизация ведь у нас всё таки? ))) И так. За цикличность у нас отвечает параметр FOR и
WHILE.
Сначала  WHILE... Пример приведённый в справочнике вводит в ступор. Попробую обьяснить языком более понятным.
Code: [Select]
$a =0
   WHILE ($a = 0) //вот мы начинаем цикл
      WAITMS(100)     //задержка в милисекуднах (если просто WAIT то в секундах)
      GETSCREEN       //делаем снимок экрана
      IF(PXL(100, 100) = 255)//если нужный пиксел(100,100 - координаты поиска пиксела, 255 - номер цвета пиксела который нам нужен)тут  не находится, то
                         //цикл начинается заного, а если нашли то что нам надо, то в следующей строке
        $a = 1        // меняем переменную
      END_IF          //заканчиваем сравнение
   END_CYC            //заканчиваем цикл
То есть, поиск нужного пиксела или картинки будет проходить бесконечно, пока не появится то что нам надо и только тогда сценарий будет продолжать работать дальше.
FOR ($var, expression, [step]) - организует цикл с параметром. Для корифеев всё понятно, а я например дня три смотрел на функцию как баран на новые ворота. Но в принципе понять что написано в Help можно. Правда я смог понять только после того как разобрался с WHILE функцией.  Если что то не правильно написал, поправьте - исправлю.
Title: Re: Типовые алгоритмы
Post by: Oraven on October 31, 2012, 08:39:37 PM
prapor, вариант цикла с WHILE можно написать куда кароче!
Code: [Select]
// если по координатам 100,100 цвет пиксела НЕ 255, то цикл будет работать

GETSCREEN // снимок в буфер кликера


// условие цикла: если функция PXL находит по координатам 100,100 пиксел любого цвета кроме 255
// цикл будет продолжаться, а как найдет цвет 255 то прервется, и скрипт продолжится дальше после END_CYC

WHILE(PXL(100, 100) ! 255)
   WAITMS(100) // задержка
   GETSCREEN // снимок в буфер кликера внутри цикла
END_CYC
Title: Re: Типовые алгоритмы
Post by: Полуночник on November 01, 2012, 11:57:58 AM
Мне как обьяснили, так я и раскоментировал. Спс, что показали другой способ. Как уже писал из вас умельцев всё клещами надо вытягивать.
Только раскоментируйте свой вариант. Не всё понятно.
Title: Re: Типовые алгоритмы
Post by: ЦИТРИН on November 03, 2012, 12:36:55 PM
л из вас умельцев всё клещами надо вытягивать.
Только раскоментируйте свой вариант. Не всё понятно.
Проблема умельцев в том, что они  не понимают, чего  там такого не понимают нубы.  Сытый - голодного....
Нубам эту  особенность психологии  нужно понимать  и принимать спокойно.
Главное,  чтобы у обеих сторон  хватало выдержки )
 
Title: Re: Типовые алгоритмы
Post by: Dr_midon on November 04, 2012, 02:04:37 AM
Доброго времени суток!

Решил показать, как пользоваться WinAPI функцией
POSTMESSAGE (hwnd, message, wParam, lParam)

Что это такое?
Windows API (англ. application programming interfaces) — общее наименование целого набора базовых функций интерфейсов программирования приложений операционных систем семейств Microsoft Windows. Или по простому - базовый язык наших любимых окошек(Windows). Остальные языки программирования делают свои функции и процедуры из WinAPI или используют его на прямую.

POSTMESSAGE — функция помещает сообщение в очередь.

Зачем нам оно?
Количество функций Clickermann`а неуклонно продолжает расти, но необходимо очень много времени, чтоб можно было сделать свои обертки на все функции Windows. А теперь, когда появилась эта функция мы можем на прямую работать с интерфейсами окошек. И использовать максимум функционала.

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

Что нам понадобится
нам понадобится сама функция
PostMessage(
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);

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

Msg - Сообщение, которое должно быть поставлено в очередь. Сообщение цифровое и писать мы будем его цифрами. Есть куча сообщений, которые могут приходить окну. Вот небольшой список:
wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp, wm_RButtonDblClk и т.п.
И каждому такому сообщению выдан свой код(0x0201 — означает шестнадцатиричный вид, например 0x0201 = 513):
Code: [Select]
WM_LBUTTONDOWN   =  0x0201  // Левая кнопка мыши нажата.
WM_LBUTTONUP     =  0x0202  // Левая кнопка мыши отпущена.

WM_RBUTTONDOWN   =  0x0204  // Правая кнопка мыши нажата.
WM_RBUTTONUP     =  0x0205  // Правая кнопка мыши отпущена.

WM_MOUSEMOVE     =  0x0200  // Мышь передвинута.

WM_MOUSEWHEEL    =  0x020A  // Кручение колесика мыши.

wParam и lParam - Это 32-битовые парaметры. Для каждого случая свои. Но в нашем случае в первом параметре задается нажатые кнопки(если нажато несколько кнопок то они складываются, например нажаты вместе SHIFT и левая кнопка мыши — 0x0004 + 0x0001 = 0x0005):

Code: [Select]
MK_LBUTTON  =  0x0001  // Левая кнопка мыши находится в нажатом состоянии.
MK_RBUTTON  =  0x0002  // Правая кнопка мыши находится в нажатом состоянии.
MK_SHIFT    =  0x0004  // Клавиша SHIFT находится в нажатом состоянии.
MK_CONTROL  =  0x0008  // Клавиша CTRL находится в нажатом состоянии.
MK_MBUTTON  =  0x0010  // Средняя кнопка мыши находится в нажатом состоянии.
MK_XBUTTON1 =  0x0020  // Windows 2000/XP: Первая X-кнопка находится в нажатом состоянии.
MK_XBUTTON2 =  0x0040  // Windows 2000/XP: Вторая X-кнопка находится в нажатом состоянии.
Мышкины события и их коды описаны в MSDN(en)
http://msdn.microsoft.com/en-us/library/windows/desktop/ff468877(v=vs.85).aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/ff468877(v=vs.85).aspx)
Клавиатурные события и их коды описаны в MSDN(en)
http://msdn.microsoft.com/en-us/library/windows/desktop/ff468861(v=vs.85).aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/ff468861(v=vs.85).aspx)

А во втором параметре координаты курсора мыши. Как же можно в одном числе записать 2 значения X и Y? Давольно просто: используя 32 битную операционную систему можно в первых 16 битах передавать Y, а во второй части — X. Например координаты (123 , 456) в шестнадцатиричнном виде будут выглядеть как (0x007B , 0x01C8) и мы получим параметер lParam = 0x01C8007B или в десятичном будет непойми что 29 884 539 = 123 + 456 * 65536. Откуда взялась цифра 65536 оставлю на домашнее задание(подсказка: 256*256=65536, 256 — BYTE, 65536 — WORD)

Практика
Вы дочитали до этих строк и не бросили это нудное дело? Тогда хвала Вам и почет, о любимый мой читатель. А еще лэвэл ап и новый скилл. Копируем и вставляем в Clickermann следующее:

Code: (clickermann) [Select]
$WM_LBUTTONDOWN = 0x0201 // Левая кнопка мыши нажата.
$WM_LBUTTONUP = 0x0202 // Левая кнопка мыши отпущена.
$MK_LBUTTON = 0x0001 // Левая кнопка мыши находится в нажатом состоянии.

$HWND = 16515858 // изменяется при каждом запуске целевой программы,
                 // нужно каждый раз вписывать заного

$x = 100 // Координата по X
$y = 100 // Координата по Y

//Отправляем сообщение окну о нажатой левой кнопке мыши
postmessage($HWND, $WM_LBUTTONDOWN, $MK_LBUTTON, $x + ($y*65536))

//Мало-мало ждем, а можно и вообще не ждать,
//   т.к. сообщения уходят в список и выполняются по порядку
waitms(50)

//Отправляем сообщение окну, что левую кнопку мыши отпустили
postmessage($HWND, $WM_LBUTTONUP, $MK_LBUTTON, $x + ($y*65536))

// Завершаем программу
halt

Запускаем mspaint — стандартную рисовалку Windows, наводим мышь на белый холст и наблюдаем в редакторе кода за hWND. Пишем свое число вместо моего $HWND = и запускаем скрипт(Clickermann). Все. Теперь на холсте паинта стоит точка на расстоянии 100 пикселей от левого края холста(а не экрана!!!) и 100 пикселей от правого.

Эпилог
В браузерах обычно сам сайт и все, что в нем есть имеет один hWND. И высчитав количество пикселей сверху, которое занимает панели браузера можно к Y дописать $y = 100-61 (61 - высота панели хрома) и задавать координаты без вычислений, но при условии, что форма развернута на весь экран. Если двигать форму по всему экрану то прийдется каждый раз пересчитывать координаты. Т.к. все элементы будут содержать собственные координаты. И угол (0,0) - это не угол экрана в данном случае, а верхний левый угол элемента(будь то кнопка, или поле для ввода текста, или страница в браузере - прокручивание не влияет на координаты на экране монитора).
Удачи!
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Johnny on November 04, 2012, 11:32:16 AM
молодец. добавил в оп-пост. учитесь, господа
можно еще добавить ссылки на MSDN, там есть все коды событий и флагов
Title: Привязка к окну
Post by: Dr_midon on November 07, 2012, 12:06:48 PM
Доброго времени суток!

Сегодня поговорим о привязке к окну. В предыдущей статье шла речь о WinApi, но не о привязке к окнам. Хотя можно использовать и WinApi, но есть ряд существенных недостатков. Реализация(написание) скриптов при помощи привязки гораздо проще, т.к. достаточно вставить lclick(x, y) (можно это сделать даже при помощи сочетания ALT+Q) и не нужно громоздить остального кода, включая расчет координат.

Зачем нам оно?
Привязка к окну помогает кликать в окно, даже когда оно свернуто. Также можно свернуть и clickermann. Это значит, что нам можно заниматься своими делами, пока работает кликер. И он нам не будет мешаться.

Ставим задачу
Будем учиться на простом примере: кликать в свернутый Paint(он у каждого в системе есть, стандартная программа). Делать будем не одиночный клик, а нам надо занять рисовалку, пока мы будем проделывать различные действия с окнами. Т.к. тут необходимо уяснить принцип действия, а написание дальнейшего скрипта не будет отличаться от нормального режима.

Что нам понадобится
1. Clickermann 4.7
2. Paint(можно запустить нажав на клавиатуре WIN+R и введя в появившееся окно mspaint, а затем Enter)
3. Скрипт(можно будет скопировать мой Цветок.cms, для примера работы)

Скрипт небольшой, можно и продублировать:
Code: (clickermann) [Select]
#name "Цветок"

// Скрипт, рисующий(в паинте) цветок

$r = 100 // Радиус
$f = 24  // Форм фактор
$i = 0.3 // Смещение начала

while(($i*100) < 1640) // Начало цикла.
                       // Заглушка для проверки дробей

$x = cos($i*$f) // переход от полярных координат
$y = sin($i*$f) // к декартовым

$x = $x *($r-$i*$f/2) // Придание формы  спирали
$y = $y *($r-$i*$f/2) // и задание размера

  $x = $x + 100 + $r // Центрование
  $y = $y + 100 + $r // на холсте
 
  $x = round($x, 0) //  Округление координат
  $y = round($y, 0) //  Иначе клика не получим

  lclick($x, $y) // Сам клик
  waitms(50)  // Пауза: разгружает процессор
  $i = $i + 0.02  // следующая полярная координата
 
end_cyc  // Окончание цикла

halt // Точка выхода из скрипта

Практика
Все достаточно просто, можно разбить всю задачу на 4 пункта:
1. Открываем Paint
2. Открываем фаил Цветок.cms(либо жмем на кнопочку РЕДАКТОР туда вставляем, нажимаем применить и закрываем редактор)
3. В программе Paint мышкой наводим на белый холст будущего рисунка и нажимаем на клавиатуре ALT+W. При этом в окне Clickermann`a должна появиться надпись вкл напротив строчки Статус: в группе Привязка к окну.
4. Запускаем Clickermann, нажав на зеленую кнопочку, или на клавиатуре ALT+A

Все, теперь программа работает и мы можем перекрыть окно паинта другим окном или вовсе свернуть. Скрипт продолжит работу в любом случае.

Эпилог
Теперь Вы можете не загораживать экран окном, в котором работает Clickermann. Достаточно просто свернуть их и делать любые другие действия, кроме нажатия на горячие клавиши старта/стопа(ALT+A / ALT+S). Также не забываем отлаживать скрипты, прежде чем их помещать на задний план. Они должны отработать стабильно(без ошибок) несколько десятков раз на Ваших глазах.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Сергей on November 07, 2012, 03:38:10 PM
Хе-хе, красиво получилось!
Title: Re: Типовые алгоритмы, вводные статьи
Post by: ЦИТРИН on November 07, 2012, 03:59:51 PM
Хе-хе, красиво получилось!
Красиво )
Пара вопросов от нуба.
Нельзя ли из  самого скрипта пейнт  вызвать ,  плюс растянуть его холст на нужный размер?
Как сделать  например  цветные спирали ?
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Dr_midon on November 07, 2012, 07:55:40 PM
Статья была предназначена для разрешения вопросов по привязке к окну и работе в фоновом режиме. Если заинтересовал рисованием тригонометрических графиков то можно погуглить на слова: циклоида, эпициклоида, гипоциклоида, фрактал

http://www.delphigfx.narod.ru/2d/009/2d_9.htm
http://www.megabook.ru/MediaViewer.asp?RNode=4024&MID=453982

2 ЦИТРИН:
Попробуй сам реализовать - это же интересно  ;)
Можно использовать следующие функции:

EXECUTE ("filename", ["param"]) - вызывает внешний файл
Параметры
filename - имя файла
param - необязательный параметр; строка параметров

WNDFIND ("title", [begin]) - числовая функция; возвращает HWND окна с заданным заголовком
Параметры
title - заголовок окна либо его часть
begin - необязательный параметр; флаг сообщает о том что строка title может находиться ТОЛЬКО в начале заголовка

WNDPOS (hwnd, x, y) - помещает окно на экране в указанные координаты
Параметры
hwnd - HWND окна
x,y - экранные координаты

WNDSIZE (hwnd, w, h) - задает размер окна
Параметры
hwnd - HWND окна
w,h - ширина, высота окна

А также можно сказать, что элементы там не передвигаются и статично стоят на своих местах. Остается только найти их координаты при помощи положения и размеров окна.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: ЦИТРИН on November 07, 2012, 08:49:57 PM
2 ЦИТРИН:
Попробуй сам реализовать - это же интересно  ;)
Можно использовать следующие функции:
WNDFIND
WNDPOS
WNDSIZE (hwnd, w, h)[/b] - задает размер окна
Вы полагаете я не пробовал играть в  эти команды?
Пробовал.
Ничего не вышло.
Если не затруднит, покажите алгоритм их использования , в 100% рабочем скрипте, с подробными  пошаговыми комментариями . Тогда  в аналогичной задаче ( скажем с фотошопом ) новичкам будет легче.
Заранее благодарен )
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Ляпис on November 08, 2012, 08:38:59 AM
WNDFIND/POS/SIZE - это хорошо, а есть возможность сохранить и воспроизвести положение ползунков вертикальной и горизонтальной прокрутки содержимого окна?
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Dr_midon on November 08, 2012, 11:55:12 PM
Написал небольшой скриптик, который реализует запуск, перемещение, изменение размеров окна и его кнопок, за испытуемого был выбран калькулятор.

Code: (clickermann) [Select]
#name "Windows change"

$HWnd = 0 // Дескриптор окна(указатель на окно)

execute("calc")  // Запускаем калькулятор

wait(1)    // Ждем 1 сек.
           // Если калькулятор запускается первый раз,
           // то немного надо подождать. Последующие разы будет
           // Запускаться мгновенно (так реализована память Windows)

$HWnd = WNDFIND ("Калькулятор Плюс") // Пытаемся найти окно(в Windows XP)
                                     // Если не найдет то ошибки не покажет.
                                     // Но $HWnd будет равна нулю

if ($HWnd > 0)  // Проверяем нашлось ли окно

   WndPos ($HWnd, 200, 200) // Двигаем окно
   WaitMS(500)
   lClick(265,236)  // Кликаем в меню "ВИД"
   WaitMS(500)
   lClick(288,257) // Кликаем в меню "ОБЫЧНЫЙ"
   WaitMS(500)

   // Еще раз повторюсь: любой элемент формы - это окно
   // Значит мы можем двигать и менять размер не только формы,
   // но и кнопок на ней

   $HWnd = hGet (270,300)  // Находим дескриптор кнопки "Backspace" в глобальных координатах 270,300
   WndSize ($HWnd, 36, 29)   // Меняем ее размер в локальных координатах
   WaitMS(500)

   $HWnd = hGet (340,300)  // Находим дескриптор кнопки "CE" в глобальных координатах 340,300
   WndSize ($HWnd, 36, 29)   // Меняем ее размер в локальных координатах
   WaitMS(500)
   WndPos($HWnd, 93, 37)   // и местоположение в локальных координатах
   WaitMS(500)

   $HWnd = hGet (400,300)  // Находим дескриптор кнопки "C" в глобальных координатах
   WndSize ($HWnd, 36, 29)   // Меняем ее размер в локальных координатах
   WaitMS(500)
   WndPos($HWnd, 132, 37)   // и местоположение в локальных координатах
   WaitMS(500)

   halt // Точка выхода из скрипта
end_if



$HWnd = WNDFIND ("Калькулятор") // Окно не нашлось... Мб у Вас Win7 ?

if ($HWnd > 0)  // Проверяем нашлось ли окно
   WndPos ($HWnd, 200, 200) // Двигаем окно
   WaitMS(500)
   
   $HWnd = hGet (250,280)  // Находим дескриптор поля ввода текста  в глобальных координатах
   WndSize ($HWnd, 100, 50)   // Меняем его размер в локальных координатах
   WaitMS(500)
   WndPos($HWnd, 60, 33)   // и местоположение в локальных координатах
   WaitMS(500)
end_if

halt // Точка выхода из скрипта

а есть возможность сохранить и воспроизвести положение ползунков вертикальной и горизонтальной прокрутки содержимого окна?

Стандартными средствами только анализировав картинку и сохранением в переменную смещения ползунка. Или в Photoshop`e посчитав, на сколько пикселей сместился ползунок, а затем при помощи связки LDOWN (x, y) -> MOVE (x, y) -> LUP (x, y) передвинуть его. Либо посылать ему сообщение SendMessage(hwnd, WM_HSCROLL, SB_THUMBPOSITION, 0) подробнее тут: http://msdn.microsoft.com/en-us/library/windows/desktop/bb787575(v=vs.85).aspx
Не стандартными - писать отдельную DLL и с помощью ее это проделывать.
Других вариантов не придумал.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: ЦИТРИН on November 09, 2012, 11:24:40 AM
Спасибо Dr_midon)
Скрипт 100% рабочий. Очень толково все  разъясняющий.
Интересно получилось. Вы не зря потратили свое время. 
Добавлю в твиттер . https://twitter.com/ClickerForum
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Dr_midon on November 09, 2012, 12:39:36 PM
Есть небольшая утилитка(Spy32 for windows) очень бородатого года, которая поможет разобраться в элементах форм запущенных приложений. Вчера пытался похожие найти, но более свежие. ХЗ как спросить у гугла. Нашел только платную.

Использовать оч просто: запустил и перетягиваешь(Drag`n`Drop) крестик с первой вкладки на нужный тебе элемент. Программка показывает довольно много информации об целевом окне(кнопке/поле/элементе интерфейса). Можно некоторые свойства менять.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Oraven on November 09, 2012, 01:04:56 PM
Есть небольшая утилитка(Spy32 for windows) очень бородатого года, которая поможет разобраться в элементах форм запущенных приложений. Вчера пытался похожие найти, но более свежие. ХЗ как спросить у гугла. Нашел только платную.

Использовать оч просто: запустил и перетягиваешь(Drag`n`Drop) крестик с первой вкладки на нужный тебе элемент. Программка показывает довольно много информации об целевом окне(кнопке/поле/элементе интерфейса). Можно некоторые свойства менять.

InqSoft Window Scanner 1.7
http://clickermann.tk/forum/index.php?topic=42.msg572#msg572
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Dr_midon on November 09, 2012, 02:50:37 PM
InqSoft Window Scanner 1.7 поинтереснее будет, побольше функционала, спс ;)
Но она тож довольно-таки старенькая, хотя и помоложе того, что я выложил.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Ляпис on November 09, 2012, 08:37:39 PM
а есть возможность сохранить и воспроизвести положение ползунков вертикальной и горизонтальной прокрутки содержимого окна?
Стандартными средствами только анализировав картинку и сохранением в переменную смещения ползунка. Или в Photoshop`e посчитав, на сколько пикселей сместился ползунок, а затем при помощи связки LDOWN (x, y) -> MOVE (x, y) -> LUP (x, y) передвинуть его. Либо посылать ему сообщение SendMessage(hwnd, WM_HSCROLL, SB_THUMBPOSITION, 0) подробнее тут: http://msdn.microsoft.com/en-us/library/windows/desktop/bb787575(v=vs.85).aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/bb787575(v=vs.85).aspx)
Не стандартными - писать отдельную DLL и с помощью ее это проделывать.
Других вариантов не придумал.
Хотел попробовать SendMessage(hwnd, WM_HSCROLL, SB_THUMBPOSITION, 0). В справке кмана написано:
Quote
Поскольку у нас нет всех констант "WM_", то параметр message необходимо задавать десятичным числом.
на чём собственно все мои потуги и закончились. Не нашел справочника где даются числовые значения констант "WM_", если я правильно всё понял.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Dr_midon on November 09, 2012, 10:09:00 PM
Жаль нет у форума сворачивающихся блоков, так бы туда все переписал.
Нашел следующее на японском сайте, но думаю проблем с языком не возникнет  ;D
messages: http://www1.u-netsurf.ne.jp/~ozawa/prog/event/message.html

Еще нужны запросы пользователя (wParam):
Code: [Select]
     WM_VSCROLL                          WM_HSCROLL
--------------------------------------------------------
SB_LINEUP        = 0                SB_LINELEFT      = 0
SB_LINEDOWN      = 1                SB_LINERIGHT     = 1
SB_PAGEUP        = 2                SB_PAGELEFT      = 2
SB_PAGEDOWN      = 3                SB_PAGERIGHT     = 3
SB_THUMBPOSITION = 4                SB_THUMBPOSITION = 4
SB_THUMBTRACK    = 5                SB_THUMBTRACK    = 5
SB_TOP           = 6                SB_LEFT          = 6
SB_BOTTOM        = 7                SB_RIGHT         = 7
SB_ENDSCROLL     = 8                SB_ENDSCROLL     = 8

Кроме того не стоит забывать, что
http://msdn.microsoft.com/ru-ru/library/windows/desktop/bb787575(v=vs.85).aspx

The WM_HSCROLL message is sent to a window when a scroll event occurs in the window's standard horizontal scroll bar. This message is also sent to the owner of a horizontal scroll bar control when a scroll event occurs in the control.

wParam
The HIWORD specifies the current position of the scroll box if the LOWORD is SB_THUMBPOSITION or SB_THUMBTRACK; otherwise, this word is not used.
The LOWORD specifies a scroll bar value that indicates the user's scrolling request. This word can be one of the following values.
SB_ENDSCROLL
SB_LEFT
SB_RIGHT
SB_LINELEFT
SB_LINERIGHT
SB_PAGELEFT
SB_PAGERIGHT
SB_THUMBPOSITION
SB_THUMBTRACK

lParam
If the message is sent by a scroll bar control, this parameter is the handle to the scroll bar control. If the message is sent by a standard scroll bar, this parameter is NULL.

Вольный перевод:
WM_HSCROLL сообщение отправляется в окно, когда событие scroll происходит в горизонтальной полосе прокрутки окна. Это сообщение также отправляется владельцу горизонтальной полосы прокрутки при возникновении события scroll в элементе управления.

WPARAM
HIWORD определяет положение полосы прокрутки, если LOWORD берется значение SB_THUMBPOSITION или SB_THUMBTRACK, в противном случае это слово не используется.
LOWORD указывает запрос пользователя. Это слово может быть одним из следующих значений.
SB_ENDSCROLL
SB_LEFT
SB_RIGHT
SB_LINELEFT
SB_LINERIGHT
SB_PAGELEFT
SB_PAGERIGHT
SB_THUMBPOSITION
SB_THUMBTRACK

lParam
Если сообщение отправляется и полосе прокрутки, lParam является дескриптором управления полосы прокрутки. Если сообщение не отправляется полосе прокрутки, lParam имеет значение NULL
Title: Re: Типовые алгоритмы, вводные статьи
Post by: ЦИТРИН on November 10, 2012, 01:22:22 PM
В теме "Предложения по применению от новичков."  Сергей  написал интересный  скрипт,  который  позволяет ставить дату и время  в удобочитаемом формате.   http://clickermann.tk/forum/index.php?topic=36.msg373#msg373
 Нельзя ли его перенести сюда , в шапку примеров?
На этом примере новичкам можно показать, как работает функция  инклуд.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Oraven on November 10, 2012, 03:26:23 PM
Скрипт включает действия в определенное время.
IF_TIME("*:*:*"). Звездочка означает любой час, любую минуту и секунду.

IF_TIME("12:00:00") // сработает в 12:00:00
END_IF

Пример:
Code: [Select]
IF_TIME("12:10:*") // Включаем в 12.10
$t1 = 1
END_IF

IF_TIME("16:10:*") // Отключаем в 16.10
$t1 = 0
END_IF


IF_TIME("16:10:*") // Включаем в 16.10
$t2 = 1
END_IF

IF_TIME("12:10:*") // Отключаем в 12.10
$t2 = 0
END_IF


IF($t1 = 1) // 12.10
// здесь Действие 
// Будет выполняться с 12.10 по 16.10
LOGWRITE("Задание в 12.10")
END_IF

IF($t2 = 1) // 16.10
// здесь Действие
// Будет выполняться с 16.10 по 12.10
LOGWRITE("Задание в 16.10")
END_IF

WAITMS (500)
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Johnny on November 11, 2012, 07:32:24 AM
Написание подпрограммы для вычисления даты
Пример создания пользовательских подпрограмм и их подключения через директиву include
Оригинальный пост пользователя Сергей: http://clickermann.tk/forum/index.php?topic=36.msg373#msg373

Данный пример раскрывает возможность "прятать от глаз" большой громоздкий код в программные библиотеки.
Имеется задача: вычислить текущую дату на основании системной переменной $_time_t
Для этого была написана следующая подпрограмма, для удобства вынесенная в отдельный файл date.cms

date.cms
Code: (clickermann) [Select]
// Day, Month, Year from $_time_t
// Author: Sergey
// Version: 1.0 (30.10.2012)

SUB(UPDATE_DATE)
   $_date_y = 1970
   $_date_m = 1
   $_date_d = ROUND(($_time_t / (3600 * 24)) - $voi, 0) + 1//floor
   $voi = 0.499999999999
   $break = 0
   
   WHILE($break = 0)
      $arg1 = $_date_y-1968
      $arg2 = 4
      IF($arg1-(ROUND(($arg1/$arg2)-$voi,0)*$arg2) = 0)//mod($_date_y-1968, 4) = 0
         $nd = 366
      ELSE
         $nd = 365
      END_IF
     
      if($_date_d > $nd)
         INC($_date_d, 0-$nd)
         INC($_date_y, 1)
      ELSE
         $break = 1
      END_IF
   END_CYC
   $break = 0
   
   WHILE($break = 0)
      $arg1 = $_date_y-1968
      $arg2 = 4
      IF( ($arg1-(ROUND(($arg1/$arg2)-$voi,0)*$arg2) = 0) & ($_date_m = 2) )//(mod($_date_y-1968, 4) = 0) & ($_date_m = 2)
         $nd = 29
      ELSE
         $nd = STRCUT("31,28,31,30,31,30,31,31,30,31,30,31", (($_date_m-1) * 3) + 1, 2)
      END_IF
      IF($_date_d > $nd)
         INC($_date_d, 0-$nd)
         INC($_date_m, 1)
      ELSE
         $break = 1
      END_IF
   END_CYC
END_SUB

GOSUB(UPDATE_DATE)

После вызова эта подпрограмма создает следующие переменные, которые могут использоваться в вашей программе


Пример использования подпрограммы
Code: (clickermann) [Select]
// Подключаем файл, содержащий подпрограмму UPDATE_DATE, это работает так же, как если бы вы просто скопировали все содержимое файла date.cms за место этой строчки
#include "date.cms" 

print($_date_d,".",$_date_m,".",$_date_y) // Выводим "старую" дату

GOSUB(UPDATE_DATE) // Вызов подпрограммы (напоминаю что ее "тело" находится в подключенном файле date.cms), обновление переменных
print($_date_d,".",$_date_m,".",$_date_y) // Выводим актуальную дату

HALT

Этот пример вы можете скачать из вложения

Ах да, скрипт не будет работать если вы изобрели машину времени и переместились раньше 1970 года.
Отдельное спасибо Ляпису за идею с обходом отсутствия массивов.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Сергей on November 11, 2012, 08:00:45 AM
Хм, а почему в справке о условии IF_TIME нигде не написано?
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Johnny on November 11, 2012, 08:28:45 AM
Хм, а почему в справке о условии IF_TIME нигде не написано?
потому что я думал что удалил его уже давно. очередной костыль из серии if_что-то. неправильно все это.
пользуйтесь переменными

кто спойлеры просил.
[spoiler=вот есть пока такие]
потом может доработаю
сейчас надо другие дела поделать
[/spoiler]
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Oraven on November 15, 2012, 09:00:03 PM
Скрипт выполняет действия в разные промежутки времени

1 действие 1 раз в 30 секунд
2 действие 1 раз в 1 минуту
3 действие 1 раз в 2 минуты

$_time_t - это системная переменная. При каждом обращении к ней возвращает текущее время в формате Unix-систем
Отсчет времени идет в секундах. А если нужно использовать миллисекунды то в место $_time_t пишем $_ms - Системный таймер Windows.
Имя переменных $time1, $time2 и тд. может быть любым.

Code: (clickermann) [Select]
// ПЕРВОЕ ДЕЙСТВИЕ РАЗ В 30 СЕКУНД
IF($time1 < $_time_t) // условие сработает если переменная $time1 меньше $_time_t
$time1 = $_time_t + 30 // записываем в переменную $time1 текущее время + 30 секунд

// Здесь пишутся необходимые действия

END_IF // конец первого условия

// ВТОРОЕ ДЕЙСТВИЕ РАЗ В 1 МИНУТУ
IF($time2 < $_time_t)
$time2 = $_time_t + 60

// Здесь пишутся необходимые действия

END_IF // конец второго условия

// ТРЕТЬЕ ДЕЙСТВИЕ РАЗ В 2 МИНУТЫ
IF($time3 < $_time_t)
$time3 = $_time_t + 120

// Здесь пишутся необходимые действия

END_IF // конец третьего условия

// вне условий можно написать действия которые должны выполняться постоянно

WAITMS (500) // задержка скрипта 500 мс для разгрузки процессора

Также, время следующего срабатывания может записываться в файл ini.
Это важно если действия выполняются, например, раз в час или еще дольше, можно остановить кликер, и таймеры не собьются.
INT и STRCONCAT я использовал чтобы кликер при отсутствии файла time.ini не выдавал ошибок (вернет 0 если строки или файла не существует)

Code: (clickermann) [Select]
// Эти строки выполняются при запуске 1 раз
$time1 = INT(STRCONCAT ("0", INIREAD ("time.ini", "Time1", "TIME")))
$time2 = INT(STRCONCAT ("0", INIREAD ("time.ini", "Time2", "TIME")))
$time3 = INT(STRCONCAT ("0", INIREAD ("time.ini", "Time3", "TIME")))

go: // далее произойдет зацикливание до метки GO

IF($time1 < $_time_t)
$time1 = $_time_t + 30
INIWRITE ("time.ini", "Time1", $time1, "TIME") // запись в файл time.ini времени следующего срабатывания условия

// Здесь пишутся необходимые действия

END_IF

IF($time2 < $_time_t)
$time2 = $_time_t + 60
INIWRITE ("time.ini", "Time2", $time2, "TIME")

// Здесь пишутся необходимые действия

END_IF

IF($time3 < $_time_t)
$time3 = $_time_t + 120
INIWRITE ("time.ini", "Time3", $time3, "TIME")

// Здесь пишутся необходимые действия

END_IF

WAITMS (500)

goto(go) // переход к метке GO
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Oraven on November 15, 2012, 09:39:16 PM
Перезагрузить или выключить компьютер.

Для этого пишем такие строки

Отключение компьютера
Code: (clickermann) [Select]
EXECUTE ("shutdown.exe", "/s /t 00")
HALT

Отключение компьютера с принудительным завершением приложений без предварительного предупреждения
Code: (clickermann) [Select]
EXECUTE ("shutdown.exe", "/s /f /t 00")
HALT

Перезагрузка компьютера
Code: (clickermann) [Select]
EXECUTE ("shutdown.exe", "/r /t 00")
HALT

Обозначения:
/l                      Выход (Log off)
/s                     Завершение работы компьютера
/r                     Перезагрузка компьютера
/a                    Прекращение завершения работы системы
/t xx                Таймаут завершения работы - xx сек.
/f                     Принудительное завершение приложений без предварительного предупреждения
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Oraven on November 25, 2012, 07:05:51 PM
Как нажать Ctrl+V в оконном режиме?

Вариант 1
Code: (clickermann) [Select]
TOCLIP ("Тест") // отправляем текст в буфер
SENDMESSAGE ($_hwnd, 0x0302, 0, 0) //Посылаем окну команду "Вставить из буфера"
halt // стоп

Если не работает используем другой способ.
Вариант 2
Code: (clickermann) [Select]
TOCLIP ("Тест") // отправляем текст в буфер
WAITMS (50)

$hwnd = $_hwnd // записываем в переменную $hwnd текущий HWND окна
HSET ($hwnd,0) // отключаем оконный режим
KEYDOWN (#CTRL) // зажимаем Ctrl
HSET ($hwnd,1) // снова включаем оконный режим
WAITMS (20)
KEYPRESS (#V) // отправляем окну нажатие клавиши V
HSET ($hwnd,0) // отключаем оконный режим
KEYUP (#CTRL) // отпускаем Ctrl
HSET ($hwnd,1) // снова включаем оконный режим
halt // стоп
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Vint on November 26, 2012, 11:22:02 AM
Люди, товарищи, граждане, господа...
Есть ли у кого решение известного языкового бага/особенности. Надоело следить за раскладкой в самом Кликермэне. Да и не всегда это возможно, если кровь из носа, а нужно использовать оба языка в одном скрипте.
Ситуацию бы спасло исправление работы программы или хотя бы костыли для этого + (как здесь предлагали) функция (переменная?) для определения раскладки в целевом окне.

Если кто-то решил проблему, поделитесь пожалуйста.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Сергей on November 29, 2012, 06:42:23 PM
Да проблему сейчас твердо никак не решить, только если при включении скрипта следить за раскладкой. Нужно конечно переменную в которой находится текущая раскладка, по другому никак.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Vint on November 30, 2012, 09:16:48 AM
Джонни, а нельзя по аналогии POSTMESSAGE на WinAPI ввести функцию
LoadKeyboardLayout - загрузить новую раскладку
достаточно будет её одной, ну для полной нирваны можно ещё
GetKeyboardLayout - определить текущую раскладку

Заранее извиняюсь если сморозил чушь, в WinAPI ничего не понимаю, просто искал информацию по POSTMESSAGE и обратил внимание.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Сергей on December 01, 2012, 11:32:01 AM
Да надо просто ввести системную переменную $_kblayout и помещать в нее раскладку текущего окна при обращении к ней.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: СлавьЯнИнъ on December 06, 2012, 07:45:22 PM
Друзья, всем привет ))

Возникает вопрос по посту - Написание подпрограммы для вычисления даты (http://clickermann.tk/forum/index.php?topic=33.msg708#msg708)
У меня в данный момент вычисляет 7.12.2012.
Как вылечить, где править, может корректировку GMT поставить?
Но не в одной корректировке пояса дело.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Сергей on December 06, 2012, 11:58:14 PM
СлавьЯнИнъ, а какое у тебя время?
Он по идее должен выдавать дату которая стоит у тебя на компьютере. В $_time_t кладется время прошедшее с 1 января 1970 года без поправок на часовой пояс, т.е. время когда этот момент настал именно в твоем часовом поясе.
Так выдает виндовс, и так выдает и кликерман.
Хотя велика вероятность что проблема в алгоритме, мог где-нибудь ошибиться.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: СлавьЯнИнъ on December 07, 2012, 11:54:31 PM
Применено:
GOSUB(UPDATE_DATE)
print($_date_d,".",$_date_m,".",$_date_y)
GOSUB(UPDATE_DATE)
print($_date_d,".",$_date_m,".",$_date_y)

получено:
1. Если время с 00:00 до 12:59 то
оба принта с правильным числом
2. Если время с 13:00 до 23:59 то
первый принт показывает число на 1 больше, а второй нормальное.

Вот и гадать теперь где там эта ошибка ?? ((
Title: Re: Типовые алгоритмы, вводные статьи
Post by: СлавьЯнИнъ on December 07, 2012, 11:56:39 PM
Сергей

Как тебе помочь в поиске ошибки?
Title: Re: Типовые алгоритмы, вводные статьи
Post by: ЦИТРИН on December 08, 2012, 01:54:07 PM
Уважаемый Сергей написал новую версию скрипта  для даты. http://goo.gl/02CY7
  Вероятно есть смысл её обновить и в "типовых алгоритмах".http://goo.gl/MdZSS
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Сергей on December 09, 2012, 02:51:50 AM
Применено:
GOSUB(UPDATE_DATE)
print($_date_d,".",$_date_m,".",$_date_y)
GOSUB(UPDATE_DATE)
print($_date_d,".",$_date_m,".",$_date_y)

получено:
1. Если время с 00:00 до 12:59 то
оба принта с правильным числом
2. Если время с 13:00 до 23:59 то
первый принт показывает число на 1 больше, а второй нормальное.

Вот и гадать теперь где там эта ошибка ?? ((
Попробуй на новом скрипте, я как раз отловил там этот баг.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Сергей on December 10, 2012, 09:18:26 AM
Пример использования функций работы с файлами (TFREAD, TFWRITE и т.п.)

Данный скрипт удаляет из произвольного файла строчные комментарии.

Code: (clickermann) [Select]
#name "Delete comments"

// Инициализируем переменные
$filename = "test.txt"//Имя файла
$i = 1//Индекс строки

WHILE( $i < TFCOUNT($filename) + 1 ) // Выполняем до тех пор, пока не кончатся строки
$string = TFREAD($filename, $i) // Читаем строку $i из файла
$pos = STRPOS($string, "//") // Ищем в строке "//"
   
IF($pos ! 0) // Если "//" в строке есть
TFDELETE($filename, $i) // Удаляем эту строку
IF($pos ! 1) // Если до "//" вообще есть какой-то текст
TFWRITE($filename, STRCUT2($string, 1, $pos - 1), $i) // То пишем его в файл, на ту же строку, которую удалили.
END_IF
ELSE
INC($i, 1) // Если никаких комментариев в строке нету, то переходим к другой строке
END_IF
END_CYC


HALT // Останавливаем скрипт

Используемые команды:

Пояснение некоторых моментов:

Code: (clickermann) [Select]
WHILE( $i < TFCOUNT($filename) + 1 ) // Выполняем до тех пор, пока не кончатся строки"+ 1" является заменой выражения меньше-равно. Счет строк в Кликермане начинается с 1 и просто выражение "меньше" обработает все строки кроме последней.

Code: (clickermann) [Select]
IF($pos ! 0) // Если "//" в строке естьВ Кликермане функция STRPOS возвращает ноль, если ничего не найдено. Счет тут так же начинается с 1.

Code: (clickermann) [Select]
TFWRITE($filename, STRCUT2($string, 1, $pos - 1), $i) // То пишем его в файл, на ту же строку, которую удалили.Синтаксис функции STRCUT2 - STRCUT2($string, $begin, $end)
Эта функция в качестве третьего аргумента ($end) принимает номер символа считая с нуля. При этом второй аргумент ($begin) считает от 1.
Т.е. функция STRCUT2("test", 1, 1) вернет "t". Поэтому в данном случае от переменной $pos отнимается 1.

Пример файла test.txt:
Code: [Select]
tesst
te//
te
te//
//
//
//
foo
foo//
//
bar
ba
//
//
test
bar//foo
foo

Результат работы скрипта:
Code: [Select]
tesst
te
te
te
foo
foo
bar
ba
test
bar
foo
Title: Re: Типовые алгоритмы, вводные статьи
Post by: ЦИТРИН on December 10, 2012, 12:42:04 PM
Данный скрипт удаляет из произвольного файла строчные комментарии.
Речь идет о удалении всего, что за  косыми //.
Вероятно это полезно,  особенно  корифеям.
А вот нельзя ли написать скрипт, для удаления из текста строчек с матюками ?
( или  как-то мат метить красным цветом, вырезать и записывать в отдельный файл итп)
 Страна просыпается. Начнет  помаленьку отряхиваться от демократических  нечистот.
 Такой скрипт был  своевременным.
п.с.
Скачать в сети матфильтр пока не удалось. Нарвался на вирусню [spoiler]C:\PROGRA~1\Matfiltr\mtfltr.dll --> Подозрение на Keylogger или троянскую DLL [/spoiler] и успокоился.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Сергей on December 10, 2012, 01:33:04 PM
Для матфильтра нужен, собственно, матлист и синтаксический анализатор русского языка. Первый, если составлять самому, будет далеко не полон.
А для реализации второго, нужен язык немного другой направленности, нежели Кликерман.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: СлавьЯнИнъ on December 19, 2012, 11:39:11 AM
Типовой Сниматель Скришотов SSWL
Работает в двух режимах. Первый для сравнения колормода, второй для покадровой съёмки.
Code: (clickermann) [Select]
// ScreenShot WireLess
// including Getcreen Colormode Screenshot

// значения задаваемые вручную для работы программы

$Nameobj = "GlazBuri"  // имя объекта сканирования
$Mode = 10
$Mwait = 250
// Варианты работы:
// 1) $mode = 1. делает 8 скриншотов, по 1 на каждую опцию колормода
// 2) $mode = >1. любое значение больше единицы приводит к изготовлению этого кол-ва скриншотов c паузами в $Mwait миллисекунд

If ($mode > 1)
   $m2cycle = 0
   WHILE ( $mode > $m2cycle )
      screenshot($nameobj)
      waitms($Mwait)
      inc($m2cycle)
   end_cyc
end_if

if ($mode = 1)
   getscreen
   screenshot(strconcat("SSWL. ",$nameobj," clear "))
   COLORMODE(1)
   screenshot(strconcat("SSWL. ",$nameobj," colormode1 "))
   getscreen
   COLORMODE(2)
   screenshot(strconcat("SSWL. ",$nameobj," colormode2 "))
   getscreen
   COLORMODE(3)
   screenshot(strconcat("SSWL. ",$nameobj," colormode3 "))
   getscreen
   COLORMODE(4)
   screenshot(strconcat("SSWL. ",$nameobj," colormode4 "))
   getscreen
   COLORMODE(5)
   screenshot(strconcat("SSWL. ",$nameobj," colormode5 "))
   getscreen
   COLORMODE(6)
   screenshot(strconcat("SSWL. ",$nameobj," colormode6 "))
   getscreen
   COLORMODE(7)
   screenshot(strconcat("SSWL. ",$nameobj," colormode7 "))
End_if

halt

кодировку исправил, благодарю Oraven, Сергей
Title: Re: Типовые алгоритмы, вводные статьи
Post by: ЦИТРИН on December 19, 2012, 11:51:07 AM
Типовой Сниматель Скришотов
Спасибо)
 Будет  намного удобнее.
Попутно вопрос. А нельзя ли сделать так, чтобы на выходе скрипта  у нас получались не полные снимки экрана, а прямоугольные зоны  по указанным границам Х_У. (готовые картинки искомой цели  в колормодах). Можно ли как-то автоматизировать  работу  в  стандартном пейнте в продолжении данного скрипта.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Oraven on December 19, 2012, 01:01:47 PM
У тебя какая то не та кодировка
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Сергей on December 23, 2012, 08:39:15 PM
СлавьЯнИнъ, сохрани скрипт кликерманом и открой каким-нибудь другим редактором. И из него уже копипасть.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: СлавьЯнИнъ on January 10, 2013, 11:07:09 AM
Благодарю, Друзья!
В принципе после перезагрузки всё стало в норму. Видимо несколько открытых программ с разной кодировкой повлияли на буфер обмена.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on February 21, 2013, 02:49:42 PM
Сморя для какой задачи. Можно и в одном скрипте.
Используя команды HGET, HSET, WNDFIND и системную переменную $_hwnd можно сделать с любым количеством окон.
Если по WNDFIND будет определяться не тот hwnd, можно сделать чтоб скрипт  при запуске поочерёдно делал окна активными  и HGET-ом брал нужные hwnd. Таким образом вначале "пристреливаемся", потом работаем.

Пока писал ответ удалили вопрос  :)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: organizm on February 21, 2013, 08:47:02 PM
Винт, сори, я просто не очень корректно его сформулировал. Я понял, что можно, используя WinApi кликать в свернутые 10 окон браузера. Но пока не понял, можно ли это делать, используя "оконный режим" кликера или этот режим подходит только для одного свернутого окна.
Title: Re: Типовые алгоритмы
Post by: Форвард on March 10, 2013, 04:37:25 PM
Данный скрипт запускает блокнот и 5 раз записывает в него строку "The quick brown fox jumps over the lazy dog."

Заметь, что должна быть включена английская раскладка.

Кликер 4.7 SE, винда7, записываю свой англ.текст в игровое окно в браузер, раскладка включена англ. - KEYSTRING (с включенным временем задержки) записывает все заглавные английские прописными английскими .... прописные - прописными... 

пичалька ((

нашел свою ошибку - на самом деле - кликер 4.3 и в справке показано - заглавные запишет прописными ... :-р-р-р-р...
Title: Re: Типовые алгоритмы, вводные статьи
Post by: Вуа on April 24, 2013, 04:08:36 AM
[spoiler]
Кому то может понадобиться перезагрузить или выключить компьютер.

Для этого пишем такие строки

Отключение компьютера
Code: (clickermann) [Select]
EXECUTE ("shutdown.exe", "/s /t 00")
HALT

Отключение компьютера с принудительным завершением приложений без предварительного предупреждения
Code: (clickermann) [Select]
EXECUTE ("shutdown.exe", "/s /f /t 00")
HALT

Перезагрузка компьютера
Code: (clickermann) [Select]
EXECUTE ("shutdown.exe", "/r /t 00")
HALT

Обозначения:
/l                      Выход (Log off)
/s                     Завершение работы компьютера
/r                     Перезагрузка компьютера
/a                    Прекращение завершения работы системы
/t xx                Таймаут завершения работы - xx сек.
/f                     Принудительное завершение приложений без предварительного предупреждения
[/spoiler]
угу, вин+К "shutdown -s -f -t 6000" энтер, и кликерман не нужен

А мне посоветуйте пожалуйста вот что...
Таким скриптом ищу картинки
Code: [Select]
for($scrn, $find < 1) 
   GETSCREEN
if_picture_in (200, 200, 450, 400, "sher1.bmp")
            print("Cîâïàäåíèå ñ 1. Ñêðèí # ", $scrn)
            inc($find, 1)
      end_if
     
      if_picture_in (200, 200, 450, 400, "sher2.bmp")
            print("Cîâïàäåíèå ñ 2. Ñêðèí # ", $scrn)
            inc($find, 1)   
      end_if
     
      if_picture_in (230, 230, 450, 400, "sher3.bmp")
            print("Cîâïàäåíèå ñ 3. Ñêðèí # ", $scrn)
inc($find, 1)
      end_if
     
      if_picture_in (230, 230, 450, 400, "sher4.bmp")
            print("Cîâïàäåíèå ñ 4. Ñêðèí # ", $scrn)
inc($find, 1)
      end_if
 end_cyc
Картинок всегда 4 но что бы изменить назначение скрипта нужно изменить названия картинок, так вот нельзя ли как-то названия картинок задавать строковой переменной?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on April 24, 2013, 08:30:32 AM
Просто привели пример выключения ПК из командной строки. Не все же посетители продвинутые пользователи.
При чём здесь нужен кликер или нет? Бывает спрашивают "как автоматически выключить комп после отработки скрипта?". Вот это и был ответ.

По вопросу "нельзя ли как-то названия картинок задавать строковой переменной". Можно.

Можно даже так перебирать
Code: (clickermann) [Select]
$prefix="sher"
...
...

$i=0
FOR ($i, $i<4)
   IF_PICTURE_IN (200, 200, 450, 400, STRCONCAT($prefix,$i,".bmp"))
      // обработка
   END_IF
END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on April 24, 2013, 10:28:00 AM
GETSCREEN забыл
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on April 24, 2013, 11:28:58 AM
Так это же общий пример... Намётки так сказать... Ну да, и GETSCREEN забыл до кучи  :) :D
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Вуа on April 24, 2013, 01:49:40 PM
Делать фор на 4 скрина не пойдет, потому как их порой делается несколько сотен, думаю решать это ожиданием, однако на мой вопрос вы ответили сполна, спасибо.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: All-Seeing on November 28, 2013, 10:57:51 PM
Доброго времени суток.

Есть такая конструкция:
Code: (clickermann) [Select]
$time = $_time_t + 30
GETSCREEN
WHILE((PXL (100, 100) ! 255) & ($time > $_time_t))
   WAITMS (100)
   GETSCREEN
END_CYC
Возможно ли в данной конструкции использовать IF_PIXEL_IN вместо PXL.
Если да, то как будет выглядеть код?
Спасибо.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: ivanuskov on November 29, 2013, 07:12:01 AM
Доброго времени суток.

Есть такая конструкция:
Code: (clickermann) [Select]
$time = $_time_t + 30
GETSCREEN
WHILE((PXL (100, 100) ! 255) & ($time > $_time_t))
   WAITMS (100)
   GETSCREEN
END_CYC
Возможно ли в данной конструкции использовать IF_PIXEL_IN вместо PXL.
Если да, то как будет выглядеть код?
Спасибо.


Code: (clickermann) [Select]
while((pxlcount(0, 0, $_xmax, $_ymax, 255)<1) & ($time > $_time_t))
    waitms(100)
    getscreen
end_cyc
Будет ждать, пока на экране не появится пиксель 255 цвета и не истекло время
Чуть более длинный, но куда более продуктивный вариант

Code: (clickermann) [Select]
$flag=0
while ($flag=0)
  if_pixel_in(0, 0, $_xmax, $_ymax, 255, 256, 257, ...) //все необходимые цвета
      $flag=1
  end_if
  waitms(100)
  getscreen
end_cyc
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on November 29, 2013, 08:19:07 AM
Доброго времени суток.

Есть такая конструкция:
Code: (clickermann) [Select]
$time = $_time_t + 30
GETSCREEN
WHILE((PXL (100, 100) ! 255) & ($time > $_time_t))
   WAITMS (100)
   GETSCREEN
END_CYC
Возможно ли в данной конструкции использовать IF_PIXEL_IN вместо PXL.
Если да, то как будет выглядеть код?
Спасибо.
Если прям аналог, то можно так:
Code: (clickermann) [Select]
$time = $_time_t + 30
WHILE($time > $_time_t)
   GETSCREEN
   IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255)
      $time = $_time_t - 1
   ELSE
      WAITMS (100)
   END_IF
END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: All-Seeing on November 29, 2013, 12:16:18 PM
ivanuskov, Vint
Спасибо за содержательный и быстрый ответ  ;D
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Lol on April 15, 2014, 08:02:42 AM
День добрый!

Почему-то программа не обрабатывает нажатие клавиши "Prt Sc". Вообще изначально задача очистить буфер, эта кнопка избрана для легкого выполнения это задачи. Может быть есть возможность очистить буфер иначе, либо сделать что-то чтобы программа обрабатывала указанную клавишу.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on April 15, 2014, 08:34:05 AM
День добрый!

Почему-то программа не обрабатывает нажатие клавиши "Prt Sc". Вообще изначально задача очистить буфер, эта кнопка избрана для легкого выполнения это задачи. Может быть есть возможность очистить буфер иначе, либо сделать что-то чтобы программа обрабатывала указанную клавишу.
Очистить буфер?
Code: (clickermann) [Select]
TOCLIP("")Если, конечно не используются спец проги для увеличения числа запоминаемых фрагментов.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Johnny on April 15, 2014, 11:29:14 AM
День добрый!

Почему-то программа не обрабатывает нажатие клавиши "Prt Sc".
благодаря новому механизму записи удалось выяснить что код этой кнопки внезапно оказался 44 а не тот что по документам. с остальными клавишами боюсь та же беда.
запись внезапно стала полезной.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Werest on June 24, 2014, 06:33:56 PM
Здравствуйте. Подскажите как можно задать в макросе на определенные строки длительность по времени выполнения.  Ну то есть он дошел до определенной строки и начинает выполнять определенные действия определенное время, а после окончания отведенного времени макрос дальше продолжал выполняться? Возможно не внятно объяснил, приведу пример.
Code: [Select]
LCLICK(1245,180)
WAITMS(500)
LDOWN(917,175)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("574")
WAITMS(100)
LDOWN(988,174)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("609")
WAITMS(100)
LCLICK(1025,177) 
WAIT(40)       
LCLICK(646,515) 
WAITMS(500)
LCLICK(657,507) 
WAITMS(1500)
LCLICK(618,534) 
WAIT(40)         
LCLICK(846,981)
WAITMS(500)
LCLICK(1245,180) 
WAITMS(900)
LDOWN(917,175)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("433")
WAITMS(100)
LDOWN(988,174)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("190")
WAITMS(100)
LCLICK(1025,177)
WAIT(40)           
LCLICK(646,515) 
WAITMS(5000)
LCLICK(657,507) 
WAITMS(500)
LCLICK(618,534)
LCLICK(1245,180)
WAITMS(500)
LDOWN(917,175)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("453")
WAITMS(100)
LDOWN(988,174)
WAITMS(100)
LUP(881,176)
WAITMS(100)
KEYSTRING("270")
WAITMS(100)
LCLICK(1025,177) 
WAIT(6)           
 
LCLICK(385,976)  //
WAITMS(100)      //
LCLICK(433,979)  //
WAITMS(100)      //
LCLICK(478,977)  //
WAITMS(100)      //  Нужно чтобы этот цикл длился на протяжении 20 минут

LCLICK(307,416) 
WAITMS(700)
LCLICK(646,478) 
WAIT(40)
LCLICK(561,528) 
WAIT(5)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: aden on June 24, 2014, 07:52:35 PM
while
for
операторы цикла описаны в инструкции к программе
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Werest on June 24, 2014, 08:26:27 PM
Ну хорошо. А как сделать то что бы он 20 минут подряд работал то?Тут нашел только функцию чтоб включался он раз в 20 минут, это немного не то.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on June 24, 2014, 08:37:45 PM
Ну хорошо. А как сделать то что бы он 20 минут подряд работал то?Тут нашел только функцию чтоб включался он раз в 20 минут, это немного не то.
Ну и в чём разница то? Знак "меньше" на "больше" поменять?...
Code: (clickermann) [Select]
$end = $_time_t + 1200
WHILE($end > $_time_t)
   // Здесь твой код
END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Werest on June 24, 2014, 08:45:26 PM
Туплю. ))) Только взялся изучать прогу. ))) Примного благодарен.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Reyhs on July 11, 2014, 04:24:25 PM
Ггг... итак, скачал, воткнул, наскриптил в виде левый клац туда, туда, туда и т.д., даже работает ! Однако вопросы остались, вот у меня одинаковые циклы, то есть разумно было бы написать клацни туда то, потом выполни цикл и вернись, клацни еще куда то, выполни цикл и т.д., а вот хрен там был, команды цикла, не for-while, а goto-return, этой супер проге незнакомы, итак ЧТО ЗА ЯЗЫК ПРОГРАММИРОВАНИЯ в этом боту ???
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on July 11, 2014, 04:29:45 PM
Ггг... итак, скачал, воткнул, наскриптил в виде левый клац туда, туда, туда и т.д., даже работает ! Однако вопросы остались, вот у меня одинаковые циклы, то есть разумно было бы написать клацни туда то, потом выполни цикл и вернись, клацни еще куда то, выполни цикл и т.д., а вот хрен там был, команды цикла, не for-while, а goto-return, этой супер проге незнакомы, итак ЧТО ЗА ЯЗЫК ПРОГРАММИРОВАНИЯ в этом боту ???

Видимо тебе нужны подпрограммы

Code: (clickermann) [Select]
SUB(подпрограмма)

// здесь цикл

END_SUB


LCLICK(100,100)
подпрограмма()

LCLICK(200,200)
подпрограмма()

LCLICK(300,300)
подпрограмма()

LCLICK(400,400)
подпрограмма()
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Reyhs on July 11, 2014, 04:40:35 PM
Ггг... итак, скачал, воткнул, наскриптил в виде левый клац туда, туда, туда и т.д., даже работает ! Однако вопросы остались, вот у меня одинаковые циклы, то есть разумно было бы написать клацни туда то, потом выполни цикл и вернись, клацни еще куда то, выполни цикл и т.д., а вот хрен там был, команды цикла, не for-while, а goto-return, этой супер проге незнакомы, итак ЧТО ЗА ЯЗЫК ПРОГРАММИРОВАНИЯ в этом боту ???

Видимо тебе нужны подпрограммы

Code: (clickermann) [Select]
SUB(подпрограмма)

// здесь цикл

END_SUB


LCLICK(100,100)
подпрограмма()

LCLICK(200,200)
подпрограмма()

LCLICK(300,300)
подпрограмма()

LCLICK(400,400)
подпрограмма()

Не осилил... именно в коду можно ? Не по русски, а именно кодом с русскими комментариями, сорри за тупизну ! И главное - как из подпрограммы вернуться к продолжению выполнения скрипта и еще момент есть команда goto (прям бейсик), а return нету ???
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on July 11, 2014, 05:26:39 PM
А это и есть код. Да назвать твою подпрограмму можно прямо по русски, например назовем её Моя_прога. И да, когда дойдет до вызова Моя_прога() выполнение скаканет в подпрограмму SUB(Моя_прога), выполнит все что там написано и вернется на следующую строку после Моя_прога() и тд.

Code: (clickermann) [Select]
SUB(Моя_прога) // эта часть кода отрабатывает ТОЛЬКО ПО ВЫЗОВУ
 
// здесь часто повторяемый код
 
END_SUB // конец подпрограммы
 
 
LCLICK(100,100)
Моя_прога() // вызов подпрограммы
 
LCLICK(200,200)
Моя_прога()
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Полуночник on July 27, 2014, 09:40:14 PM
Ещё раз привет) Извините конечно, но мозги мои совсем закостенели уже(((( Читал справку, облазил весь форум, но так и не врубился как написать скрипт.
Знатоки, будьте так любезны нарисуйте тут образец со следующими пояснениями:
1)запуск скрипта с привязкой к окну(видел описание, но для кучи ещё разок)
2) определение размеров окна ($_xmax,$_ymax)
3) вывод инфы размеров ($_xmax,$_ymax) в лог или трей
Разжуйте пожалуйста, а то пока мои мозги расшевелятся и впитают в себя то что написано в справке пройдёт года полтора)))
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on July 27, 2014, 10:08:19 PM
Нет в кликере функций определения размера окна.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Полуночник on July 28, 2014, 02:33:22 AM
Нет в кликере функций определения размера окна.
Понял :(
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Demon_Ok on July 28, 2014, 09:08:04 PM
Подскажите пожалуйста.
Написал скрипт, без привязки к окну пашет как часы. Но хотелось бы с привязкой и свернуть эти окна что бы не мешались.
Но дело в том что в скрипте используется функция GETSCREEN и она снимает снимок текущего окна. А мне нужно снять экран привязанного окна и использовать PXLCRC
Спасибо.

P.S. Даже не так немного. Если делать привязку к окну, то скрипт неправильно работает.

Code: [Select]
23:16:35 Hash: 800543756 //Без привязки
23:16:35 800543756 //Без привязки
23:16:37 STOP: 3851769229 //Без привязки
23:16:37 3851769229 //Без привязки
23:17:26 Hash: 0 //С привязкой
23:17:26 0 //С привязкой
23:17:28 STOP: 0 //С привязкой
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on July 28, 2014, 09:27:19 PM
Окно сворачивать нельзя, в свернутом окне ничего не отображается. Но окно можно например задвинуть за экран или оставить на фоне.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Demon_Ok on July 28, 2014, 09:31:59 PM
Окно сворачивать нельзя, в свернутом окне ничего не отображается. Но окно можно например задвинуть за экран или оставить на фоне.

Спасибо за ответ. Но даже при активном окне скрипт неправильно срабатывает при привязке к окну.
PXLCRC всегда возвращает 0

P.S.
Извиняюсь, нашел проблему. Решения нету :(

Quote
"Касательно приложения - таки да - это эмулятор андроида и при старте приложения запущенная "apk'шка" действительно оборачивается отдельным процессом"

Всё зависит от приложения + проблема с x64.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on July 28, 2014, 11:41:48 PM
используй виртуальную машину
http://rutracker.org/forum/viewtopic.php?t=4578599 (http://rutracker.org/forum/viewtopic.php?t=4578599)
Лучше скачать портативную. Создаешь расширяемый образ диска на 7-10 гигов, выделяешь 512 мг оперативы и одно ядро процессора ставишь туда XP.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Dampil on August 13, 2014, 08:18:31 PM
Надеюсь, не буду сильно не в тему, если чуть-чуть попытаюсь вспомнить про оптимизацию...

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

Задан массив(например, координаты по икс и игрек)

$arr[0]=123
$arr[1]=111
.
.
.
$arr[39]=321
$arr[39]=222
For($i, $i<40)
  $new_var1=$arr[2*$i] //тут респект автору, напомнил азы программирования :)
  $new_var2=$arr[2*$i+1] //оригинал - в теме "Массивы"
  move($new_var1,$new_var2)
  ldown($new_var1,$new_var2)
  lup($new_var1,$new_var2) 
end_cyc

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

Эффективность увеличивается с ростом количества обращений к элементу массива на каждом шаге
Если честно, на работоспособность не проверял в контексте скриптов, но, надеюсь, работает
Title: Re: внимание!
Post by: Dampil on August 13, 2014, 08:42:25 PM
раскладка должна быть одинакова и в кликере в поле ввода.
Тут непонятный баг. Изначально у меня стоит англ и печатаю от руки в блокноте англ.
Но в момент запуска кликера визуально наблюдается самопроизвольный переход на  русскую раскладку  в языковой панели.

Если не ошибаюсь, по правилам Win при запуске проги какАя бы раскладка ни была, она переключается на раскладку по умолчания
Title: Re: Типовые алгоритмы
Post by: Hito on September 15, 2014, 01:35:28 PM
prapor, вариант цикла с WHILE можно написать куда кароче!
Code: [Select]
// если по координатам 100,100 цвет пиксела НЕ 255, то цикл будет работать

GETSCREEN // снимок в буфер кликера


// условие цикла: если функция PXL находит по координатам 100,100 пиксел любого цвета кроме 255
// цикл будет продолжаться, а как найдет цвет 255 то прервется, и скрипт продолжится дальше после END_CYC

WHILE(PXL(100, 100) ! 255)
   WAITMS(100) // задержка
   GETSCREEN // снимок в буфер кликера внутри цикла
END_CYC

У нуба возникло 3 вопроса )) 1 - первый GETSCREEN (тот, что выше "// условие цикла: если функция" находится) тоже надо прописывать? То есть - GETSCREEN 2 раза надо писать? (К слову - я попробовал и у меня это условие искало и находило пиксель ВООБЩЕ без обоих GETSCREEN...  ???) 2 - Между какими строчками нужно прописывать команды в теле условия, которые будут выполняться, если пиксель НЕ найден? Между "WAITMS(100) // задержка" и "GETSCREEN", или Между "GETSCREEN" и "END_CYC"? И 3 - Как написать такое же условие, но для IF_PICTURE_IN?
Title: Re: Типовые алгоритмы
Post by: Vint on September 15, 2014, 03:12:54 PM
У нуба возникло 3 вопроса )) 1 - первый GETSCREEN (тот, что выше "// условие цикла: если функция" находится) тоже надо прописывать? То есть - GETSCREEN 2 раза надо писать? (К слову - я попробовал и у меня это условие искало и находило пиксель ВООБЩЕ без обоих GETSCREEN...  ???) 2 - Между какими строчками нужно прописывать команды в теле условия, которые будут выполняться, если пиксель НЕ найден? Между "WAITMS(100) // задержка" и "GETSCREEN", или Между "GETSCREEN" и "END_CYC"? И 3 - Как написать такое же условие, но для IF_PICTURE_IN?
1. Тоже, он нужен для первого сравнения PXL. Второй, для последующих в цикле.
(то, что у тебя находило... не запускай для проверки скрипт из открытого редактора. В редакторе GETSCREEN шарашит автоматом всегда - для лупы и показа цвета).
2. перед WAITMS(100).
3. Для IF_PICTURE_IN только раздельно, снаружи искусственный WHILE, внутри IF_PICTURE_IN с флагом  :)
Title: Re: Типовые алгоритмы
Post by: Hito on September 15, 2014, 03:25:28 PM
У нуба возникло 3 вопроса )) 1 - первый GETSCREEN (тот, что выше "// условие цикла: если функция" находится) тоже надо прописывать? То есть - GETSCREEN 2 раза надо писать? (К слову - я попробовал и у меня это условие искало и находило пиксель ВООБЩЕ без обоих GETSCREEN...  ???) 2 - Между какими строчками нужно прописывать команды в теле условия, которые будут выполняться, если пиксель НЕ найден? Между "WAITMS(100) // задержка" и "GETSCREEN", или Между "GETSCREEN" и "END_CYC"? И 3 - Как написать такое же условие, но для IF_PICTURE_IN?
3. Для IF_PICTURE_IN только раздельно, снаружи искусственный WHILE, внутри IF_PICTURE_IN с флагом  :)

Я чую назревает вопрос еще на пару суток... ) Можно пояснить плиз?  ::)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on September 15, 2014, 03:31:44 PM
Для пиксела
Code: (clickermann) [Select]
GETSCREEN
WHILE(PXL(100, 100) ! 255)
   WAITMS(100) // задержка
   GETSCREEN // снимок в буфер кликера внутри цикла
END_CYC

Для картинки
Code: (clickermann) [Select]
WHILE($repeat_pupkin = 0)
   GETSCREEN
   IF_PICTURE_IN (0,0,$_xmax,$_ymax, "file.bmp",-1,100)
      $repeat_pupkin = 1
   ELSE
      WAITMS(100)
   END_IF
END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Hito on September 15, 2014, 03:33:57 PM
Не - про PXL я понял сразу из твоего ответа!  :) Мне про "снаружи искусственный WHILE, внутри IF_PICTURE_IN с флагом" было непонятно. Спс за ответ
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 24, 2014, 07:15:41 PM
Ребята, подсобите пожалуйста, я уже не понимаю и устал. вот есть простенький код, единственный, который я пока осилил. но он работает только в активном режиме, мне же надо его на задний фон поставить, чтобы он работал параллельно с тем как я творю свои дела на компе.
http://crapware.aidf.org/forum/index.php?topic=33.msg562#msg562 - этот пост таранил несколько раз, но пока безуспешно
http://crapware.aidf.org/forum/index.php?topic=33.msg637#msg637 - здесь проще, но проблема возникает в момент когда надо прокрутить колесико вниз-вверх, я так понял, что в фоновом режиме другие команды

Code: (clickermann) [Select]
LCLICK(541,512)  //
WAITMS(RND(2000,5000))  // 0
WHEELDOWN (30) // тут проблема
WAITMS(RND(3000,5000))
LCLICK(788,858)  //
WAITMS(RND(2000,5000))  // 0
LCLICK(732,924)  //
WAITMS(RND(2000,5000))
WHEELUP (30) // и тут
WAITMS(RND(3000,5000))  // 0
LCLICK(757,127)  //
WAIT(RND(1400,2000)) // 20-30 минут
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 24, 2014, 07:35:44 PM
А клавиши "PageUp" "PageDown " вместо колесика не годятся?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 24, 2014, 08:34:26 PM
А клавиши "PageUp" "PageDown " вместо колесика не годятся?

вот спасибо, буду пробовать, совсем отупел. еще такой вопрос - как сделать так чтобы она в лог или в отдельное окошко выводило инфу о том, когда делала последнюю активность (допустим, последний клик мышкой перед долгим делэем) и о том, через какое время этот самый делей кончится? он же у меня рандомно стоит, но я так понимаю, он сразу выбирает число и ставит таймер
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 24, 2014, 08:47:31 PM
Вот так

Code: (clickermann) [Select]
LCLICK(541,512)  //
WAITMS(RND(2000,5000))  // 0

KEYPRESS(#PAGEDOWN)
WAITMS(RND(3000,5000))

LCLICK(788,858)  //
WAITMS(RND(2000,5000))  // 0

LCLICK(732,924)  //
WAITMS(RND(2000,5000))

KEYPRESS(#PAGEUP)
WAITMS(RND(3000,5000))  // 0

LCLICK(757,127)  //

$time = $_time_t + RND(1400,2000) // 23-33 минут
WHILE($time > $_time_t)
   WAIT(1)
   $ts = $time-$_time_t
   $th = 0
   $tm = 0
   while($ts > 3599)
      INC($ts,-3600)
      INC($th, 1)
   end_cyc
   while($ts > 59)
      INC($ts,-60)
      INC($tm, 1)
   end_cyc
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   LOGCLEAR
   LOGWRITE ("Осталось: ",$th,":",$tm,":",$ts)
END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 24, 2014, 09:39:14 PM
спасибо огромное, на такое и не расчитывал, но мне очень хочется понять все ето, а с 18 строки для меня полный лес. можно построчное обьяснение? ::)

видно я что-то не так делаю - не хочет оно в фоновом режиме работать, окно вылезает на первый план и тогда уже все происходит
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on September 25, 2014, 08:09:00 AM
видно я что-то не так делаю - не хочет оно в фоновом режиме работать, окно вылезает на первый план и тогда уже все происходит
Если окно становится активным, то это проблемы окна и винды. Скрипт здесь не при чём.
Если это браузер, нужно попробовать сменить браузер.
Если флешь приложение на хроме - отключить встроенный флешь.
Попробовать отключить аппаратное ускорение в браузере/игре.
Попереключать темы win с aero.
В общем поиграться и попрыгать с бубном, попеть песни призывающие духов скриптов.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 26, 2014, 07:11:12 PM
ох уж мне ети танцы с бубном((
браузер не могу сменить, нужен именно хром. ам не флеш, обычная браузерка. аппаратное ускорение выключил, не помогло. про темы с вин и аеро не уловил. у меня 8ка стоит.
еще такой вопросик - есть команда, чтобы вот ето KEYPRESS(#PAGEDOWN) не по одной страничке листало, а сразу в самый низ, до упора?или какую проверку воткнуть, не соображу
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: aden on September 26, 2014, 10:00:30 PM
KEYPRESS(#END)

вы еще не все кнопки на клавиатуре знаете а уже за скрипты писать взялись
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 26, 2014, 10:45:20 PM
KEYPRESS(#END)

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

извините, я не очень умный уродился, но стараюсь
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 27, 2014, 01:09:39 PM
пересел на Мозиллу, все работает как надо, в фоновом режиме. теперь передо мной стоит задача сделать такую штуку: чтобы оно на каждый 2-3 цикл ( цикл длится 20-30 минут) скрипта делало дополнительные действия. я так понимаю, мне надо в основу кода зашить ссылку на доп скрипт и перед ней проверку на время (с прошлого срабатывания прошло не меньше, допустим, одного часа, как раз те самые 2-3 цикла)

вот еще мелочь , которая досаждает. хочу чтобы лог весел всегда поверх всех окон, то есть всегда был доступен взору. Естесьно, нажимаю в нем кнопочку "поверх всех окон", но буквально через несколько переключенй окон о безнадежно теряется в задах. опять глюки системки?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 27, 2014, 01:30:53 PM
Нечего дробить скрипт!

Прописываещь это условие в конец скрипта и в него свои действия.
Code: (clickermann) [Select]
DEFINE($time, $_time_t + 3600)
IF($time < $_time_t)
   // Сюда твои (дополнительные действия)
   // Условие сработает через час и будет срабатывать каждый час
   
   $time = $_time_t + 3600
END_IF
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 27, 2014, 02:35:39 PM


ок, не буду ничего дробить. проверь пжлст, я прально все понял?

Code: (clickermann) [Select]
DEFINE($time, $_time_t + 3600) // задаем переменную, называем ее $time и делаем ее равной текущему времени + 1 час.
IF($time < $_time_t) // здесь условие выполниться только в том случае, если наша переменная становится меньше текущего времени, то есть если прошел 1 час и больше
   // сюда пропишу все шо хочу
   // Условие сработает через час и будет срабатывать каждый час
   
   $time = $_time_t + 3600 // здесь мы задаем нашей переменной новое обновленное значение, чтобы опять пошел отсчет на час и больше
END_IF

если все так, то куда мне лучше засунуть все ето в свой скрипт. и потом, у меня там есть переменная $time, просто дать другое имя?
вот

Code: (clickermann) [Select]
LCLICK(1009,78)  // 1313280

WAITMS(RND(2000,5000))  // 0

KEYPRESS(#END)
WAITMS(RND(3000,5000))

LCLICK(787,850)  // 16777215

WAITMS(RND(2000,5000))  // 0
LCLICK(738,917)  // 4045725
LCLICK(738,917)  // 4045725

WAITMS(RND(3000,5000))

KEYPRESS(#HOME)

WAITMS(RND(3000,5000))  // 0

LCLICK(757,127)  //



//  так думаю надо засунуть сюда, перед ожиданием (хотел выделить цветом, но внутри кода кликера похоже на работают форумные коды(



$time = $_time_t + RND(1400,2000) // 23-33 минут
WHILE($time > $_time_t)
   WAIT(1)
   $ts = $time-$_time_t
   $th = 0
   $tm = 0
   while($ts > 3599)
      INC($ts,-3600)
      INC($th, 1)
   end_cyc
   while($ts > 59)
      INC($ts,-60)
      INC($tm, 1)
   end_cyc
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   LOGCLEAR
   LOGWRITE ("Осталось: ",$th,":",$tm,":",$ts)
END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 27, 2014, 04:47:09 PM
Да все верно. Назови второй таймер например "$time2" и все будет нормально.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 28, 2014, 08:40:46 AM
Да все верно. Назови второй таймер например "$time2" и все будет нормально.

отлично так и сделал, всю ночь полет нормальный, спасибо большое за разьяснения)) теперь еще вот такой вопрос: как вот ето оформить?

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

чтобы, значит, сообщение в файл выводилось
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 28, 2014, 08:52:17 AM
для этого надо #logfile отдельно прописать в любой строчке до команды print. с этим разобрался, но подскажи можно ли сделать так, чтобы в лог оно записывало только определенную инфу, а не все подряд. то есть надо чтобы в одном месте стоял етот #logfile, а потом вроде как #unlogfile) или так нельзя и тут уж придется дробить скрипт с отдельными подпрограммами?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 28, 2014, 11:25:57 AM
Директивы пишут в начале скрипта и они действуют на весь скрипт, отключить потом их нельзя.

Есть же запись в файл. Вот простой пример.
Code: (clickermann) [Select]
TFWRITE("Log.txt", "Твое сообщение")
Но тебе может потребоваться также запись времени.
Вот пример посложнее. Подпрограммы обычно прописывают в верхней части скрипта, до основного кода.

Code: (clickermann) [Select]
SUB(лог,$str) // подпрограмма должна быть выше её вызова
   IF($str = "пробел")
      LOGWRITE (" ")
      TFWRITE("Log.txt", " ")
   ELSE
      $th = $_time_h
      $tm = $_time_m
      $ts = $_time_s
     
      IF(STRLEN($th)<2)
         $th = STRCONCAT ("0", $th)
      END_IF
      IF(STRLEN($tm)<2)
         $tm = STRCONCAT ("0", $tm)
      END_IF
      IF(STRLEN($ts)<2)
         $ts = STRCONCAT ("0", $ts)
      END_IF
      LOGWRITE ($th,":",$tm,":",$ts, " ",$str)
      TFWRITE("Log.txt", STRCONCAT($th,":",$tm,":",$ts, " ",$str))
   END_IF
END_SUB

$time = 12345

лог("Мое сообщение") // обычная запись
лог(STRCONCAT("Мое сообщение ",$time)) // комбинированная запись
лог("пробел") // записать в лог отступ

HALT

Все просто  ;)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 28, 2014, 01:05:22 PM
ух, полтора часа просидел, разбираясь в твоем примере посложнее) вот что получилось, переработанное под мои потребности

Code: (clickermann) [Select]
SUB(лог,$str)   
      $th = $_time_h
      $tm = $_time_m
      $ts = $_time_s
 
      IF(STRLEN($th)<2)
         $th = STRCONCAT ("0", $th)
      END_IF
      IF(STRLEN($tm)<2)
         $tm = STRCONCAT ("0", $tm)
      END_IF
      IF(STRLEN($ts)<2)
         $ts = STRCONCAT ("0", $ts)
      END_IF
      LOGWRITE ($th,":",$tm,":",$ts, " ",$str)
      TFWRITE("Log.txt", STRCONCAT($th,":",$tm,":",$ts, " ",$str))
END_SUB
 

LCLICK(1089,78)  // центр деры
WAITMS(RND(3000,5000))
GETSCREEN
IF_PICTURE_IN (1266, 284, 1288, 409, 1.bmp)
лог("время обнаружения напа")
HINTPOPUP("идет нап", "ПИСТЕЕЦЦ")
EXECUTE ("C:\Users\Ил\Desktop\Clickermann v4.10\data\sound\1.wav")
WAITMS(2000)
end_if   // конец условия


HALT

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

Code: (clickermann) [Select]
LCLICK(1089,78)  // центр деры
WAITMS(RND(3000,5000))
GETSCREEN
IF_PICTURE_IN (1266, 284, 1288, 409, 1.bmp)
$th = $_time_h
      $tm = $_time_m
      $ts = $_time_s
 
      IF(STRLEN($th)<2)
         $th = STRCONCAT ("0", $th)
      END_IF
      IF(STRLEN($tm)<2)
         $tm = STRCONCAT ("0", $tm)
      END_IF
      IF(STRLEN($ts)<2)
         $ts = STRCONCAT ("0", $ts)
      END_IF
      TFWRITE("Log.txt", STRCONCAT("Время обнаружения" $th,":",$tm,":",$ts, " "))
HINTPOPUP("идет нап", "ПИСТЕЕЦЦ")
EXECUTE ("C:\Users\Ил\Desktop\Clickermann v4.10\data\sound\1.wav")
WAITMS(2000)
end_if   // конец условия


HALT
            

остались такие вопросы: как видишь, у меня стоит execute на аудио сигнал, то есть он открывается обычным проигрывателем, потому что обычным SOUND("1.wav") не играет звук. почему?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 28, 2014, 01:48:37 PM
Ошибка, не хватает запятой
Code: (clickermann) [Select]
TFWRITE("Log.txt", STRCONCAT("Время обнаружения", $th,":",$tm,":",$ts))Имя файла должно быть в кавычках
Code: (clickermann) [Select]
IF_PICTURE_IN (1266, 284, 1288, 409, "1.bmp")   

Папка где лежит скрипт является корнем. Туда и нужно класть твои файлы.
Code: (clickermann) [Select]
SOUND("1.wav")Или для порядка создать в ней еще одну папку, например "Звуки"
Тогда путь будет выглядить так
Code: (clickermann) [Select]
SOUND("Звуки\1.wav")
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 28, 2014, 02:52:40 PM
воо, спасибо, отлично работает! а то я нашел внутри папку Sound, и туда как ишак звуки пихал)

а вот ето у мене отлично и без кавычек имя файла находит))
Code: (Clickermann) [Select]
IF_PICTURE_IN (1266, 284, 1288, 409, "1.bmp")
   
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Barma1ey on September 28, 2014, 04:34:25 PM
Всем доброго времени суток. Интересует один вопросик. Можно ли как-то проанализировать наличие пикселей в окне (функции PXL, PXLCOUNT), если оно свернуто или закрыто другим окном?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: aden on September 28, 2014, 04:41:57 PM
Всем доброго времени суток. Интересует один вопросик. Можно ли как-то проанализировать наличие пикселей в окне (функции PXL, PXLCOUNT), если оно свернуто или закрыто другим окном?
только если используется оконный режим в кликере с установкой активного окна через hset(hwnd)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 28, 2014, 05:20:47 PM
скажите, а можно каким либо образом (например EXECUTE) настроить уведомление за рамки компутера - по имейлу или любому мессенджеру (скайп, вибер). вот задался вопрос, но пока очевидного решения не нашел
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Barma1ey on September 28, 2014, 05:40:42 PM
Quote
только если используется оконный режим в кликере с установкой активного окна через hset(hwnd)
Спасибо за ответ, но нельзя ли с примером и разъяснениями, а то, если честно, я ничего не понял.

Допустим я открываю этот форум в опере, выставляю положение окна оперы и ее размер, и получаю номер пикселя с координатами 200, 325:
Code: [Select]
$hwnd = WNDFIND("Типовые алгоритмы")
WNDPOS($hwnd,100,50)
WAITMS(500)
WNDSIZE($hwnd,1200,950)
WAITMS(500)
$pxl = PXL(210,325)
Затем я включаю любую другую вкладку, либо просто сворачиваю оперу, либо открываю например фотошоп, который закрывает окно оперы. Как мне получить номер пикселя со страницы этого форума?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 28, 2014, 05:50:46 PM
Наводишь мышь на окно, нажимаешь Alt+W теперь кликер перешел в оконный режим. Координаты теперь отсчитываются от начала этого окна, смотришь какие координаты и вписываешь в скрипт.
Сворачивать окно нельзя так как при этом винда ничего в нем не отрисовывает.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 28, 2014, 05:54:03 PM
скажите, а можно каким либо образом (например EXECUTE) настроить уведомление за рамки компутера - по имейлу или любому мессенджеру (скайп, вибер). вот задался вопрос, но пока очевидного решения не нашел

У adenа видел скрипт с передачей лога в ICQ как раз через EXECUTE.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: aden on September 28, 2014, 07:58:39 PM
скажите, а можно каким либо образом (например EXECUTE) настроить уведомление за рамки компутера - по имейлу или любому мессенджеру (скайп, вибер). вот задался вопрос, но пока очевидного решения не нашел

execute + mimcmd.exe + miranda c плагином cmdline
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 29, 2014, 06:21:44 PM
ниче не понял, но ладно.
другой вопрос назрел - вот обратил внимание на отсчет количества проигранных циклов в главном окне проги. Подскажите, что надо прописать, чтобы определенные действия оно делало на каждый, например, третий цикл, если такое возможно? 
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 29, 2014, 07:43:26 PM
ниче не понял, но ладно.
другой вопрос назрел - вот обратил внимание на отсчет количества проигранных циклов в главном окне проги. Подскажите, что надо прописать, чтобы определенные действия оно делало на каждый, например, третий цикл, если такое возможно? 

Ну опять все через условия

Code: (clickermann) [Select]
INC($count,1)
IF($count = 3)
   // здесь действия на 3ем цикле
   
   $count = 0 // сброс
END_IF
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: aden on September 29, 2014, 09:34:24 PM
Такое возможно только после прочтения встроенной справки, она компактная и доходчивая.
Встроенная справка не поможет, тут необходимо сторон неё ПО реагирующее на команды из терминала каковым и является приведённая связка
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on September 30, 2014, 08:58:35 AM
Встроенная справка не поможет, тут необходимо сторон неё ПО реагирующее на команды из терминала каковым и является приведённая связка
ответ был на вопрос "... что надо прописать, чтобы определенные действия оно делало на каждый, например, третий цикл..."
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: aden on September 30, 2014, 09:02:55 AM
С телефона не заметил, сори
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on September 30, 2014, 09:10:43 AM
С телефона не заметил, сори
Вот так понравилась идея, ещё когда первый раз обсуждали, всё лень попробовать.
Останавливает то, что мирандой не пользовался ни разу. Что, где, какая версия подходит, какая версия плагина и где искать.
Для новичков или таких ленивых как я не можешь выложить связку в виде ссылок хотя бы? Буду премного благодарен.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Barma1ey on September 30, 2014, 05:30:26 PM
Наводишь мышь на окно, нажимаешь Alt+W теперь кликер перешел в оконный режим. Координаты теперь отсчитываются от начала этого окна, смотришь какие координаты и вписываешь в скрипт.
Сворачивать окно нельзя так как при этом винда ничего в нем не отрисовывает.
Проблема в том, что когда я нажимаю "Alt+W", то в любом месте окна цвет пикселя становится черным, т.е. проанализировать пиксели невозможно...
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on September 30, 2014, 05:49:38 PM
Проблема в том, что когда я нажимаю "Alt+W", то в любом месте окна цвет пикселя становится черным, т.е. проанализировать пиксели невозможно...
В браузере? Отключи аппаратное ускорение если включено.
Как и сворачивать окно, другую вкладку открывать не катит. Если нужен этот браузер, только новое окно поверх.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Krisp on September 30, 2014, 07:30:58 PM
Ну опять все через условия

Code: (clickermann) [Select]
INC($count,1)
IF($count = 3)
   // здесь действия на 3ем цикле
   
   $count = 0 // сброс
END_IF

то есть нам не надо отдельно обьявлять переменную $count заранее, она создается прямо тут же, в  INC? и еще такой вопрос: этот цикл будет происходит независимо от цикла всего скрипта, так? то есть возможно, что в течение одного цикла всего скрипта здесь пройдет 2-3 цикла (при специальной настройки)?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 30, 2014, 07:38:23 PM
Я не знаю куда ты это хочешь засунуть но единовременно может выполняться только одна строка в скрипте, как только выполнение доберется до INC($count,1) тогда и произойдет наращивание.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Barma1ey on September 30, 2014, 08:51:56 PM
то есть нам не надо отдельно обьявлять переменную $count заранее, она создается прямо тут же, в  INC? и еще такой вопрос: этот цикл будет происходит независимо от цикла всего скрипта, так? то есть возможно, что в течение одного цикла всего скрипта здесь пройдет 2-3 цикла (при специальной настройки)?

1) ну, теоретически, так как она не была задана ранее, то по умолчанию она равна 0.
2) этот "цикл" будет происходить в теле основного цикла, так как это не цикл, а проверка условия на равенство $count трем, а будет оно равно трем при третьем прохождении основного цикла и обнулится
3) при специальной настройке (добавлении цикла внутри цикла при помощи FOR, WHILE) можно сколько хочешь выполнений условий.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: freedom on October 21, 2014, 12:57:41 AM
$HWND = 16515858 // изменяется при каждом запуске целевой программы,
                // нужно каждый раз вписывать заного

Как можно еще привязать к окну например по запущенному процессу в системе или...?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on October 21, 2014, 01:26:12 AM
Окно можно привязать по координате, командой HGET.
можно через поиск текста заголовка командой WNDFIND

Пример
Code: (clickermann) [Select]
HSET(HGET(100,100),1) // привязываем окно по координате 100 100 (координаты всегда абсолютные)
HSET(WNDFIND("Заголовок окна", 0),1) // привязываем окно с заданным заголовком
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on November 01, 2014, 03:24:36 PM
Распознавание чисел
Скрипт переделан под версии 4.10+

Источник (http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571)
Вот набросал распознавалку чисел. В основном для использования в играх, т.к. есть ограничения...
Старался сделать универсальным и настраиваемым. Не важно выравнивание идёт по первому или последнему разряду.
Вариант скрипта с последовательным перебором разрядов.
Хотел обойтись без текстовых файлов, только переменные. Использование текстовых файлов уменьшило бы размер скрипта, но я думаю сказалось бы незначительно на скорости работы и удобстве настройки.
Скрипт при внедрении лучше организовать как подпрограмму.

О ограничениях.
  • Только целые положительные числа. Думаю для игр этого хватит, здоровье там всякое, сила и т.п.
  • Максимум 10 разрядов. Если кровь из носа - можно переписать скрипт на другое кол-во  :)
  • Расположение цифр равномерное. Что это значит: разряды должны идти через равный промежуток
    299000, а не 299 000 и т.п.
  • Определение конца числа по маркеру (картинке) либо по отсутствию найденных цифр. Файл *11.bmp должен быть всё равно, например мой digit_11.bmp

Настройка.
Не пугаться! Письменно выглядит много, но всё на самом деле просто.
  • Необходимо заготовить картинки с цифрами 1,2,3,4,5,6,7,8,9,0 дать им соответствующие имена digit_1.bmp-digit_0.bmp
    Можно заготовить маркер окончания digit_11.bmp
  • Замерить шаг разрядов - расстояние в пикселах от начала одной цифры до начала следующей и присвоить переменной $sdvig значение чуть меньше (можно на 1-2 пиксела, для больших шрифтов можно и больше).
  • Если в пределах вашего скрипта буде распознаваться несколько шрифтов, при вызове подпрограммы нужно каждый раз задавать $sdvig и префикс имён файлов $pref. Если шрифт один - только один раз.
  • При вызове задаём координаты поля в котором будет искаться число
    $field_x1, $field_y1, $field_x2=, $field_y2
  • Результат возвращается в переменную $res, если не найдено $res=-1.

Скрипт "Распознавание чисел 1.2.cms" подключается к исполняемому скрипту через include.
Открываем "Скрипт.cms"
В вызове подпрограммы указываем область в которой будут распознаваться цифры и сдвиг
распознавание(300,577, 362,597, 6)

В архиве находится пример распознавания числа в поле редактора "Цвет:". или HWND
Если распознаются не все числа, нужно подрегулировать сдвиг (больше/меньше)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: dramster on November 01, 2014, 11:51:25 PM
хочу предложить свой вариант определения чисел. я думаю он немного быстрее и легче в настройке.

данный скрипт в данном виде настроен на определения числа номера цвета в км (естественно на моем пк)

Code: (clickermann) [Select]
$1 = 2598951422
$2 = 3563910420
$3 = 1725485783
$4 = 2439610189
$5 = 1142298982
$6 = 1619652509
$7 = 1251613421
$8 = 3997989515
$9 = 228076718
$0 = 1886634037

$x1 =  813 //координаты первой цифры, необязательно чтобы цифра полностью влазила в эти координаты
$y1 =  621
$x2 =  818
$y2 =  630

GETSCREEN
//$n = 1
//WHILE($n ! 9) //определение значений переменных, в км номер цвета 8-значный, поэтому в начале определяем от 1 до 8, а вторым кругом 9 и 0. естественно выставляем цвет номер 12345678, вторым кругом 90. после определеня их нужно вписать в переменные выше.
//
//   $count = PXLCRC ($x1,$y1,$x2,$y2)
//   print($n," = ", $count)
//   INC($n,1)
//   INC($x1,7)//шаг между цифрами
//   INC($x2,7)
//END_CYC
//halt

WHILE($n ! 1) //непосредственно определение цифр и запись их в массив
   $n = PXLCRC($x1,$y1, $x2,$y2)
   
   switch($n)
   case($0)
      ARRPUSH ($var, 0)
   case($1)
      ARRPUSH ($var, 1)
   case($2)
      ARRPUSH ($var, 2)
   case($3)
      ARRPUSH ($var, 3)
   case($4)
      ARRPUSH ($var, 4)
   case($5)
      ARRPUSH ($var, 5)
   case($6)
      ARRPUSH ($var, 6)
   case($7)
      ARRPUSH ($var, 7)
   case($8)
      ARRPUSH ($var, 8)
   case($9)
      ARRPUSH ($var, 9)
   default
      $n = 1
   end_switch
   
     INC ($x1,7)
     INC ($x2,7)         
END_CYC


$num = 0
$r = 1
WHILE(ARRSIZE ($var) ! 0)//с помощью математики собираем всё в единое число
   $num = int(arrpop($var))*$r+$num
   $r = $r*10   
END_CYC

print($num)

halt
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: formica on December 01, 2014, 06:32:40 PM
Здравствуйте  только недавно начал разбираться с программой и нужна помощь

// если по координатам 100,100 цвет пиксела НЕ 255, то цикл будет работать

GETSCREEN // снимок в буфер кликера


// условие цикла: если функция PXL находит по координатам 100,100 пиксел любого цвета кроме 255
// цикл будет продолжаться, а как найдет цвет 255 то прервется, и скрипт продолжится дальше после END_CYC

WHILE(PXL(100, 100) ! 255)
   WAITMS(100) // задержка
   GETSCREEN // снимок в буфер кликера внутри цикла
END_CYC

как сделать такое условие если по координатам 100,100 цвет пиксела НЕ 255 или не 250, то цикл будет работать
чтобы было два условия окончания цикла
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on December 01, 2014, 06:47:07 PM
Code: (clickermann) [Select]
GETSCREEN
WHILE((PXL(100, 100) ! 255)|(PXL(100, 100) ! 250))
   WAITMS(100) // задержка
   GETSCREEN // снимок в буфер кликера внутри цикла
END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: formica on December 01, 2014, 07:04:52 PM
Code: (clickermann) [Select]
GETSCREEN
WHILE((PXL(100, 100) ! 255)|(PXL(100, 100) ! 250))
   WAITMS(100) // задержка
   GETSCREEN // снимок в буфер кликера внутри цикла
END_CYC
уточните пожалуйста цикл закончится если пиксель будет 255 или 250(любого из двух цветов) или должны выполнится оба условия
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Kedrick on December 01, 2014, 07:23:22 PM
как сделать такое условие если по координатам 100,100 цвет пиксела НЕ 255 или не 250, то цикл будет работать
чтобы было два условия окончания цикла
Ты дал условие.

уточните пожалуйста цикл закончится если пиксель будет 255 или 250(любого из двух цветов) или должны выполнится оба условия
Получил на него точный ответ и спрашиваешь снова то-же самое.
Ты думаешь мы тут собрались чтобы тебя обманывать и радостно хихикать при этом чтоли?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on December 01, 2014, 07:31:55 PM
уточните пожалуйста цикл закончится если пиксель будет 255 или 250(любого из двух цветов) или должны выполнится оба условия

| - обозначает ИЛИ
& - обозначает И
^ - обозначает ИЛИ то ИЛИ другое но не оба

Да пока оба условия не станут ложными цикл будет крутиться, если одно из них будет верным цикл будет продолжаться.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: formica on December 01, 2014, 07:39:25 PM
уточните пожалуйста цикл закончится если пиксель будет 255 или 250(любого из двух цветов) или должны выполнится оба условия

| - обозначает ИЛИ
& - обозначает И
^ - обозначает ИЛИ то ИЛИ другое но не оба
спасибо
а теперь объясните мне дураку что у меня неправильно
GETSCREEN
COLORMODE(6, 773, 184, 780, 187)
WHILE((PXL(774, 186) ! 4161407)|(PXL(774, 186) ! 4144959))
   lclick(530, 335)
   WAIT(3)
   GETSCREEN
   COLORMODE(6, 773, 184, 780, 187)
END_CYC
lclick(983, 728)
WAIT(3)
заранее спасибо
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: formica on December 01, 2014, 07:44:15 PM
у меня просто крутит цикл хотя второе условие PXL(774, 186) ! 4144959  выполняется
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on December 01, 2014, 07:52:29 PM
Запись в лог нам все разъяснит
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6, 773, 184, 780, 187)
WHILE((PXL(774, 186) ! 4161407)|(PXL(774, 186) ! 4144959))
   LOGWRITE ("Цвет: ", PXL(774, 186))
   lclick(530, 335)
   WAIT(3)
   GETSCREEN
   COLORMODE(6, 773, 184, 780, 187)
END_CYC
lclick(983, 728)
WAIT(3)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: formica on December 01, 2014, 08:15:47 PM
Запись в лог нам все разъяснит
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6, 773, 184, 780, 187)
WHILE((PXL(774, 186) ! 4161407)|(PXL(774, 186) ! 4144959))
   LOGWRITE ("Цвет: ", PXL(774, 186))
   lclick(530, 335)
   WAIT(3)
   GETSCREEN
   COLORMODE(6, 773, 184, 780, 187)
END_CYC
lclick(983, 728)
WAIT(3)
вот что выдал лог
20:14:22 Цвет: 4144959
20:14:25 Цвет: 4144959
20:14:28 Цвет: 4144959
20:14:32 Цвет: 4144959
20:14:35 Цвет: 4144959
20:14:38 Цвет: 4144959
20:15:03 Цвет: 4144959
20:15:06 Цвет: 4144959
20:15:09 Цвет: 4144959
20:15:12 Цвет: 4144959
20:15:15 Цвет: 4144959
20:15:18 Цвет: 4144959
20:15:21 Цвет: 4144959
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: formica on December 01, 2014, 08:44:16 PM
еще один момент
условие WHILE(PXL(774, 186) ! 4161407) работает
 а условие WHILE((PXL(774, 186) ! 4161407)|(PXL(774, 186) ! 4144959)) не работает и для цвета 4144959 и для 4161407

Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on December 01, 2014, 09:38:20 PM
А ну да, там же одинаковые координаты, тогда правильно И.

Code: (clickermann) [Select]
    GETSCREEN
    COLORMODE(6, 773, 184, 780, 187)
    WHILE((PXL(774, 186) ! 4161407)&(PXL(774, 186) ! 4144959))
      lclick(530, 335)
      WAIT(3)
      GETSCREEN
      COLORMODE(6, 773, 184, 780, 187)
    END_CYC
    lclick(983, 728)
    WAIT(3)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: formica on December 01, 2014, 09:41:37 PM
еще один момент
условие WHILE(PXL(774, 186) ! 4161407) работает
 а условие WHILE((PXL(774, 186) ! 4161407)|(PXL(774, 186) ! 4144959)) не работает и для цвета 4144959 и для 4161407

если проверяется один и тот же пиксель одновременно на отсутствие двух цветов, то почему в условиях "или" должно быть "и", ведь пиксель не может быть одновременно двух цветов.
WHILE((PXL(774, 186) ! 4161407)&(PXL(774, 186) ! 4144959))
и вообще не проще применить COLORMODE и проверять один цвет?
спасибо за совет вроде все работает
а смысл в том что цикл должен повторяться пока пиксель не будет 4161407 цвета но может так случится что во время выполнения цикла битва заканчивается и цикл становится бесконечным для этого тот же пиксель проверяется на другой цвет 4144959
в общем еще раз спасибо всем кто мне помог разобраться
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Kubus on January 19, 2015, 12:53:59 PM
хочу предложить свой вариант определения чисел. я думаю он немного быстрее и легче в настройке.

данный скрипт в данном виде настроен на определения числа номера цвета в км (естественно на моем пк)

Code: (clickermann) [Select]
$1 = 2598951422
$2 = 3563910420
$3 = 1725485783


привет, я недавно стал пользоваться автокликером, возможно я еще далеко не все уловки знаю, заинтересовал твой метод, о котором ты говори в своем посте. Не можешь подсказать что именно ты использовал за основу в своем скрипте. Если можно в общих чертах?
Сейчас пользую алгоритм в котором сравниваются изображения циферок  прочел твой пост - зацепило....
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on January 19, 2015, 01:15:35 PM
привет, я недавно стал пользоваться автокликером, возможно я еще далеко не все уловки знаю, заинтересовал твой метод, о котором ты говори в своем посте. Не можешь подсказать что именно ты использовал за основу в своем скрипте. Если можно в общих чертах?
Сейчас пользую алгоритм в котором сравниваются изображения циферок  прочел твой пост - зацепило....
Он использует PXLCRC - контрольныю сумму области.
Только вот беда, в большинстве случаев в играх (прозрачный/полупрозрачный фон, градиентный фон, сглаживание, сдвиг числа по полю, рендеринг со сдвигом на пол пикселя) похоронят этот способ в зародыше.
Можно использовать только при абсолютно 100% одинаковом отрисовывании чисел. + прицеливаться в первую цифру нужно до пикселя.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: dramster on January 19, 2015, 02:41:05 PM
Только вот беда, в большинстве случаев в играх (прозрачный/полупрозрачный фон, градиентный фон, сглаживание, сдвиг числа по полю, рендеринг со сдвигом на пол пикселя) похоронят этот способ в зародыше.

 все верно. но я думаю плюс этого способа в скорости.возможно я и ошибаюсь, вариант с изображениями циферок не проверял :).
 когда мне нужно было считывать четыре семизначных числа (включая знак "-" и ".") из артмани, км с помощью PXLCRC справлялся за 70-90мс. эти числа - координаты. и с такой скоростью у меня в игре автобус ехал как по ниточке. readmem к сожелению нечитает числа с точкой, а в моем случае он вообще нечитает в игре ничего  :-\.
 во втором случае мне нужно было мониторить цены в магазине в игре, опять же скорость это хороше. но ... полупрозрачное окно. подставил под это окно другое окно с постоянным цветом (белое текстовое поле), и проблем нет.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Kubus on January 19, 2015, 05:16:36 PM
привет, я недавно стал пользоваться автокликером, возможно я еще далеко не все уловки знаю, заинтересовал твой метод, о котором ты говори в своем посте. Не можешь подсказать что именно ты использовал за основу в своем скрипте. Если можно в общих чертах?
Сейчас пользую алгоритм в котором сравниваются изображения циферок  прочел твой пост - зацепило....
Он использует PXLCRC - контрольныю сумму области.
Только вот беда, в большинстве случаев в играх (прозрачный/полупрозрачный фон, градиентный фон, сглаживание, сдвиг числа по полю, рендеринг со сдвигом на пол пикселя) похоронят этот способ в зародыше.
Можно использовать только при абсолютно 100% одинаковом отрисовывании чисел. + прицеливаться в первую цифру нужно до пикселя.

Quote
Только вот беда, в большинстве случаев в играх (прозрачный/полупрозрачный фон, градиентный фон, сглаживание, сдвиг числа по полю, рендеринг со сдвигом на пол пикселя) похоронят этот способ в зародыше.
все верно. но я думаю плюс этого способа в скорости.возможно я и ошибаюсь, вариант с изображениями циферок не проверял :).
 когда мне нужно было считывать четыре семизначных числа (включая знак "-" и ".") из артмани, км с помощью PXLCRC справлялся за 70-90мс. эти числа - координаты. и с такой скоростью у меня в игре автобус ехал как по ниточке. readmem к сожелению нечитает числа с точкой, а в моем случае он вообще нечитает в игре ничего  :-\.
 во втором случае мне нужно было мониторить цены в магазине в игре, опять же скорость это хороше. но ... полупрозрачное окно. подставил под это окно другое окно с постоянным цветом (белое текстовое поле), и проблем нет.


dramster ,Vint -  спасибо за скоростную реакцию, подумал и понял что не подходит, у меня подложка градиентная, придется перебирать картинки, ну  это уже не проблема
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: dramster on January 19, 2015, 10:33:27 PM
у меня подложка градиентная
я думаю, что если шрифт цифр более менее жирный, то можно использовать подсчет пикселей определенного цвета (цвета цифр), PXLCOUNT (x, y, x2, y2, color) вместо PXLCRC. главное чтобы количество пикселей на каждую цифру было разным.
Title: Re: Типовые алгоритмы, вводные статьи
Post by: surfbigmir on April 17, 2015, 08:31:49 PM
Хе-хе, красиво получилось!
:( В вин8 не получился рисунок
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on April 18, 2015, 11:12:04 AM
А в win 52 вообще не получится...
Вы на дату смотрите? Скрипт под версию наверно 4.5. Кликермэна естественно.
Чтобы заработало нужно переделать под текущую.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Skomopox on April 20, 2015, 04:03:48 PM
Привет Всем! Чтоб не создавать тему, может сюда подойдёт, а то нечто схожее есть. Правда вопрос у меня. Про картинки. Есть картинки с числами. Как оказалось, у них меняются пикселя. Т.е. вроде и не видно, число, как число, но при увеличении видно, как меняются пикселя. Я начал использовать 8 колормод. Всего 2 цвета. Вот там то и стало отчётливо видно, что цифра-картинка каждый раз от 2-3 до 7-10 пикселей, как бы смещается, соответственно, картинку уже кликер найти не может. Т.е. в 8ом моде фон весь чёрный, а само число белое. И вот эти белые пикселя съезжают на 1 -2 координаты в разнык стороны. Я пробовал тогда применить процентное соотношение. НО, тоже не помогло. Потому что допустим при 98% многое видит, как надо, а бывает многое, при чём теже цифры и не видит иногда вовсе. Ставишь на 97%, уже начинает путать сами цифры. Может кто-то что-то подобное делал когда-нибудь, есть идея у кого, как можно распознать картинку, чтобы точно знать, что там за цифры? Спасибо!
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on April 20, 2015, 04:12:36 PM
Привет Всем! Чтоб не создавать тему, может сюда подойдёт, а то нечто схожее есть. Правда вопрос у меня. Про картинки. Есть картинки с числами. Как оказалось, у них меняются пикселя. Т.е. вроде и не видно, число, как число, но при увеличении видно, как меняются пикселя. Я начал использовать 8 колормод. Всего 2 цвета. Вот там то и стало отчётливо видно, что цифра-картинка каждый раз от 2-3 до 7-10 пикселей, как бы смещается, соответственно, картинку уже кликер найти не может. Т.е. в 8ом моде фон весь чёрный, а само число белое. И вот эти белые пикселя съезжают на 1 -2 координаты в разнык стороны. Я пробовал тогда применить процентное соотношение. НО, тоже не помогло. Потому что допустим при 98% многое видит, как надо, а бывает многое, при чём теже цифры и не видит иногда вовсе. Ставишь на 97%, уже начинает путать сами цифры. Может кто-то что-то подобное делал когда-нибудь, есть идея у кого, как можно распознать картинку, чтобы точно знать, что там за цифры? Спасибо!

Я делал и не раз. Подбирать режимы нужно. Муторно это.
Всё зависит от шрифта. На мелких вообще тяжело.
Попробуй не 8 режим, а 7. Если в 8 много пикселов меняется тяжело подобрать, чтобы не путал. Особенно 0 и 8, ну и другие похожие.
Выложи скрины шрифта, лучше несколько вариантов. Без коррекции. Может и удастся подобрать.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Skomopox on April 21, 2015, 01:03:30 PM
Привет, Игорь! Там не шрифт, а картинки на флэше. Наверное не буду выкладывать. Это действительно муторно, да и затянется. Меняется, да нормально всякого. Я пока нашёл другой способ определить там цифры. Пока всё работает. Поэтому не стоит заморачиваться. Но как всегда, Спасибо за поддержку :)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: bofka on April 27, 2015, 02:49:58 AM
Подскажите пожалуйста, из-за чего нет перехода к след сценарию...


if (strpos(fromclip(),"Надо много денег")>0)
load("babki.cms")
END_IF

В вызываемом файле стоит имя, по отдельности запускается и пашет, но из poiska.cms не переходит в babki.cms может "load" как то не так я указал?

спасибо.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on April 27, 2015, 07:31:21 AM
load устаревшая функция, грузит скрипт начиная от папки project.
Лучше не дробить скрипт на файлы а использовать циклы.
Выложи оба скрипта.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: bofka on April 27, 2015, 10:47:57 PM
эх ... если сценарий этого файла закончился, мне надо чтоб он перешел в другой, и речь идет не о скрипте, а об сценарии, мне из 1го сценария надо прыгнуть в другой, в 1 фаил столько всего пихать .... имхо не ... подскажите с аналогом LOAD если она устаревшая, то есть что то новое ? или подскажите в какой раздел бежать ...
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on April 28, 2015, 08:02:32 AM
Чем отличается "сценарий" от "скрипта"?

Можно и в разных файлах держать. Части скрипта из других файлов подключать по
Code: (clickermann) [Select]
#include "babki.cms"
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Telion on August 05, 2015, 02:27:30 PM
Не знаю где спросить, спрошу тут )
Проблемка такая, кликерман работает с программкой, у нее полупрозрачное окно, т.е. кликерман его не видит. Если в менеджере окон выставляю прозрачность 100%, то все норм, но периодически у меня снова появляются полупрозрачные окна, и тут вопрос, можно ли как-нибудь устанавливать прозрачность в коде?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on August 05, 2015, 05:40:16 PM
В коде, нет. Если только через сторонние утилиты.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 06, 2015, 07:53:59 PM
Всем привет.
обьясните нубу какая разница как я буду объявлять  переменную
через define или просто напишу ее в скрипте?
заранее спасибо ;D
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on August 07, 2015, 06:55:09 AM
Всем привет.
обьясните нубу какая разница как я буду объявлять  переменную
через define или просто напишу ее в скрипте?
заранее спасибо ;D

DEFINE присваивает переменной значение только если этой переменной до этого не было.

Здесь при запуске сценария DEFINE присвоит $var значение 20 и на последующих проходах скрипта менять $var уже не будет.
Code: (clickermann) [Select]
DEFINE($var, 20) // начальное значение
LOGWRITE ($var)

INC($var,1)
WAITMS(500)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 07, 2015, 10:43:47 AM
Спасибо. Сейчас сравнил лог после твоего скрипта, и моего :)
Code: (clickermann) [Select]
$var = 20
LOGWRITE ($var)
INC($var,1)
WAITMS(500)
Здесь в логе всегда 20 было, а в нижнем примере значение менялось на 1 после каждого прохода
Code: (clickermann) [Select]
DEFINE($var, 20) // начальное значение
LOGWRITE ($var)
INC($var,1)
WAITMS(500)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 11, 2015, 07:21:56 PM
Всем привет подскажите как вставить в буфер сообщение из переменной?
пример:
Code: (clickermann) [Select]
DEFINE ($Message, Всем удачи)
TOCLIP ("$Message")
LCLICK(81, 171)
WAIT(1)
KEYDOWN (#CTRL)
WAITMS (100)
KEYDOWN (#V)
WAITMS (100)
KEYUP (#V)
KEYUP (#CTRL)
WAIT(1)
LCLICK(626, 216)
WAIT(1)
В чате появилось $Message, а не значение переменной.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Atas on August 11, 2015, 07:44:24 PM
Всем привет подскажите как вставить в буфер сообщение из переменной?
[spoiler]
пример:
Code: (clickermann) [Select]
DEFINE ($Message, Всем удачи)
TOCLIP ("$Message")
LCLICK(81, 171)
WAIT(1)
KEYDOWN (#CTRL)
WAITMS (100)
KEYDOWN (#V)
WAITMS (100)
KEYUP (#V)
KEYUP (#CTRL)
WAIT(1)
LCLICK(626, 216)
WAIT(1)
В чате появилось $Message, а не значение переменной.
Привет, у тебя просто кавычки не в тех местах где надо стоят.
Code: (clickermann) [Select]
DEFINE ($Message, "Всем удачи")
TOCLIP ($Message)
LCLICK(81, 171)
WAIT(1)
KEYDOWN (#CTRL)
WAITMS (100)
KEYDOWN (#V)
WAITMS (100)
KEYUP (#V)
KEYUP (#CTRL)
WAIT(1)
LCLICK(626, 216)
WAIT(1)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 11, 2015, 08:43:16 PM
Спасибо большое :)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 19, 2015, 12:14:23 AM
Всем доброй ночи ;D
Вопрос по синтаксису.
Как написать двойное условие в цикле WHILE?
Нужно что бы цикл выполнялся пока одно из двух условий не станет верным.
В справке к программе не нашел ответа(
Пример:
Code: (clickermann) [Select]
WHILE (($MG ! $maximumGain) | ($strengthening > $_time_t))
Бла Бла :)
END_CYC
этот цикл работает пока оба условия не выполнятся :)
как сделать что бы если одно из двух совпало цикл останавливался?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on August 19, 2015, 07:12:46 AM
За место или надо и.
Code: (clickermann) [Select]
WHILE (($MG ! $maximumGain) & ($strengthening > $_time_t))

END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 30, 2015, 07:04:55 PM
Всем привет. Еще один нубский вопрос)
Написал небольшой сценарий для игры с использованием двух потоков для проверки сплывающих окон.
кусок скрипта)
Code: (clickermann) [Select]
THREAD (KILL, 0)
#include "prog.cms"
ATTACK()
END_THREAD

GETSCREEN
IF_PIXEL_IN (784, 44,802, 59, 9095142)
LCLICK ($_return1, $_return2)
WAIT(5)
SetThread (KILL, 1)
END_IF

push:
WHILE (($p ! $fuckingPush) & ($r !  $errorConnectings))
GETSCREEN
$p = PXLCRC (461, 329, 498, 345)
$r = PXLCOUNT (246, 249, 322, 263, 14582784)
WAITMS (3000)
END_CYC
SetThread (KILL, 0)
IF ($p = $fuckingPush)
LCLICK (461, 329)
WAIT (3)
else
LCLICK (472, 384)
WAIT(40)
end_if
SetThread (KILL, 1)
goto(push)

У меня такой вопрос почему после того как всплывает сообщение, и поток становится на паузу с курсором на экране не чего не происходит? То есть программа работает как мне нужно всплывает окно поток встает на паузу, происходит клик для закрытия окна, программа работает дальше.  НО почему то курсор находится в центре экрана неподвижно. В программе производятся клики по координатам, а в это время курсор неподвижно находится в центре экрана.  До момента пока выскакивает пуш сообщение курсор передвигается по координатам, и визуально на экране это видно. После остановки, и запуска потока клики есть  но их не видно)
может быть косяк в коде? я недавно начал вникать в написание алгоритмов для кликерман так что извините за нубизм, и много букв)
Хочу что бы все работало как часы подскажите где ошибка пожалуйста, или как без потоков можно реализовать проверку пуш сообщений?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 30, 2015, 07:21:46 PM
Code: (clickermann) [Select]
SUB (ATTACK)
DEFINE ($active, 949237435)
DEFINE ($maximumGain, 3748378392)
DEFINE ($resetTimeout, 776058941)
WHILE ($AP ! $active)
GETSCREEN (215,387, 261,397)
$AP = PXLCRC (215,387, 260,396)
WAIT(1)
END_CYC
LCLICK(215,387)
WAIT(15)

DEFINE ($strengthening, $_time_t + 60)
WHILE (($MG ! $maximumGain) | ($strengthening > $_time_t))
GETSCREEN (786,545, 835, 564)
$MG = PXLCRC (786,545, 834, 563)
LCLICK (rnd (850, 930), rnd (544, 568)) 
WAITMS (rnd (1900, 2100))
END_CYC

DEFINE ($time, $_time_t + 2000)
WHILE($time > $_time_t)
GETSCREEN (635,290, 669,307)
$RT = PXLCRC (635,290, 668,306)
if ($RT ! $resetTimeout)
LCLICK(rnd(700, 800),rnd(220, 260)) 
WAIT(rnd (4, 6))
LCLICK(rnd(13, 113),rnd(550, 570))
WAIT(rnd (6, 8))
else
wait(1)
end_if
END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on August 30, 2015, 08:04:21 PM
Строчки
Code: (clickermann) [Select]
   DEFINE ($strengthening, $_time_t + 60)

   DEFINE ($time, $_time_t + 2000)
сработают один раз пока нет таких переменных. При последующих проходах циклы уже не будут срабатывать.

Зачем делать подпрограммы и инклуды когда можно сразу вставить код в поток?

Code: (clickermann) [Select]
THREAD (KILL, 0)
   DEFINE ($active, 949237435)
   DEFINE ($maximumGain, 3748378392)
   DEFINE ($resetTimeout, 776058941)
   WHILE ($AP ! $active)
      GETSCREEN (215,387, 261,397)
      $AP = PXLCRC (215,387, 260,396)
      WAIT(1)
   END_CYC
   LCLICK(215,387)
   WAIT(15)
   
   DEFINE ($strengthening, $_time_t + 60)
   WHILE (($MG ! $maximumGain) | ($strengthening > $_time_t))
      GETSCREEN (786,545, 835, 564)
      $MG = PXLCRC (786,545, 834, 563)
      LCLICK (rnd (850, 930), rnd (544, 568))
      WAITMS (rnd (1900, 2100))
   END_CYC
   
   DEFINE ($time, $_time_t + 2000)
   WHILE($time > $_time_t)
      GETSCREEN (635,290, 669,307)
      $RT = PXLCRC (635,290, 668,306)
      if ($RT ! $resetTimeout)
         LCLICK(rnd(700, 800),rnd(220, 260))
         WAIT(rnd (4, 6))
         LCLICK(rnd(13, 113),rnd(550, 570))
         WAIT(rnd (6, 8))
      else
         wait(1)
      end_if
   END_CYC
END_THREAD

GETSCREEN
IF_PIXEL_IN (784, 44,802, 59, 9095142)
   LCLICK ($_return1, $_return2)
   WAIT(5)
   SetThread (KILL, 1)
END_IF

push:
WHILE (($p ! $fuckingPush) & ($r !  $errorConnectings))
   GETSCREEN
   $p = PXLCRC (461, 329, 498, 345)
   $r = PXLCOUNT (246, 249, 322, 263, 14582784)
   WAITMS (3000)
END_CYC
SetThread (KILL, 0)
IF ($p = $fuckingPush)
   LCLICK (461, 329)
   WAIT (3)
else
   LCLICK (472, 384)
   WAIT(40)
end_if
SetThread (KILL, 1)
goto(push)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 30, 2015, 08:23:09 PM
Спасибо.  Инклюды, и сабы начал делать т.к  в игре много разных  событий и мне кажется что использовать подпрограммы удобно для некоторых из них ;D
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 30, 2015, 08:36:17 PM
Code: (clickermann) [Select]
DEFINE ($strengthening, $_time_t + 60)
   WHILE (($MG ! $maximumGain) | ($strengthening > $_time_t))
      GETSCREEN (786,545, 835, 564)
      $MG = PXLCRC (786,545, 834, 563)
      LCLICK (rnd (850, 930), rnd (544, 568))
      WAITMS (rnd (1900, 2100))
   END_CYC
Еще вопрос по этому циклу. Если во время цикла $MG = $maximumGain как сделать что бы не было кликов LCLICK (rnd (850, 930), rnd (544, 568))?
Пробовал сделать так:
Code: (clickermann) [Select]
DEFINE ($strengthening, $_time_t + 60)
   WHILE (($MG ! $maximumGain) | ($strengthening > $_time_t))
      GETSCREEN (786,545, 835, 564)
      $MG = PXLCRC (786,545, 834, 563)
       if  ($MG ! $maximumGain)
      LCLICK (rnd (850, 930), rnd (544, 568))
       end_if
      WAITMS (rnd (1900, 2100))
   END_CYC
Но он клацает пока не занончится время >:(
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 30, 2015, 11:26:28 PM
Насколько я понял знак "|" в цикле WHILE означает что должны выполнится оба условия цикла.
Логика в том что есть таймер 60 сек,  и шкала от 0% до 100%  при клике по кнопке происходит или не происходит увеличение шкалы на 10%. То есть шкала может увеличится до 100% ( $MG = $maximumGain) за 40 сек, и что бы идти дальше нужно дождаться пока пройдет еще 20 сек. Также шкала может увеличится до 100% за 1 мин. 30 сек. и только после этого нужно идти дальше.
как я понял что DEFINE ($strengthening, $_time_t + 60) в этом случае означает что в переменной $strengthening  присваивается значение текущего времени +60 сек, и  условие ($strengthening > $_time_t) будет работать пока не пройдет 60 сек + еще один проход наверное?
Вопрос как сделать  если  шкала  увеличится до 100% ( $MG = $maximumGain) за 40 сек что бы оставшиеся 20 сек не было кликов, а было просто ожидание пока закончится время?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 30, 2015, 11:53:59 PM
Завтра этот код попробую
Code: (clickermann) [Select]
DEFINE ($strengthening, $_time_t + 60)
DEFINE ($str, 0)
DEFINE ($maximumGain, 3748378392)
   WHILE (($str = 0) | ($strengthening > $_time_t))
      GETSCREEN (786,545, 835, 564)
      $MG = PXLCRC (786,545, 834, 563)
       if  ($MG = $maximumGain)
   $str = 1
       end_if
  LCLICK (rnd (850, 930), rnd (544, 568))
      WAITMS (rnd (1900, 2100))
 END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 31, 2015, 12:11:19 AM
Пипец :) запутался с легким условием  :D
Code: (clickermann) [Select]
    DEFINE ($strengthening, $_time_t + 60)
    DEFINE ($str, 0)
    DEFINE ($maximumGain, 3748378392)
       WHILE (($str = 0) | ($strengthening > $_time_t))
          GETSCREEN (786,545, 835, 564)
          $MG = PXLCRC (786,545, 834, 563)
             if  ($MG ! $maximumGain)
             LCLICK (rnd (850, 930), rnd (544, 568))
             WAITMS (rnd (1900, 2100)) 
              else 
          $str = 1
               end_if 
     END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 31, 2015, 09:59:27 AM
Кирил спасибо  за ответ :)
попробуйте выполнить эти цыклы, и вы поймете где здесь "и" а где "или"  :)
Code: (clickermann) [Select]
WHILE(($_time_h ! 11) | ($_time_m ! 50))
WAIT(1)
END_CYC
Start ( )
/////////
WHILE(($_time_h ! 11) & ($_time_m ! 50))
WAIT(1)
END_CYC
Start ( )
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on August 31, 2015, 10:09:14 AM
попробуйте выполнить эти цыклы, и вы поймете где здесь "и" а где "или"  :)
Code: (clickermann) [Select]
WHILE(($_time_h ! 11) | ($_time_m ! 50))
WAIT(1)
END_CYC
Start ( )
/////////
WHILE(($_time_h ! 11) & ($_time_m ! 50))
WAIT(1)
END_CYC
Start ( )
А разве их значение меняется?  :o
Как в справке написано, так и есть, неужели ты думаешь что логические операторы никто не использует и их нужно проверять?

В первом цикле ИЛИ, во тором И.
Только большинство попадают впросак, когда они используются в сложном условии когда проверяются операнды НЕ
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 31, 2015, 10:31:39 AM
 в этом случае я точно знаю что подпрограмма старт запустится ровно в 11:50 допустим это будет или :)
Code: (clickermann) [Select]
WHILE(($_time_h ! 11) | ($_time_m ! 50))
WAIT(1)
END_CYC
Start ( )
В этом случае подпрограмма старт запустится в 08:50, а может быть в 11:00 тогда это будет И :)
Code: (clickermann) [Select]
WHILE(($_time_h ! 11) & ($_time_m ! 50))
WAIT(1)
END_CYC
Start ( )

Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on August 31, 2015, 10:45:49 AM
Зачем ты путаешь людей?
| - это ИЛИ, & - это И
Как тебе лучше представлять это другое дело.
Условие у тебя сложное, там не один логический операнд и поэтому конечный итог это не то что даёт одиночный операнд хоть И, хоть ИЛИ.

А такими заявлениям ты сбиваешь с толку читающих тебя вновь прибывших. Которые будут уже В СВОЁМ условии отличном от твоего пытаться применить & как ИЛИ или наоборот.

И вообще называют выполнением условия то что находится в теле условия, а не то что произойдёт если это условие не выполнится.
Как ты будешь называть это? Когда выполнится твоя подпрограмма Start?
Code: (clickermann) [Select]
WHILE(($_time_h = 11) & ($_time_m = 50))
   Start ( )
END_CYC
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 31, 2015, 10:59:57 AM
Извиняюсь если кого то попутал :) но я сам запутался в этом условии после прочтения справки.
Сейчас понял что в справке все норм написано:
Логическое И: (a & b) = 1 если и a = 1 и b = 1
Логическое ИЛИ: (a | b) = 1 если a = 1 или b = 1, или оба
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: SASHKA)) on August 31, 2015, 11:04:08 AM
Зачем ты путаешь людей?
| - это ИЛИ, & - это И
Как тебе лучше представлять это другое дело.
Условие у тебя сложное, там не один логический операнд и поэтому конечный итог это не то что даёт одиночный операнд хоть И, хоть ИЛИ.

А такими заявлениям ты сбиваешь с толку читающих тебя вновь прибывших. Которые будут уже В СВОЁМ условии отличном от твоего пытаться применить & как ИЛИ или наоборот.

И вообще называют выполнением условия то что находится в теле условия, а не то что произойдёт если это условие не выполнится.
Как ты будешь называть это? Когда выполнится твоя подпрограмма Start?
Code: (clickermann) [Select]
WHILE(($_time_h = 11) & ($_time_m = 50))
   Start ( )
END_CYC
Vint спасибо тебе :) начинаю понимать что я вообще нуб по сравнению с вами :)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: ZET on September 05, 2015, 02:48:06 AM
Можно ли использовать IF_PICTURE_IN с несколькими условиями? Представляется следующее:
Code: [Select]
IF_PICTURE_IN(IF_PICTURE_IN (0, 0, 600, 600, "1.bmp")) | (IF_PICTURE_IN (0, 0, 600, 600, "2.bmp"))
Методом проб и ошибок думается что нельзя, тогда как организовать конструкцию?
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 05, 2015, 07:03:37 AM
Можно ли использовать IF_PICTURE_IN с несколькими условиями?

Только так
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
ELSE
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "2.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF
END_IF
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: ZET on September 05, 2015, 10:22:40 AM

Только так
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
ELSE
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "2.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF
END_IF

Здесь уже нарушена логика,
Code: [Select]
Если
Тогда
Иначе
Тогда
Конец

Я же вижу результат таким образом:
Code: [Select]
Если (условие1) или (условие2)
Тогда
Конец
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 05, 2015, 10:40:09 AM
Здесь уже нарушена логика,

Где там че нарушено?

Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100)
   // если нашли 1.bmp выполняем код
ELSE // если не нашли 1.bmp
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "2.bmp", -1, 100) // ищем 2.bmp
      // если нашли 2.bmp выполняем код
   END_IF
END_IF

Это и есть или 1 или 2
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: ZET on September 05, 2015, 11:19:41 PM
Хотя да, надо было кофе выпить) Спасибо за подсказку
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on September 14, 2015, 08:26:43 PM
Сортировка массива

Эти алгоритмы выстраивают числа в массиве от меньших к большему.

Простая сортировка
Code: (clickermann) [Select]
SUB(sort)
   
   $siz = ARRSIZE($arr)
   $srtcheck = 0
   $srt = 0
   FOR($a=$siz-1,($a>0)&($srt=0),-1)
      FOR($b=0,$b<$a)
         IF($arr[$b] > $arr[$b+1])
            $srtcheck = 1
            $tmp = $arr[$b]
            $arr[$b] = $arr[$b+1]
            $arr[$b+1] = $tmp
         END_IF
      END_CYC
      IF($srtcheck = 0)
         $srt = 1
      END_IF
   END_CYC
   
END_SUB

arrpush ($arr, 454)
arrpush ($arr, 66)
arrpush ($arr, 43)
arrpush ($arr, 77)
arrpush ($arr, 22)
arrpush ($arr, 1)

LOGCLEAR
LOGWRITE ("Было")
FOR($i = 0, $i < ARRSIZE($arr))
   LOGWRITE ($arr[$i])
END_CYC

LOGWRITE ("")
sort()

LOGWRITE ("Стало")
FOR($i = 0, $i < ARRSIZE($arr))
   LOGWRITE ($arr[$i])
END_CYC

HALT

Парная сортировка (например сортировка координат) по первому числу
Code: (clickermann) [Select]
SUB(sort)
   
   $siz = ARRSIZE($arr)
   $srtcheck = 0
   $srt = 0
   FOR($a=$siz-2,($a>0)&($srt=0),-2)
      FOR($b=0,$b<$a,2)
         IF($arr[$b] > $arr[$b+2])
            $srtcheck = 1
            $tmp = $arr[$b]
            $tmp2 = $arr[$b+1]
            $arr[$b] = $arr[$b+2]
            $arr[$b+1] = $arr[$b+3]
            $arr[$b+2] = $tmp
            $arr[$b+3] = $tmp2
         END_IF
      END_CYC
      IF($srtcheck = 0)
         $srt = 1
      END_IF
   END_CYC
   
END_SUB

arrpush ($arr, 22)
arrpush ($arr, 66)
arrpush ($arr, 22)
arrpush ($arr, 77)
arrpush ($arr, 22)
arrpush ($arr, 88)

arrpush ($arr, 201)
arrpush ($arr, 66)
arrpush ($arr, 201)
arrpush ($arr, 77)
arrpush ($arr, 201)
arrpush ($arr, 88)

arrpush ($arr, 10)
arrpush ($arr, 66)
arrpush ($arr, 10)
arrpush ($arr, 77)
arrpush ($arr, 10)
arrpush ($arr, 88)

LOGCLEAR
LOGWRITE ("Было")
FOR($i = 0, $i < ARRSIZE($arr), 2)
   LOGWRITE ($arr[$i]," : ",$arr[$i+1])
END_CYC

LOGWRITE ("")
sort()

LOGWRITE ("Стало")
FOR($i = 0, $i < ARRSIZE($arr), 2)
   LOGWRITE ($arr[$i]," : ",$arr[$i+1])
END_CYC

HALT

Парная сортировка по первому затем по второму числу
Code: (clickermann) [Select]
SUB(sort)
   
   $siz = ARRSIZE($arr)
   $srtcheck = 0
   $srt = 0
   FOR($a=$siz-2,($a>0)&($srt=0),-2)
      FOR($b=0,$b<$a,2)
         IF($arr[$b] > $arr[$b+2])
            $srtcheck = 1
            $tmp = $arr[$b]
            $tmp2 = $arr[$b+1]
            $arr[$b] = $arr[$b+2]
            $arr[$b+1] = $arr[$b+3]
            $arr[$b+2] = $tmp
            $arr[$b+3] = $tmp2
         END_IF
      END_CYC
      IF($srtcheck = 0)
         $srt = 1
      END_IF
   END_CYC
   $srtcheck = 0
   $srt = 0
   FOR($a=$siz-2,($a>0)&($srt=0),-2)
      FOR($b=0,$b<$a,2)
         IF($arr[$b] = $arr[$b+2])
            IF($arr[$b+1] > $arr[$b+3])
               $srtcheck = 1
               $tmp = $arr[$b+1]
               $tmp2 = $arr[$b+3]
               $arr[$b+1] = $tmp2
               $arr[$b+3] = $tmp
            END_IF
         END_IF
      END_CYC
      IF($srtcheck = 0)
         $srt = 1
      END_IF
   END_CYC
   
END_SUB

arrpush ($arr, 22)
arrpush ($arr, 60)
arrpush ($arr, 22)
arrpush ($arr, 77)
arrpush ($arr, 22)
arrpush ($arr, 88)

arrpush ($arr, 201)
arrpush ($arr, 66)
arrpush ($arr, 201)
arrpush ($arr, 30)
arrpush ($arr, 201)
arrpush ($arr, 88)

arrpush ($arr, 10)
arrpush ($arr, 66)
arrpush ($arr, 10)
arrpush ($arr, 77)
arrpush ($arr, 10)
arrpush ($arr, 28)

LOGCLEAR
LOGWRITE ("Было")
FOR($i = 0, $i < ARRSIZE($arr), 2)
   LOGWRITE ($arr[$i]," : ",$arr[$i+1])
END_CYC

LOGWRITE ("")
sort()

LOGWRITE ("Стало")
FOR($i = 0, $i < ARRSIZE($arr), 2)
   LOGWRITE ($arr[$i]," : ",$arr[$i+1])
END_CYC

HALT
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: vasya1987 on November 29, 2015, 08:49:48 PM
Может кому пригодится.
Создание .bmp при клике mouse1
Клик в центр изображения и сохранится область выделенная желтым цветом
http://prntscr.com/98d965
Code: [Select]
if ( iskeydown(1)=1 )
   GETSCREEN
   //COLORMODE(6)  // Стереть "//" чтоб включить
   screenshotex($_xmouse,$_ymouse, $_xmouse+10,$_ymouse+10)   //вывод скриншота в файл (текущее положение курсора +10 пикселей по x и y)
   HINTPOPUP("Готово")
   halt
END_IF
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: ЦИТРИН on March 18, 2016, 02:10:22 AM
выстраивают числа в массиве от меньших к большему.
Простая сортировка
Не могу понять как отсортировать не числа, а именно те  переменные , которые в  момент очередного цикла опроса оказались в максимуме.
Например , я опросил ряд значений, присвоенных разным  линиям графика. На  "красное" выбрана переменная $a1  , "белое " выбрана переменная $a2 , "зеленое" выбрана переменная $a3 итп . 9 линий графика.
Вот графики https://cldmine.com/speedlog
 В какой-то цикл опроса , максимальное значение принимает переменная у "красного" , в другом цикле максимальным становится  "белое" итп
Как   это отсортировать?  Для того , чтобы вовремя переключать майнинг.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on March 18, 2016, 08:05:07 AM
Для версии 4.11
Code: (clickermann) [Select]
SUB(max,$res, $n)
   IF($res > $resMax)
      $resMax = $res
      $resMaxVar = $n
   END_IF
END_SUB

$a1 = 10
$a2 = 100
$a3 = 300
$a4 = 20
$a5 = 10
$a6 = 34
$a7 = 56
$a8 = 25
$a9 = 1

max($a1,1)
max($a2,2)
max($a3,3)
max($a4,4)
max($a5,5)
max($a6,6)
max($a7,7)
max($a8,8)
max($a9,9)

LOGWRITE ($resMaxVar, "=",$resMax)

HALT

Code: [Select]
9:03:27 3=300
Для версии 4.12 уже проще
Code: (clickermann) [Select]
$a1 = 10
$a2 = 100
$a3 = 300
$a4 = 20
$a5 = 10
$a6 = 34
$a7 = 56
$a8 = 25
$a9 = 1

FOR($count=1,$count<10)
   $res = GETVAR (STRCONCAT("$a", $count))
   IF($res > $resMax)
      $resMax = $res
      $resMaxVar = STRCONCAT("$a", $count)
   END_IF
END_CYC

LOGWRITE ($resMaxVar, "=",$resMax)

HALT

Code: [Select]
9:01:44 $a3=300
Если что вот полная сборка 4.12 версии
https://yadi.sk/d/rQnhKmxYprJcP (https://yadi.sk/d/rQnhKmxYprJcP)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on March 18, 2016, 08:35:47 AM
А ещё проще увидев что нужно создавать серию переменных $a1....$a9, взять и создать один массив $a и работать с ним. На то они и массивы.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: mikem on October 11, 2016, 09:15:39 PM
Развернуть окно на весь экран

Столкнулся с проблемой как корректно развернуть (maximize) окно. Кто-то уже отвечал на этот вопрос на форуме и посоветовал использовать WNDSETINFO($hwnd, 0,0, $_xmax,$_ymax), но это не "честный" maximize, и это не будет работать в случае мульти-мониторов (ну точнее это будет работать, но совсем не так как вы предполагали :)) )
Нашел как сделать "честный" maximize:
Code: (clickermann) [Select]
POSTMESSAGE($_hwnd, 0x0112, 0xF030, 0) // Развернуть окно на весь экрангде
0x0112 это WM_SYSCOMMAND
0xF030 это SC_MAXIMIZE
(Если нужен minimize, то - 0xF020 это SC_MINIMIZE)
Работает идеально у меня на версии кликерманна 4.12, ОС: Win10 x64
Может кому пригодится..
Title: Re: Типовые алгоритмы
Post by: m.igel on January 12, 2017, 06:50:37 PM
Заметь, что должна быть включена английская раскладка.
Нельзя ли   процедуру  переключения раскладки  поручить  самой программе, или хотя бы дать понять пользователю , что  у него раскладка не та? 


Попробовал скрестить два учебный скрпта.

Code: [Select]
// 12.01.2017 6

#name "Запись в блокнот"//Имя нашего скрипта

EXECUTE("notepad.exe")//Запускаем программу notepad.exe. Команда EXECUTE равносильна окну "Выполнить" в Виндовс (Win+R).

WNDSTATE(WNDFIND("Блокнот"), 1)//Разворачиваем окно в заголовке которого есть строка "Блокнот". 1 - означает развернуть, 0 - свернуть.

WAITMS(1000)//Ждем чтобы блокнот окончательно запустился. 500 мс достаточно

//--------------------
$hwnd1 = wndfind("Clickermann -") // получаем HWND окна кликера
$hwnd2 = wndfind("Блокнот") // получаем HWND окна Блокнота

SETKBLAYOUT($hwnd1, 1033) // устанавливаем английскую раскладку для окон
SETKBLAYOUT($hwnd2, 1033)

print   ($hwnd1) // добавил для контроля
print   ($hwnd2)

//или
//    SETKBLAYOUT($hwnd1, 1049) // устанавливаем русскую раскладку для окон
//    SETKBLAYOUT($hwnd2, 1049)
//--------------------

FOR($i, $i < 2)//Начало цикла. Цифра 5 означает что цикл повторится 5 раз

   KEYSTRING("The quick brown fox jumps over the lazy dog.", 20)//Вводим текст. 20 означает задержку в 20 мс между вводом каждой буквы

   KEYPRESS(#ENTER)//Нажимаем Enter чтобы перевести строку. #ENTER - код клавиши Enter

END_CYC//Заканчиваем цикл

HALT//Останавливаем скрипт

Тело взял тут, а вставку между // ------------ отсюда:
http://crapware.aidf.org/forum/index.php?topic=382.msg3092#msg3092
Ну и русскую раскладку закомментил, понятное дело.

Первоначальный код установки раскладки, тот, что по ссылке, прекрасно работает отдельно. Но будучи вставленным внутрь кода "Запись блокнота" перестаёт работать нормально, т.е. переключает только кликермена, а блокнот остаётся в русской раскладке. Более того, $hwnd2 оказывается равен $hwnd1 и возвращает значение кликермена.
Но всё заработало, когда в
$hwnd2 = wndfind("Блокнот")
вместо "Блокнот" я написал "Безымянный".

Как-то оно странно...
Title: Re: Типовые алгоритмы
Post by: Oraven on January 12, 2017, 07:04:25 PM
Как-то оно странно...

Ничего странного. Функция WNDFIND возвращает hwnd первого попавшегося окна в заголовке которого присутствует слово "блокнот". Можно использовать дополнительный параметр для поиска слов от начала, читай справку.
Title: Re: Типовые алгоритмы
Post by: m.igel on January 12, 2017, 07:11:38 PM
Функция WNDFIND возвращает hwnd первого попавшегося окна в заголовке которого присутствует слово "блокнот".


ОК, спасибо!

Но в окне кликермана вроде ничего про блокнот нету...
Кроме названия "Блокнот.cms"  ;)
Оно?

Нет. Поменял название .cms — ничего не изменилось. Где там "блокнот" у кликермана?

От я ж слепошарый! Во первых строках кода!
Поменял на
#name "Запись в notepad"//Имя нашего скрипта
и всё заработало.

Ещё раз спасибо!
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: quant13 on February 06, 2017, 04:28:45 PM
Скриншот(окна)
Code: (Clickermann) [Select]
#name "Get Screenshot"
HSET(12345,0)
$h=WNDFIND ("Блокнот")      //название окна (при скриншоте должно быть активным, разумеется)
wndgetinfo($h, $var1, $var2, $var3, $var4)
$x1=$var1
$y1=$var2
$x2=$x1+$var3
$y2=$y1+$var4
waitms(100)
IF(iskeydown(#PAGEDOWN)=1) //пока нажат #PAGEDOWN делает скриншотики
   GETSCREEN($x1,$y1,$x2,$y2)
   COLORMODE(6,$x1,$y1,$x2,$y2)
   SCREENSHOTEX($x1,$y1,$x2,$y2, "Image_",0)
//   HINTPOPUP("saved")
   waitms(250)
END_IF


Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on February 06, 2017, 08:52:31 PM
Скриншот окна под курсором
Code: (clickermann) [Select]
#name "Get Screenshot"

IF(ISKEYDOWN(#CTRL)=1) // при нажатии CTRL делаем скриншот
   WHILE(ISKEYDOWN(#CTRL)=1)
      WAITMS(5)
   END_CYC
   WNDGETINFO(HGET($_xmouse,$_ymouse), $x,$y, $sizx,$sizy)
   WAITMS(50)
   GETSCREEN
   COLORMODE(6)
   SCREENSHOTEX($x,$y, $x+$sizx,$y+$sizy, "Image_",0)
   WAITMS(20)
ELSE
   WAITMS(20)
END_IF
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on February 07, 2017, 12:25:34 PM
Ближайшая к заданным координатам/центру картинка:
Code: (clickermann) [Select]
#name "Ближайшая к заданным координатам/центру картинка"
// Author: Vint
// Version: 1.0 (14.10.2013)

// цель
$Xtarget = 500
$Ytarget = 500

// цель - центр экрана
//$Xtarget = ($_xmax+1) / 2
//$Ytarget = ($_ymax+1) / 2


GETSCREEN(0,0, $_xmax,$_ymax)
SCANPICTURE($scan, 0,0, $_xmax,$_ymax, "picture.bmp", -1, 100)

$dist = 10000
$scan_size = ARRSIZE($scan)
FOR($i=0, $i < $scan_size, 2)
    $X = $scan[$i]
    $Y = $scan[$i+1]
    $d_temp = DIST($Xtarget, $Ytarget, $X, $Y)
    IF($d_temp < $dist)
        $dist = $d_temp
        $Xdot_target = $X
        $Ydot_target = $Y
    END_IF
    IF($Y > ($Ytarget + $dist))
        $i = $scan_size
    END_IF
END_CYC
UNDEFINE($scan)

IF($dist ! 10000)
    LOGWRITE ("Ближайшая картинка к заданным координатам X/Y: ", $Xdot_target, " / ", $Ydot_target)
ELSE
    LOGWRITE ("Картинка не найдена")
END_IF

HALT

Ближайший к заданным координатам пиксель:
Code: (clickermann) [Select]
#name "Ближайший к заданным координатам пиксель"

// цель
$Xtarget = 500
$Ytarget = 500

GETSCREEN
SCANPXL($scan, 0,0, $_xmax,$_ymax, 255)

$dist = 10000
$scan_size = ARRSIZE($scan)
FOR($i=0, $i < $scan_size, 2)
    $X = $scan[$i]
    $Y = $scan[$i+1]
    $d_temp = DIST($Xtarget, $Ytarget, $X, $Y)
    IF($d_temp < $dist)
        $dist = $d_temp
        $Xdot_target = $X
        $Ydot_target = $Y
    END_IF
    IF($Y > ($Ytarget + $dist))
       $i = $scan_size
    END_IF   
END_CYC
UNDEFINE($scan)

IF($dist ! 10000)
    LOGWRITE ("Ближайший пиксель к заданным координатам X/Y: ", $Xdot_target, " / ", $Ydot_target)
ELSE
    LOGWRITE ("Заданный цвет не найден")
END_IF

HALT

А то периодически всплывает.

P.S. 04.09.2018 исправлена опечатка.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Axelenz on March 27, 2018, 12:45:37 PM
Развернуть окно на весь экран

Столкнулся с проблемой как корректно развернуть (maximize) окно. Кто-то уже отвечал на этот вопрос на форуме и посоветовал использовать WNDSETINFO($hwnd, 0,0, $_xmax,$_ymax), но это не "честный" maximize, и это не будет работать в случае мульти-мониторов (ну точнее это будет работать, но совсем не так как вы предполагали :)) )
Нашел как сделать "честный" maximize:
Code: (clickermann) [Select]
POSTMESSAGE($_hwnd, 0x0112, 0xF030, 0) // Развернуть окно на весь экрангде
0x0112 это WM_SYSCOMMAND
0xF030 это SC_MAXIMIZE
(Если нужен minimize, то - 0xF020 это SC_MINIMIZE)
Работает идеально у меня на версии кликерманна 4.12, ОС: Win10 x64
Может кому пригодится..

Погасить экран монитора
(иногда полезно ставить перед HALT)
Code: (clickermann) [Select]
SendMessage(0xFFFF, 0x0112, 0xF170, 2) //Погасить экран монитора
HWND_BROADCAST = 0xFFFF
WM_SYSCOMMAND = 0x0112
SC_MONITORPOWER = 0xF170
Code: (html5) [Select]
lParam Описание
-1 Переводит монитор в нормальный, рабочий режим
0 Переводит монитор в режим "легкого" засыпания
1 Переводит монитор в спящий режим
2 Монитор выключается
(у меня на Windows 8.1 работает только "2").

Включить экран - движение мышкой.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: _______ on October 21, 2018, 01:08:13 PM
Было бы неплохо дописать в пост "Скрипт выполняет действия в разные промежутки времени" ещё выполнение действий в заданное время. К примеру нужно мне в 7:00, 14:00 и 19:00 выполнить что-то.
Code: (clickermann) [Select]
if(($_time_h=14)&($_time_m=00) ^ ($_time_h=7)&($_time_m=00) ^ ($_time_h=21)&($_time_m=00))
BEEP(500,500) //своё действие
ELSE
WAIT(1)
END_IF
Хотя мне кажется, что если попытаться моим кодом сделать в 7:30, 14:00 и 19:20, то он будет и в 7:00 и в 7:20 и в 7:30 действие повторять, хотя и не проверял..
Или к примеру если каждый час нужно выполнять, то:
Code: (clickermann) [Select]
if(($_time_m=00)) //вместо 00 ставим свои минуты в которые выполнять
BEEP(500,500) //своё действие
ELSE
WAIT(1)
END_IF
Можно конечно так же написать действие раз в минуту, но если действие длится дольше минуты то не получится.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Oraven on October 21, 2018, 02:02:51 PM
Исправление ошибок
Code: (clickermann) [Select]
IF((($_time_h=14)&($_time_m=0)) | (($_time_h=7)&($_time_m=0)) | (($_time_h=21)&($_time_m=0)))
   BEEP(500,500) //своё действие
ELSE
   WAIT(1)
END_IF

Code: (clickermann) [Select]
IF($_time_m=0) //вместо 00 ставим свои минуты в которые выполнять
   BEEP(500,500) //своё действие
ELSE
   WAIT(1)
END_IF
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: _______ on October 22, 2018, 04:59:17 PM
Исправление ошибок
Спасибо=) Теперь буду знать как это пишется правильно.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on September 26, 2019, 03:22:18 PM
Клик в глобальных координатах без перемещения. LCLICK без MOVE.

Code: (clickermann) [Select]
SUB(only_lclick, $olclx, $olcly)
    $olcl_hwnd = HGET($olclx, $olcly)
    WNDGETINFO($olcl_hwnd, $olcl_wx, $olcl_wy, $olcl_w, $olcl_h)
    LOGWRITE($olcl_wx, "  ", $olcl_wy)
    $olclx = $olclx - $olcl_wx
    $olcly = $olcly - $olcl_wy
    LOGWRITE($olclx, "  ", $olcly)
    POSTMESSAGE($olcl_hwnd, 0x0201, 0x0001,$olclx+($olcly*65536)) //LDOWN
    WAITMS(30)
    POSTMESSAGE($olcl_hwnd, 0x0202, 0x0001,$olclx+($olcly*65536)) //LUP
END_SUB

// Lclick в глобальных координатах 253,  365
only_lclick(253, 365)

HALT

При необходимости можно доработать, сделать переключатель локальные/глобальные координаты. Передавать в ПП задержку между нажатием-отпусканием.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: hrytsea on March 18, 2022, 06:34:47 AM
ШИКАРНЫЙ (и достаточно простой) симулятор человеческого движения мыши WindMouse.
Адаптировано под Clickermann отсюда: https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/

Менять скорость параметром $m0, скорость ветра $w0, расстояние замедления перед остановкой $d0, гравитацию - $g0

Code: (clickermann) [Select]
// Mouse movement that's affected by gravity and wind physics laws
// https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/
sub(hyp, $A, $B)
    $R1 = round(sqrt($A*$A + $B*$B), 0)
end_sub

sub(min, $A, $B)
    if($A > $B)
        $R1 = $B
    else
        $R1 = $A
    end_if
end_sub

sub(rand, $A, $B, $round)   // если round=1, округляет результат
    $rand = rnd(0, 1000000)
    $rnd = $A + ($B - $A)*$rand/1000000
   
    if($round = 1)
        $rnd = round($rnd, 0)
    end_if
end_sub

sub(mouse_init)
    $SQRT3 = sqrt(3)
    $SQRT5 = sqrt(5)
   
    $cX = $_xmouse
    $cY = $_ymouse
    $mDist = round(dist($cX, $cY, $eX, $eY), 0) + 1
   
    // скорости по осям X и Y
    $vX = 0
    $vY = 0
    $vMag = 0
    $wX = 0
    $wY = 0
    $wMag = 0
    $tMMax = $_time_t + rnd(4,6)
   
    rand(8,9,0)
    $g0 = $rnd     // magnitude of the gravitational force                        (влияет на амплитуду волны)
   
    rand(0,100,0)
    if($rnd < 10)  // в 10% сильный ветер
        rand(2,4,0)
        $w0 = $rnd     // magnitude of the wind force fluctuations                    (влияет на длину волны)
    else
        rand(0.8,2,0)
        $w0 = $rnd
    end_if
   
    rand(15,25,0)
    $m0 = $rnd     // maximum mouse_step size (velocity clip threshold)           (влияет на скорость волны)
   
    rand(2,8,0)
    $d0 = $rnd     // distance where wind behavior changes from random to damped  (влияет на затухание волны)
end_sub

sub(mouse_step)      // считает скорость по осям X и Y, вычисляет координаты следующего шаг
    min($m0, $mDist)
    $m0 = $R1
   
    min($w0, $mDist)    // чтобы не перепрыгнуть цель
    $wMag = $R1
   
    if($mDist > $d0)
        rand(-$wMag, $wMag, 0)
        $wX = $wX / $SQRT3 + $rnd / $SQRT5
       
        rand(-$wMag, $wMag, 0)
        $wY = $wY / $SQRT3 + $rnd / $SQRT5
    else
        $wX = $wX / $SQRT3
        $wY = $wY / $SQRT3
       
        if($m0 < 1)
            $m0 = 1
        else
            if($m0 > 2)    // чтобы замедлиться перед остановкой
                $m0 = $m0 / $SQRT3
            end_if
        end_if
    end_if
   
    // "ветер" и "гравитация" влияют на скорость мыши по осям
    $vX = $vX + $wX + $g0 * ($eX - $cX)/$mDist
    $vY = $vY + $wY + $g0 * ($eY - $cY)/$mDist
    hyp($vX, $vY)
    $vMag = $R1
   
    if($vMag > $m0)    // чтобы не перепрыгнуть цель
        rand(0,$m0,0)
        $vClip = $m0/2 + $rnd/2
        $vX = ($vX/$vMag) * $vClip
       
        rand(0,$m0,0)
        $vClip = $m0/2 + $rnd/2
        $vY = ($vY/$vMag) * $vClip
    end_if
   
    $mX = round($cX + $vX, 0)           // where to move
    min($mX, $_xmax)
    max($R1, 0)
    $mX = $R1
    $mY = round($cY + $vY, 0)
    min($mY, $_ymax)
    max($R1, 0)
    $mY = $R1
   
    if(($cX != $mX) or ($cY != $mY))
        move($mX, $mY)
        $cX = $_xmouse
        $cY = $_ymouse
    end_if
end_sub

sub(wind_mouse, $eX, $eY, $wMin, $wMax)
    mouse_init()
   
    while(($mDist > 2) and ($_time_t < $tMMax))    // разброс вокруг цели <= 3
        mouse_step()
       
        $mDist = round(dist($cX, $cY, $eX, $eY), 0)
    end_cyc
   
    waitms(rnd($wMin,$wMax))
end_sub

Чтобы протестировать, откройте на весь экран Paint, выберите кисть и запустите данный скрипт:
Code: (clickermann) [Select]
sub(move_rand)
    $m_x = rnd(200, $_xmax-200)
    $m_y = rnd(200, $_ymax-200)
    wind_mouse($m_x, $m_y, 500, 1500)
end_sub

move_rand()
lclick($_xmouse, $_ymouse)
waitms(100)
ldown($_xmouse, $_ymouse)

for($rmove = 0, $rmove < 10)
    move_rand()
end_cyc

lup($_xmouse, $_ymouse)

halt()

Если попытаться сдвинуть курсор во время исполнения скрипта, получится интересный узор :)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: dramster on March 24, 2022, 07:11:48 PM
ШИКАРНЫЙ (и достаточно простой) симулятор человеческого движения мыши WindMouse.
Адаптировано под Clickermann отсюда: https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/

Там по ссылке очень много не понятного текста и столько же ссылок. Ты бы точно сказал что качать, и если какие-то нюансы по запуску, то тоже не хотелось бы самому разбираться.
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: hrytsea on March 24, 2022, 11:01:24 PM
ШИКАРНЫЙ (и достаточно простой) симулятор человеческого движения мыши WindMouse.
Адаптировано под Clickermann отсюда: https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/

Там по ссылке очень много не понятного текста и столько же ссылок. Ты бы точно сказал что качать, и если какие-то нюансы по запуску, то тоже не хотелось бы самому разбираться.

Прикрепил код Clickermann  ;)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: dramster on March 24, 2022, 11:42:30 PM
А, то есть это там уже весь алгоритм в коде? Я и не посмотрел. Думал там типа прога какая-то. Кстати вот тут http://crapware.aidf.org/forum/index.php?topic=2112.0 когда-то разбирали варианты по реалистичности, чтоб не было путаницы по темам, можно туда и этот вариант. Еще по безье тоже есть тема http://crapware.aidf.org/forum/index.php?topic=5442.0 тоже красиво.

Я правильно вызываю?
Code: (clickermann) [Select]
LDOWN(500,500)
wind_mouse(1500,500, 500, 1500)
LUP($_xmouse,$_ymouse)

Выходит вот так если карандашом. Красиво, но наверно нужно допилить. Видно что в каких то моментах курсор дергает назад.
(https://i.imgur.com/I4GyFaU.png)

Вопросы:

1. как скорость менять
2. что за параметры $wMin, $wMax
3. и еще, почему задержка какая-то после выполнения, курсор уже на месте, а он чето ждет
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: hrytsea on March 25, 2022, 02:11:06 AM
Выходит вот так если карандашом. Красиво, но наверно нужно допилить. Видно что в каких то моментах курсор дергает назад.
(https://i.imgur.com/I4GyFaU.png)

Вопросы:

1. как скорость менять
2. что за параметры $wMin, $wMax
3. и еще, почему задержка какая-то после выполнения, курсор уже на месте, а он чето ждет

Да, это простенький алгоритм, мне показался лучше выложенных в этой теме ранее, поэтому решил поделиться) $wMin и $wMax - мин/макс задержка после достижения цели, не хочешь задержку - ставь 0,0).

Сейчас допиливаю нормальный вариант, с выбором скорости и более плавным движением.
(https://i.imgur.com/cjtYsee.gif)
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: Vint on March 25, 2022, 04:10:54 PM
Самый первый вариант мне нравится больше.

(https://i.ibb.co/BBwVMZ1/Free.png) (https://ibb.co/2d574tb)

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

P.S. Код почти по PEP8
Title: Re: Типовые алгоритмы, вводные статьи (Новички, читайте!)
Post by: hrytsea on March 25, 2022, 04:53:56 PM
Самый первый вариант мне нравится больше.

(https://i.ibb.co/BBwVMZ1/Free.png) (https://ibb.co/2d574tb)

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

P.S. Код почти по PEP8

Немного ускорил, убрал сильный разброс(хотя мне больше нравилось так имитации человеческого движения), менять максимальную скорость параметром $m0, скорость ветра $w0, расстояние замедления перед остановкой $d0, гравитацию - $g0