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

Основной раздел => Общие вопросы => Topic started by: Ramzesia on November 05, 2019, 12:55:21 PM

Title: Изменить способ обращения
Post by: Ramzesia on November 05, 2019, 12:55:21 PM
Вопрос такой, возможно ли научить кликер, нажимать кнопки клавиатуры и мыши, как физические нажатия? Как научить управлять драйверами мыши и клавиатуры или прикрутить какую нибудь длл?
Title: Re: Изменить способ обращения
Post by: ya12 on November 05, 2019, 04:26:25 PM
Кликерман переименовывал? Католог Кликермана тоже? От админа загружал?
PS/2 режим в скрипте + ps/2 клаву/мышь в активное окно использовал?
Рандомные задержки между нажатиями и отпусканиями клавиш ставил?

Если все это использовал и не работает - легкого решения не будет.
Какой функционал у второй программы?
С помощью Cheat Engine свою игру ковырял?
Title: Re: Изменить способ обращения
Post by: Oraven on November 05, 2019, 04:38:41 PM
Через драйвер это как раз Ps2 режим. Включается добавлением директив в скрипт, в зависимости от того какое устройство нужно пустить через Ps2

Code: (clickermann) [Select]
#ps2_mouse
#ps2_keyboard

Чтобы это работало нужно соответствующее устройство включенное в Ps2 разъем.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 05, 2019, 05:05:46 PM
Quote
Кликерман переименовывал? Католог Кликермана тоже? От админа загружал?
Рандомные задержки между нажатиями и отпусканиями клавиш ставил?
Все пробовал, только перетаскиваешь мышь в окно игры, все клики нажатия не срабатывают. Поиск по картинке работает.
Quote
PS/2 режим в скрипте + ps/2 клаву/мышь в активное окно использовал?
Режим в скрипте пробовал, физически нет возможности подключить, этот разъем вить в прошлом уже :(
Title: Re: Изменить способ обращения
Post by: ya12 on November 05, 2019, 05:36:50 PM
Без физического устройства на ps/2 разъеме Кликерман бессилен.
Остается или попытаться увязать работу Кликермана и второй проги(которая кликает в обход защиты), или ломать защиту.
Title: Re: Изменить способ обращения
Post by: dramster on November 05, 2019, 07:05:54 PM
http://crapware.aidf.org/forum/index.php?topic=3252.0

Вот тебе физические нажатия кнопок програмно, через кликерман.

Но это все фигня, мне делать нечего было, вот и попробовал с мышкай поиграть  :D . Достаточно купить за пару сотен рублей ардуино микро. Она определятся компом как клавиатура и мышка, и управляется програмно через виртуальный ком порт. Против этого девайса любая защита бессильна.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 05, 2019, 08:19:08 PM
Достаточно купить за пару сотен рублей ардуино микро. Она определятся компом как клавиатура и мышка
а она может работать с картинками и пикселями? по отдельности у меня есть програмная мышь, которая тоже обходит любую защиту,  есть кликер который читает картинуку но мне надо что бы были обе функции в одном или в паре но работало все слажено.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 05, 2019, 08:26:00 PM
Я тут глянул на своем ноуте, в диспетчере и обнаружил такую интересную вещь. С этим можно работать?
Попробовал так, не работает...

Code: (clickermann) [Select]
#ps2_mouse
#ps2_keyboard

LCLICK($_xmouse,$_ymouse)

KEYPRESS(#I)

HALT
Title: Re: Изменить способ обращения
Post by: dramster on November 05, 2019, 08:28:46 PM
Я тут глянул на своем ноуте, в диспетчере и обнаружил такую интересную вещь. С этим можно работать?
Можно, пиши дерективы #ps2_mouse и #ps2_keyboard и твои клики и нажатия будут прохотдить именно через твои ps/2 устройства... и проблема решена.
Title: Re: Изменить способ обращения
Post by: dramster on November 05, 2019, 08:43:53 PM
а она может работать с картинками и пикселями? по отдельности у меня есть програмная мышь, которая тоже обходит любую защиту,  есть кликер который читает картинуку но мне надо что бы были обе функции в одном или в паре но работало все слажено.

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

Подробнее о плате - http://arduino.ru/Hardware/ArduinoMicro
Программирование на ардуино (именно по Keyboard и Mouse) - к примеру тут https://doc.arduino.ua/ru/prog/MouseKeyboard
Title: Re: Изменить способ обращения
Post by: ya12 on November 05, 2019, 08:57:46 PM
так надежней
Code: (clickermann) [Select]
   #ps2_mouse
   #ps2_keyboard

   KEYDOWN(#I)
   waitms(rnd(180,200))
   KEYUP(#I)
   waitms(rnd(180,200))
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 05, 2019, 09:25:20 PM
А нельзя как то програмную мышь привязать к кликеру? типа посылать на нее команду из кликера а она отрабатывала нажатие
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 05, 2019, 09:29:01 PM
так надежней
Code: (clickermann) [Select]
   #ps2_mouse
   #ps2_keyboard

   KEYDOWN(#I)
   waitms(rnd(180,200))
   KEYUP(#I)
   waitms(rnd(180,200))
И так тоже не работает. Запускаешь макрос курсор прыгает в окно игры и клик/нажатие клавиши не происходят, стоит вывести курсор с окна игры он опять пригает на прописаные координаты.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 05, 2019, 09:50:16 PM
Вот этот эмулятор работает https://botmek.ru/  демо версия 3дня потом нужно покупать доступ.
Но она может только печатать и кликать, поиск по картинке не имеет. Если прописать команды в кликере, и  написать макрос в программе то работает, до того момента пока курсор не в окне игры, нельзя как нибудь прикрутить ее возможность к кликеру или связать кликер на прямую с этой прогой?
У меня получилось следующее, прописываю в маросе поиск по картинке, нашел картинку нажал "1" в проге прописываю если нажать "1" кликнуть по чату написать "Привет мир!" и все дальше не пашет, но если в макросе проги, в конце дописать клик по облости за пределами игры, все срабатывает еще раз. Получается, в кликере пишем поиск отправляем команду на исполнение проге, прога исполняет, кликает за кпределами окна игры что бы кликер мог дать следующее задание. Очень все сложно запутано не совпадают задержи, время исполнения действий увеличивается;( Хотелось бы все проще... как то так сложно коротко написать. Готов к диалогу прошу помощи, спрашивайте, наводящими вопросами.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 05, 2019, 10:01:59 PM
Подробнее о плате - http://arduino.ru/Hardware/ArduinoMicro
Программирование на ардуино (именно по Keyboard и Mouse) - к примеру тут https://doc.arduino.ua/ru/prog/MouseKeyboard
У нас найти такую плату проблематично, могу заказать, способ достойны, но боюсь что моих знаний не хватит, что бы подключить и все настроить. А так я бы с удовольствием купил, подождал бы пока доставили и ковырялся бы в ней. Можно ли через нее одновременно реализовать лкм пкм и 5 кнопок клавиатуры? и что бы все работало через кликер, но боюсь что возможно будет такая же проблема курсор попадет в окно игры и все кликер не будет работать отправлять команды.
Title: Re: Изменить способ обращения
Post by: ya12 on November 05, 2019, 10:27:28 PM
Вот это используй на левом аккаунте, который не жалко.
Результат:
1 Прошло и ничего за это не было (вряд ли, но вдруг...)
2 Прошло или не прошло, но потом выкинуло или словил бан. Тут можно поковырять с помощью Cheat Engine, если конечно защита даст запустить прогу, поставить прерывания и перезаписать память. Гарантий что нашел все закладки никаких, баны могут прилететь в конце месяца или квартала.
3 Ничего.

Code: (clickermann) [Select]
//$_hwnd - hwnd целевого окна
//вместо 0x0100/0x0101 можно использовать 0x0104/0x0105

postmessage($_hwnd, 0x0100, #i, 00170001)       // i нажать
postmessage($_hwnd, 0x0102, #i, 00170001)       // i
waitms(RND(180,200))
postmessage($_hwnd, 0x0101, #i, C0170001)     // i отпустить



вместо postmessage можно попробовать sendmessage
Title: Re: Изменить способ обращения
Post by: dramster on November 05, 2019, 11:19:22 PM
Можно ли через нее одновременно реализовать лкм пкм и 5 кнопок клавиатуры? и что бы все работало через кликер, но боюсь что возможно будет такая же проблема курсор попадет в окно игры и все кликер не будет работать отправлять команды.
Можно использовать все кнопки что ты видишь у себя на клавиатуре и двигать и кликать мышкай.
Плата будет работать также как и твоя физическая мышь и клавиатура.... это и есть физические мышь и клавиатура, точно такие же как у тебя перед глазами, только кнопок на плате нету. Подключается в любой порт юсб обычным проводом зарядки смартфона. Програмируется один раз и под свои нужды, далее работаем только через кликерман. В нужный момент, если нужно нажать нужную кнопку или передвинуть курсор мыши, просто отсылаем сигнал нашей ардуине сигнал и она выполнит нужное.


postmessage($_hwnd, 0x0100, #i, 00170001)



Что за параметр "00170001"? Может нужно дописать "0x" чтобы кликер понял что это число в 16-ричном виде. И если не сикрет, что этот параметр значит? Судя по мануалу в lParam при нажатиях кнопок нам может помочь только с - "число повторов, код сканирования, флаг расширенного ключа, код контекста, предыдущий флаг состояния ключа и флаг переходного состояния."
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 06, 2019, 03:51:53 AM
Подробнее о плате - http://arduino.ru/Hardware/ArduinoMicro
Программирование на ардуино (именно по Keyboard и Mouse) - к примеру тут https://doc.arduino.ua/ru/prog/MouseKeyboard
Вот эта подойдет? Pro Micro ATmega32U4 (https://ru.aliexpress.com/item/32902569443.html?spm=a2g0o.productlist.0.0.67351c79eYeZWp&algo_pvid=a43debf5-3b48-4425-a114-5e34340c0367&algo_expid=a43debf5-3b48-4425-a114-5e34340c0367-17&btsid=161bdff2-605e-4de3-9a05-00643ef21b14&ws_ab_test=searchweb0_0,searchweb201602_10,searchweb201603_55) помоги выбрать правильную и подешевле, попробую твоим способом.
Вот еще интересный вариант BS Micro (https://www.youtube.com/watch?v=O5WQ8T3-AbY&t=)
Title: Re: Изменить способ обращения
Post by: ya12 on November 06, 2019, 12:41:36 PM
Можно ли через нее одновременно реализовать лкм пкм и 5 кнопок клавиатуры? и что бы все работало через кликер, но боюсь что возможно будет такая же проблема курсор попадет в окно игры и все кликер не будет работать отправлять команды.
Можно использовать все кнопки что ты видишь у себя на клавиатуре и двигать и кликать мышкай.
Плата будет работать также как и твоя физическая мышь и клавиатура.... это и есть физические мышь и клавиатура, точно такие же как у тебя перед глазами, только кнопок на плате нету. Подключается в любой порт юсб обычным проводом зарядки смартфона. Програмируется один раз и под свои нужды, далее работаем только через кликерман. В нужный момент, если нужно нажать нужную кнопку или передвинуть курсор мыши, просто отсылаем сигнал нашей ардуине сигнал и она выполнит нужное.


postmessage($_hwnd, 0x0100, #i, 00170001)



Что за параметр "00170001"? Может нужно дописать "0x" чтобы кликер понял что это число в 16-ричном виде. И если не сикрет, что этот параметр значит? Судя по мануалу в lParam при нажатиях кнопок нам может помочь только с - "число повторов, код сканирования, флаг расширенного ключа, код контекста, предыдущий флаг состояния ключа и флаг переходного состояния."

Очепятка, конечно же все значения шестнадцатеричные (0x00170001).
Данные получены с помощью SPY++ путем нажатия на клавиатуре клавиши i в активном окне (на случай если защита анализирует данные lParam).
Title: Re: Изменить способ обращения
Post by: dramster on November 06, 2019, 11:28:09 PM
Вот эта подойдет? Pro Micro ATmega32U4 (https://ru.aliexpress.com/item/32902569443.html?spm=a2g0o.productlist.0.0.67351c79eYeZWp&algo_pvid=a43debf5-3b48-4425-a114-5e34340c0367&algo_expid=a43debf5-3b48-4425-a114-5e34340c0367-17&btsid=161bdff2-605e-4de3-9a05-00643ef21b14&ws_ab_test=searchweb0_0,searchweb201602_10,searchweb201603_55)

Именно такая у меня и была, купил просто ради интереса, попользовался в игре с защитой пару дней и забил. Интерес к этой игре пропал уже давно  :(. Сейчас даже и не помню где эта плата, нужно искать.
Когда купишь, пиши если что непонятно будет, у меня какието наработки должны быть гдето в архивах, либо напишем с нуля, там делов на минут 10-20.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 06, 2019, 11:53:20 PM
Я тут глянул на своем ноуте, в диспетчере и обнаружил такую интересную вещь. С этим можно работать?
Можно, пиши дерективы #ps2_mouse и #ps2_keyboard и твои клики и нажатия будут прохотдить именно через твои ps/2 устройства... и проблема решена.
Попробовал но не работает.
Вчера, я не знаю что сделал, а может и ничего, не помню последовательность действий, просто запустил кликер и он начал работать, но после повторного запуска хоть убейся не пашет. Заметил одну вещь, в тот момент когда он работал, кликер определял PID и название ехе файла а щас не определяет.
Когда купишь, пиши если что непонятно будет, у меня какието наработки должны быть гдето в архивах, либо напишем с нуля
Заказал SS Micro (https://ru.aliexpress.com/item/32660718568.html) когда придет будем разбираться, спасибо за помощь.
Title: Re: Изменить способ обращения
Post by: Vint on November 07, 2019, 10:56:34 AM
Вчера, я не знаю что сделал, а может и ничего, не помню последовательность действий, просто запустил кликер и он начал работать, но после повторного запуска хоть убейся не пашет. Заметил одну вещь, в тот момент когда он работал, кликер определял PID и название ехе файла а щас не определяет.
Значит hwnd не того окна. Ты полазь по разным окнам, посмотри их структуру и параметры с помощью, например, InqSoft Window Scanner
Раз работало, значит начал слать нужному окну, именно тому, которое обрабатывает.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 07, 2019, 04:24:13 PM
Вчера, я не знаю что сделал, а может и ничего, не помню последовательность действий, просто запустил кликер и он начал работать, но после повторного запуска хоть убейся не пашет. Заметил одну вещь, в тот момент когда он работал, кликер определял PID и название ехе файла а щас не определяет.
Значит hwnd не того окна. Ты полазь по разным окнам, посмотри их структуру и параметры с помощью, например, InqSoft Window Scanner
Раз работало, значит начал слать нужному окну, именно тому, которое обрабатывает.
Там одно окно, игра клиентская, хотя иногда складывается такое впечатление что по верх окна игры наложено типа зеркала что то. Да и окно игры то что видно название у него одно, а когда кликер заработат ехе по другому в кликере отображался. Вот в этой проге показывает название окна sframe. что делать дальше и как это мне поможет?
Когда жму лампочку моргает все окно игры, когда выбираю в окошке программы внизу дочернее окно, мерцает не большая полоса в окне игры.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 28, 2019, 02:44:16 PM
Пришла плата SS Micro, объясните с чего начать?
Title: Re: Изменить способ обращения
Post by: dramster on November 28, 2019, 04:36:35 PM
Вечером отпишу... а пока, ознакомся с сайтом ардуино.ру, скачай ide, ознакомся с основами синтаксиса. Если автоматом драйвера на нее не стали, то либо скачай нужные, либо воспользуйся поиском майкрамофта. Должны добавиться 3 устройства - мышь, клавиатура и и еще какаянто хрень типа ардуино ком.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 28, 2019, 05:42:48 PM
Я все установил, есть даже библиотеки в проге, надо только настроить скрипт в плату что бы он исполнял команды и прописать команды в кликер что бы отправлял на плату.
Title: Re: Изменить способ обращения
Post by: dramster on November 28, 2019, 09:26:22 PM
Начнем с того, что проверим на работоспособность твою плату. Вот тут описаны все функции из библиотек "Keyboard.h" и "Mouse.h" - https://doc.arduino.ua/ru/prog/MouseKeyboard , тут же и простые примеры использования.

К примеру попробуй загрузить вот такой скетч в свою ардуину:
Code: (clickermann) [Select]
#include <Keyboard.h>  //подключает либу для клавы


 
void setup() {
  Keyboard.begin(); //включает эмуляцию клавиатуры на микрухе
}
 
void loop() {
 
   //цикл на пять выполнений
   for (int i=0; i < 5; i++){
 
    delay(5000); //ждет 5 секунд
    Keyboard.println("Hello!"); //и пишет Hello!
    //и так по кругу, каждый раз с новой строки.
 
   }
   delay(3600000); // час перерыва... чтоб не мешал писать ноый код и загрузить ноый скетчь, чето не нашел команды типа exit, возможно она есть, поищи.


Не забудь выбрать в меню нужные плату и порт в меню "инструменты". У меня в данный момент нету платы для теста. По идее плата должна подойти "arduino/genuino micro". Если не подойдет, то ищи , добавляй ту что нужно.
(https://i.imgur.com/tVrSkMc.png)

Если все будет работать, то пойдем дальше, будем соединять с кликерманом наш девайс.
Title: Re: Изменить способ обращения
Post by: dramster on November 28, 2019, 09:33:56 PM
(https://i.imgur.com/R0y6lRO.png)

Надеюсь уже разобрался, что тут две главные кнопки -  скомпилировать (сохранить, проверить) первая,  и загрузить в микросхему вторая.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 28, 2019, 09:58:42 PM
Работает, в блокноте написал приветствие 5 раз
Title: Re: Изменить способ обращения
Post by: dramster on November 28, 2019, 10:40:43 PM
отлично, теперь берем инфу от отсюда http://crapware.aidf.org/forum/index.php?topic=3252.msg21979#msg21979 . Там описано как отсылать сообщения ардуине, и чтоб она делала по нашей команде нужные нам действия. Я щяс сам почитаю, вспомню, наброски напишу, а дальше ты уже сам поймешь, допишешь
Title: Re: Изменить способ обращения
Post by: dramster on November 28, 2019, 11:29:13 PM
Вот пример левого и правого клика мышки, и нажатие и и отпускание кнопки W. Код ардуино:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"

String instring = "";
unsigned int val = 0;
 
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {

  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read();
    if (isDigit(inchar)) {
      instring += (char)inchar;
    }
    if (inchar == '\n') { //как только закончили прием
    val = instring.toInt(); //собираем из текста число в переменную val
    instring = "";
 


      //далее, в зависимости от этого числа, даем команду ардуине делать дела
      switch (val) {
        case 1:  // если получим число 1 , делаем левый клик
          Mouse.click(MOUSE_LEFT);
          break;
        case 2: // если получим число 2 , делаем правый клик
          Mouse.click(MOUSE_RIGHT);
          break;
        case 87: //если получили 87, то жмем и держим на W
          Keyboard.press('w');
          break;
        case 8700: //если получили 8700, то отпускаем W
          Keyboard.release('w');
          break;
          //и так далее, если нужны другие команды, все в твоих руках
      }
    }
  }
}


Далее пишем в кликермане:
Code: (clickermann) [Select]
#name "arduino mouse/keybord"

$comport = 6  //порт твоей ардуины

SUB(action, $command)
   STRWRITELN ("file.bat"," ", 1) // стираем файл и пишем чушь изза глюков с ВОМ
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 0)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$command,"> com",$comport), 0)
   EXECUTE("file.bat")
END_SUB



//к примеру

wait(5) //ждем 5 сек

MOVE(100,100) //перемещаем курсор в нужное место

waitms(100) //небольшая задержка

action(1) //делаем клик левой кнопки мыши, физически ардуиной

wait(5) //ждем 5 сек

action(87) //нажимаем W  , физически ардуиной

wait(5) //ждем 5 сек

action(8700) //отпускаем W  , физически ардуиной

halt //для примера хватит


Чтобы не было черного окна, там в теме далее Vint написал как с этим справиться - http://crapware.aidf.org/forum/index.php?topic=3252.msg22009#msg22009

 Немного подправил, тестить то неначем  ;)


К стати, знающие люди, вот этот кейс:
Code: (clickermann) [Select]
switch (val) {
        case 1:  // если получим число 1 , делаем левый клик
          Mouse.click(MOUSE_LEFT);
          break;
        case 2: // если получим число 2 , делаем правый клик
          Mouse.click(MOUSE_LEFT);
          break;
        case 87: //если получили 87, то жмем и держим на W
          Keyboard.press('w');
          break;
        case 8700: //если получили 8700, то отпускаем W
          Keyboard.release('w');
          break;
          //и так далее, если нужны другие команды, все в твоих руках
      }

Обязательно каждый раз break; писать? это оптимизирует-ускорит работу, или это не существенно?
Title: Re: Изменить способ обращения
Post by: dramster on November 29, 2019, 12:43:43 AM
  В идеале вся эта работа по сообщению с платой должна проходить с помощью длл с автоматическим определением ком порта, и без сяких там командных строк и черных окон. Но это нужно читать, вникать как работает связь с последовательными портами. Если будет нужда и желание, можно будет написать универсальную длл для работы кликермана с ардуино, тоесть все мышкины и клавиатурные действия. Пока такой нужды нет :( .
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 29, 2019, 09:04:02 AM
Я очень благодарен, за помощь и потраченое время. Вроде все понятно, но в то же время ничего не понятно. Это как знать куда идти, но ноги не идут. Все очень сложно, нужно знать не один язык программирования, а я не знаю ни одного. 
Что бы добавить остальные буквы клавиатуры просто дописывать кейсы?
Code: (clickermann) [Select]
// Что бы добавить всю клавиатуру просто дописать кейсы? как получить номера? или это просто 10-ный код кнопки, а команда на отпускание кнопки, просто дописано два нуля?

          case 87: //если получили 87, то жмем и держим на W
          Keyboard.press('w');
          break;
          case 8700: //если получили 8700, то отпускаем W
          Keyboard.release('w');
          break;

ком порт меняется, его нужно писать снова, если изменился?
Code: (clickermann) [Select]
$comport = 6  //порт твоей ардуины
Если не сложно разжувать вот эти строки, я вообще тут потерялся, понятно это отправляет команду на порт, но я хочу понять как это работает, зная принцип работы, можно придумать еще что нибудь, ну или попробовать написать DLL, хотя для меня это как на луну попасть...
Code: (clickermann) [Select]
SUB(action, $command)
   STRWRITELN ("file.bat"," ", 1) // стираем файл и пишем чушь изза глюков с ВОМ
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 0)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$command,"> com",$comport), 0)
   EXECUTE("file.bat")
END_SUB
// Получаем это
Mode  // Настраивает системные устройства
com6// Ком порт
baud=9600  //???
parity=n  //???
data=8  //???
stop=1  // Я так понимаю остановка?:)
echo 87> com6 // Отправляет инфу на порт

И судя по этому примеру, мне кажется что все это было напрасно...
После попадания указателя в окно игры, он не реагирует на команды, и соответственно не будет работать MOVE и возможно остальное тоже, если только после каждой команды переводить фокус на окно кликмана.
Code: (clickermann) [Select]
//к примеру
 
wait(5) //ждем 5 сек
 
MOVE(100,100) //перемещаем курсор в нужное место
 
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 29, 2019, 02:11:16 PM
Как я и говорил, кликерман перестает работать после того как окно игры становится активным. тоесть если к примеру прописать перейти в координаты 100 100 и клинуть потом найти пиксель в 200 200 и кликнуть отработается только первое действие и все дальше ниче не работает.  Но если после первой команды перевести фокус на любое другое окно опять срабатывает одна команда и все. Что мне далать дайте дельный совет ... Тупая старая игра и так сложно обойти защиту( Как отключить или обойти защиту Gameguard?
Title: Re: Изменить способ обращения
Post by: Vint on November 29, 2019, 02:56:14 PM
Как у вас интересно. Мне тоже ардуинка приехала неделю назад. Ещё не распаковывал, всё времени нет  :(

Хоть у меня и нет задач под неё, интересно ведь. Подскажите какое нибудь маленькое приложение для опытов, чтобы прямой POSTMESSAGE не работал.
Title: Re: Изменить способ обращения
Post by: Vint on November 29, 2019, 03:08:00 PM
А ты менял "Используемый GUI идентификатор программы"
в data/config.ini
program_name = ...

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

Посмотри на своё приложение, какой у него приоритет. Может у него задран приоритет и он почти не отдаёт время другим приложениям (кроме системных). Понизь до нормального.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 29, 2019, 03:53:09 PM
А ты менял "Используемый GUI идентификатор программы"
в data/config.ini
program_name = ...
Да
(https://i111.fastpic.ru/big/2019/1129/98/12c601e7ab480caa66c809e76f3d8e98.png)

Вот что показывает когда навожу на окно игры
(https://i111.fastpic.ru/big/2019/1129/6a/c87675df6c4375f5ff94997b7980d36a.png)

Вот это запускаю на ноуте с ps2 мышь/клава, не работает
(https://i111.fastpic.ru/big/2019/1129/44/9e88e51f60b406fc679af8104e0c0c44.png)
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 29, 2019, 04:21:19 PM
И почему бы не развить эту тему? У пилота есть своя длл под ардуино, почему бы и кликмана не собрать свою? Просьба гуру форума помочь в этом  ;)
Еще такой вопрос а нельзя ли полность написать скрипв в плату? Или он тупо не поместится? Я заметил что мы записали пару строк и мапять заполнилась на 18%
Title: Re: Изменить способ обращения
Post by: ya12 on November 29, 2019, 05:40:59 PM
Как у вас интересно. Мне тоже ардуинка приехала неделю назад. Ещё не распаковывал, всё времени нет  :(

Хоть у меня и нет задач под неё, интересно ведь. Подскажите какое нибудь маленькое приложение для опытов, чтобы прямой POSTMESSAGE не работал.

А зачем маленькому приложению защита от POSTMESSAGE? Бери что нибудь многопользовательское.
Ту же rzonline.ru. Что бы Ramzesia не один мучился.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 29, 2019, 05:47:14 PM
Надеюсь это был не сарказм) и да было бы просто отлично, если взялись бы гуру форума за эту игрулю) если кто выложит рабочий настраиваемый скрип, на фарм данджа и в поле, я даже готов отблагодарить в рублях) можно даже вариант с обходом защитой, что бы я мог свободно использовать кликмана без всяких приблуд.
Title: Re: Изменить способ обращения
Post by: ya12 on November 29, 2019, 07:46:56 PM
Посмотрел игрушку - не зацепило. Я на другой сижу. Ковырять защиту без азарта, скучно.
А Винту все равно на чем тренироваться. Может чего полезного придумает.
Title: Re: Изменить способ обращения
Post by: dramster on November 29, 2019, 08:38:32 PM
Вот пример левого и правого клика мышки, и нажатие и и отпускание кнопки W. Код ардуино:
.......

   Это был лишь пример сопряжения ардуины с кликерманом. Для мелких нужд вполне хватает. Я использовал ардуино про микро  единожды (дня4-5) для прокачки одной профессии в мта-са - мультиплеер гта-санандреас, там какуюто защиту влупили, ни клавиатура ни мышь не работают через кликерманн без пс\2. Код состряпал на скорую руку, он отработал, и я про него забыл.

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

     Суть в том, что в микруху мы отсылаем строку и делаем из нее число. Я решил что 4 байта вполне хватит для всего функционала "unsigned long". Далее берем 4 последних бита (хотя хватило бы и три) - это номер нашей функции (16 значений). Нам то нужно всего то - Mouse.click(), Mouse.move(), Mouse.press(), Mouse.release(), Keyboard.press(), Keyboard.release(), Keyboard.releaseAll(), Keyboard.write(). Остальные 28 бит используем для параметров.

Для начала принимаем это число тем же старым способом, код ардуино:
Code: (clickermann) [Select]
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
  } //все, с приемом окончили, получили число val

////////////////////////////////////////////////////////////////////////

В кликермане так и пишем подпрограммы как они и есть, чтобы не путаться с мануалами:

Начну с первой функции Mouse.click():
Code: (clickermann) [Select]
SUB(Mouse_click, $button)   // button = 1 это левая кнопка, 2 -  правая, 3 - средняя
   action(268435456 + $button) //в ардуино выйдет первая функция и нужный из трех параметров
END_SUB

//пример вызов лклик
Mouse_click(1)
Подпрограмма "action" остается старой.

В ардуино код на этот параметр выполнит так:
Code: (clickermann) [Select]
//ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456 // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
   }

    //................... 


Далее читаю насчет Mouse.move() , а тут засада, не сосем понятны параметры, и они ограничены величиной signed char  :o.

Синтаксис
Mouse.move(xVal, yVal, wheel)

Параметры
xVal: величина, на которую следует переместить указатель вдоль оси x - signed char

yVal: величина, на которую следует переместить указатель вдоль оси y - signed char

wheel: величина смещения колеса прокрутки - signed char

Если я правильно понял, то курсор может за один раз сместиться максимум на 127 пикселей, а параметр wheel крутит колесо. Както отстойно получается. ...или может wheel это шаг хода курсора   ???  А возможно мануал врет? и можно перемещать курсор на большие расстояния?

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

Title: Re: Изменить способ обращения
Post by: dramster on November 29, 2019, 09:02:24 PM
Я очень благодарен, за помощь и потраченое время. Вроде все понятно, но в то же время ничего не понятно. Это как знать куда идти, но ноги не идут. Все очень сложно, нужно знать не один язык программирования, а я не знаю ни одного. 
Что бы добавить остальные буквы клавиатуры просто дописывать кейсы?
Code: (clickermann) [Select]
// Что бы добавить всю клавиатуру просто дописать кейсы? как получить номера? или это просто 10-ный код кнопки, а команда на отпускание кнопки, просто дописано два нуля?

          case 87: //если получили 87, то жмем и держим на W
          Keyboard.press('w');
          break;
          case 8700: //если получили 8700, то отпускаем W
          Keyboard.release('w');
          break;
В принципе для мелких нужд типа пару кнопок нажать, можно любое число писать, и соответственно отсылать его из кликермана. Кейсов можешь дописывать сколько угодно, сколько нужно, я для примера написал только для одной клавиши. А для отпускания дописал нули просто так, первое что в голову пришло.

ком порт меняется, его нужно писать снова, если изменился?
Code: (clickermann) [Select]
$comport = 6  //порт твоей ардуины
Да, но если не тыкать в пк разные устройства, то он всегда один и тот же.

Если не сложно разжувать вот эти строки, я вообще тут потерялся, понятно это отправляет команду на порт, но я хочу понять как это работает, зная принцип работы, можно придумать еще что нибудь, ну или попробовать написать DLL, хотя для меня это как на луну попасть...
Code: (clickermann) [Select]
SUB(action, $command)
   STRWRITELN ("file.bat"," ", 1) // стираем файл и пишем чушь изза глюков с ВОМ
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 0)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$command,"> com",$comport), 0)
   EXECUTE("file.bat")
END_SUB
// Получаем это
Mode  // Настраивает системные устройства
com6// Ком порт
baud=9600  //???
parity=n  //???
data=8  //???
stop=1  // Я так понимаю остановка?:)
echo 87> com6 // Отправляет инфу на порт
:) Зачем тебе это знать, я взял когдато готовый пример гдето из интернета, ну примерно понимаю что там что значит, но не уверен, да и пофиг. baud типа скорость, parity - чтото с четностью бит связано вроде, data - типа наша инфа в расчете в 8 бит и стоп бит stop=1, возможно я не прав....


И судя по этому примеру, мне кажется что все это было напрасно...
После попадания указателя в окно игры, он не реагирует на команды, и соответственно не будет работать MOVE и возможно остальное тоже, если только после каждой команды переводить фокус на окно кликмана.
Code: (clickermann) [Select]
//к примеру
 
wait(5) //ждем 5 сек
 
MOVE(100,100) //перемещаем курсор в нужное место
 

Если я правильно понял, то у тебя в игре и MOVE не работает? Такого я не ожидал. Но ардуина может и курсор двигать если ты не в курсе. Почитай как, потестируй, попробуй ардуинкой переместить курсор - кликнуть - еще переместить - еще кликнуть. Для начала без участия кликермана, для теста https://doc.arduino.ua/ru/prog/MouseMove
Title: Re: Изменить способ обращения
Post by: dramster on November 29, 2019, 09:27:00 PM
Еще такой вопрос а нельзя ли полность написать скрипв в плату? Или он тупо не поместится? Я заметил что мы записали пару строк и мапять заполнилась на 18%
Память микры 32кб - это 32 тысячи символов (там еще загрузчик чтото забирает вроде 4кб) . Вот твои 18% и есть скорее всего загрузчик, плюс две библиотеки тоже место занимают.

К стати у микрухи есть еще 1 кб памяти (EEPROM), которую мы можем читать и писать прямо во время работы платы, без участия ide . К примеру сохранять какието параметры, которые не пропадут при следующем включении. Но для нас эта память врядли пригодится. ... Применимо для смены каких то параметров, которые нужно сменить, но не охота перепрошивать полностью скетч, либо для сохранения подобия лога (на 1кб сильно не разгуляешься  :D).
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 03:54:44 AM
По поводу Arduino:
1.Как передать координаты, из кликмана, по которым нужно кликнуть?
2.Как или что прописать, что бы не потерять управление мышкой и клавой? Это предупреждение стоит во всех описаниях.

Тут набросал пример что происходит, с указателем.
Code: (clickermann) [Select]
GETSCREEN
IF(PXL(56,71) = 43045)
   LCLICK(56,71)
   WAITMS(500)
   LOGWRITE ("Нашел цвет текущие коры указателя = ",$_xmouse," х ",$_ymouse)
   WAITMS(100)
END_IF
MOVE(100,100)
LOGWRITE ("текущие коры указателя = ",$_xmouse," х ",$_ymouse)

LOGWRITE (" ")
halt
Вот лог, первая запись запуск активное окно кликера, второй запуск активное окно игры.
Code: (html5) [Select]
<!--То есть прыгает на коры и не двигается -->
4:32:39 Нашел цвет текущие коры указателя = 56 х 71
4:32:40 текущие коры указателя = 56 х 71
4:32:40
<!--а тут вообще примерз -->
4:32:46 Нашел цвет текущие коры указателя = 585 х 355
4:32:46 текущие коры указателя = 585 х 355
4:32:46
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 11:00:29 AM
Ну вот примерно так, судя по мануалу, будет выглядеть перемещение курсора. Писал в слепую, неначем проверить. Может Vint поможет если чтото не так пойдет.

Тут полный готовый скетч с двумя функциями - клик мыши, и перемещение курсора:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
  } //все, с приемом окончили, получили число val

////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}



Тут твой тест, переделанный под ардуино, вместе с нужными подпрограммами:

Code: (clickermann) [Select]
#name "arduino mouse/keybord"

$comport = 6  //порт твоей ардуины

SUB(action, $command)
   STRWRITELN ("file.bat"," ", 1) // стираем файл и пишем чушь изза глюков с ВОМ
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 0)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$command,"> com",$comport), 0)
   EXECUTE("file.bat")
END_SUB

SUB(Mouse_click, $button)   // button = 1 это левая кнопка, 2 -  правая, 3 - средняя
   action(268435456 + $button) //в ардуино выйдет первая функция и нужный из трех параметров
END_SUB

SUB(Mouse_move, $x_cor, $y_cor)
   WHILE(($x_cor ! $_xmouse)&($y_cor ! $_ymouse))
      $x_temp = $_xmouse
      $y_temp = $_ymouse
      $x_dist = $x_cor - $_xmouse           // определяем расстояние до нуженой точки
      $y_dist = $y_cor - $_ymouse
     
      IF((-128 < $x_dist)&($x_dist < 127))   //проверяем, чтоб не заходило значение за пределы char
         IF($x_dist < 0)
            $x_dist = 127 - $x_dist     //переделываем в беззнаковый unsigned char
         END_IF
      END_IF
     
      IF((-128 < $y_dist)&($y_dist < 127))
         IF($y_dist < 0)
            $y_dist = 127 - $y_dist
         END_IF
      END_IF
     
      action(536870912 + $x_cor*256 + $y_cor) //в ардуино выйдет вторая функция и нужные сдвиги одним параметром
      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
         waitms(100)    //ждем перемещения курсора
      END_CYC
      //на всякий случай поставлю задержку добротную, я хз как там ардуина двигает этот курсор
      wait(5)//пять секунд, если она не требуется, убери или уменьши до нужного!!!!!!!!!!!!!!!!!!
   END_CYC
END_SUB





//твой код  (переделанный под ардуино)

GETSCREEN
IF(PXL(56,71) = 43045)
   Mouse_move(56,71)
   waitms(100)
   Mouse_click(1)
   WAITMS(500)
   LOGWRITE ("Нашел цвет текущие коры указателя = ",$_xmouse," х ",$_ymouse)
   WAITMS(100)
END_IF
Mouse_move(100,100)
LOGWRITE ("текущие коры указателя = ",$_xmouse," х ",$_ymouse)

LOGWRITE (" ")

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



-------------------------------
Думал заказать микру, сегодня привезли бы, но глянул - 485р+доставка... нету денег :-[. В другой раз, мне коечто еще нужно купить, заодно и ардуинку возьму.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 02:34:32 PM
Лог пустой ничего не происходит :-[
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 02:50:42 PM
Конечно не происходит, там же ошибка. По крайней мере одну я нашел, но возможно их больше  :D

Строка 35 кликермана, вызов подпрограммы, не верные параметры. Вместо:
Code: (clickermann) [Select]
action(536870912 + $x_cor*256 + $y_cor)
Нужно:
Code: (clickermann) [Select]
action(536870912 + $x_dist*256 + $y_dist)
Проверяй, если не будет работать, будем добавлять логирование и в ардуину и в кликерман.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 02:57:43 PM
Далеко не уходи могу до утра сидеть) может скайп? мой - ggkvova  всегда на связе
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 03:07:12 PM
Окно игры активно, мышь не двигается, лог пустой. окошко командной строки появляется 1 раз если ничего не трогать, но если двигать курсором окно командной строки появляется каждый цыкл кликмана. Есще не знаю важно или нет но окошко появляется в разных местах, чем дальше курсор от координат 0, 0  тем дальше окно ком. строки
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 03:23:31 PM
Ок, для начала убери вот это из кликера,
Code: (clickermann) [Select]
      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
         waitms(100)    //ждем перемещения курсора
      END_CYC
оставим статическую задержку в 5сек.

Далее посмотрим что там мы принимаем в ардуине. IDE -меню - инструменты - монитор порта. Там можно смотреть лог работы платы. Открой его, и скажешь что там будет. Скрипт выполнишь один раз в активном окне.

Теперь нужно добавить то самое логирование. Готовый скетч будет выглядеть так:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
  } //все, с приемом окончили, получили число val
  Serial.println(val, DEC);
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}

Не забывай компилировать и загружать скетч в микруху.


Подправил немного, повтори заново !!!!!!!!!!
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 03:30:14 PM
При проверке такое пишет
exit status -1073741819
Ошибка компиляции для платы Arduino/Genuino Micro.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 03:32:18 PM
Офигеть просто при включенной игре, проверка не проходит ))))
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 03:35:59 PM
То же самое, окно появляется теперь каждые 5сек, мышь стоит на месте клики не происходят, лог пустой
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 03:39:58 PM
а в мониторе порта что?
(https://i.imgur.com/El7f7o5.png)

Немного сменил скетч, ато там нули будут идти постоянно:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 03:46:42 PM
Постоянно идет ноль, даже при отработке смд
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 03:49:28 PM
Еще проверил этот вариант, не в игре а просто на рабочем столе, поменял координаты в кликермане, что бы попадал в ярлык, но ни лкм, пкм не происходит
http://crapware.aidf.org/forum/index.php?topic=5215.msg34120#msg34120
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 03:50:36 PM
Постоянно идет ноль, даже при отработке смд
глянь выше, я там поправил немного чтоб нули не шли.
или это именно на последнем варианте тоже нули?
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 03:52:50 PM
последний вариант
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 03:54:14 PM
Еще проверил этот вариант, не в игре а просто на рабочем столе, поменял координаты в кликермане, что бы попадал в ярлык, но ни лкм, пкм не происходит
http://crapware.aidf.org/forum/index.php?topic=5215.msg34120#msg34120
кстати тут вообще не идет лог в мониторе порта
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 03:58:03 PM
все ясно, у тебя вообще ничего не идет в порт, с этого надо было и начинать.
Попробуй подпраь подпрограмму
Code: (clickermann) [Select]
SUB(action, $command)
   STRWRITELN ("file.bat"," ", 1) // стираем файл и пишем чушь изза глюков с ВОМ
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 0)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$command,"> com",$comport), 0)
   STRWRITELN ("file.bat", "pause", 0)
   EXECUTE("file.bat")
END_SUB
Вызови эту подпрограмму, и скажи что там в командной строке написано
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 04:00:59 PM
последний вариант
в последнем варианте не должно быть нулей, никак, ззначит не загрузил скетч. Еще раз, вот этот:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 04:04:00 PM
Вот это в бат прописалось

Mode com0 baud=9600 parity=n data=8 stop=1
echo 1> com0
pause

Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 04:07:15 PM
Code: (clickermann) [Select]
$comport = 6 // ну так ком порт прописать нужный надо!!!!!!! или у тебя в нулевой порт всунута плата?

SUB(action, $command)
   STRWRITELN ("file.bat"," ", 1) // стираем файл и пишем чушь изза глюков с ВОМ
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 0)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$command,"> com",$comport), 0)
   STRWRITELN ("file.bat", "pause", 0)
   EXECUTE("file.bat")
END_SUB
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 04:08:41 PM
последний вариант
в последнем варианте не должно быть нулей, никак, ззначит не загрузил скетч. Еще раз, вот этот:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}
Да я не заметил последнюю првку, ивяняюсь, теперь точно проверил, нули не идут, по прежнему ничего не происходит и в мониторе пусто 
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 04:10:52 PM
А теперь вместе, этот последний скетчь, и последняя подпрограмма с паузой, что там и там пишет? У меня есть подозрение, что если порт занят одним приложением, то он недоступен другим... :(
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 04:14:14 PM
У меня есть подозрение, что если порт занят одним приложением, то он недоступен другим... :(
На такую инфу я натыкался, это вроде так и еслть.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 04:17:57 PM
Вместе такая шляпа
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 04:18:12 PM
ПОНЯЛ,  ХЕРОВО, щяс обдумаю что может быть не так. То есть посмотреть что происходит в ардуине у нас не выйдет....

Будем искать проблему вслепую.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 04:24:24 PM
Может от легкого к сложному? Первый пример, с кликом правый левый тоже не работает.
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 04:28:00 PM
Загрузи вот такой скетч и открой монитор порта, кликерман не трогай, просто всунь ардуину в усб и смотри в монитор порта.
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 536902177; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }
  delay(5000);

 // val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 04:32:34 PM
Вот
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 04:34:16 PM
Понял, жди, гдето ошибка, щяс обдумаю.

Теперь такой скетч, также смотри монитор порта:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 536902177; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  val/268435456 ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      Serial.println("Mouse_move");
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }
  delay(5000);

 // val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 04:46:14 PM
Вроде то же самое
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 04:50:08 PM
Теперь так:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 536902177; // создаем переменную в 4 байта
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   int kmfunct =  int(val/268435456) ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      int click_par = val - kmfunct*268435456; // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
      break;
     
    case 2: //  Mouse.move()
      Serial.println("Mouse_move");
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }
  delay(5000);

 // val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 04:54:26 PM
вот
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 05:00:11 PM
Ну теперь то точно все сработает... этот гребанный язык си..... >:(
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 536902177; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;


 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      Serial.println("Mouse_click");
      click_par = int (val - kmfunct*268435456); // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
     break;
     
    case 2: //  Mouse.move()
      Serial.println("Mouse_move");
      char x_cor = (val - kmfunct*268435456)/256;
      char y_cor = val - x_cor*256 - kmfunct*268435456;
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }
  delay(5000);

 // val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 05:03:55 PM
Предположил что должен двигаться курсор,если так то, этого не происходит.
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 05:09:18 PM
Вот теперь должен двигать, проверь:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 536902177; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;
char x_cor = 0;
char y_cor = 0;

 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      Serial.println("Mouse_click");
      click_par = int (val - kmfunct*268435456); // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
     break;
     
    case 2: //  Mouse.move()
      Serial.println("Mouse_move");
      x_cor = char((val - kmfunct*268435456)/256);
      y_cor = char(val - x_cor*256 - kmfunct*268435456);
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(x_cor, y_cor, 0);
      break;
    }
  delay(5000);

 // val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 05:13:17 PM
тоже самое не двигается
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 05:16:47 PM
Что там с типами переменных в мануале наверно напутано, пробую напрямую без переменных, должно двигать:
Code: (clickermann) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned long val = 536902177; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;
char x_cor = 0;
char y_cor = 0;

 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
   Serial.println(val, DEC);
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   Serial.println(kmfunct, DEC); //смотрим номер функции
   switch (kmfunct) {
   
    case 1:  //  Mouse.click
      Serial.println("Mouse_click");
      click_par = int (val - kmfunct*268435456); // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
     break;
     
    case 2: //  Mouse.move()
      Serial.println("Mouse_move");
      x_cor = char((val - kmfunct*268435456)/256);
      y_cor = char(val - x_cor*256 - kmfunct*268435456);
      Serial.println(x_cor, DEC); //смортим параметры сдвигов
      Serial.println(y_cor, DEC);
      Mouse.move(100, 100, 0);
      break;
    }
  delay(5000);

 // val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 05:20:20 PM
Пример мануала:
Code: (clickermann) [Select]
// считываем величину перемещения по двум осям:
  int xReading = readAxis(0);
  int yReading = readAxis(1);
 
// перемещаем указатель мыши:
    Mouse.move(xReading, yReading, 0);
Типы параметров  - int

А в описании написано :

Синтаксис
Mouse.move(xVal, yVal, wheel)
Параметры
xVal: величина, на которую следует переместить указатель вдоль оси x - signed char
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 05:21:16 PM
не двигается по прежнему
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 05:24:26 PM
Лаааадно  :o

Code: (clickermann) [Select]
#include "Mouse.h"
 
void setup() {
  Mouse.begin();
}
 
void loop() {
Mouse.move(100, 100, 0);
delay(3000);
}

Не забываешь проверять-компилировать перед загрузкой?
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 05:30:47 PM
Нет не забываю, не двигается
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 05:38:44 PM
Может она у тебя сламалась ?  ;D

Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
void setup() {
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
Mouse.move(100, 100, 0);
Keyboard.println("Hello!");
delay(3000);
}

проверим клавиатуру
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 05:49:47 PM
Проверил тоже не работало, перезагрузил комп, все заработало и короткий пример передвижения тоже сработал
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 05:51:50 PM
Вот это работает.
http://crapware.aidf.org/forum/index.php?topic=5215.msg34170#msg34170
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 05:56:37 PM
и что теперь? возвращаемся назад?  ;D

Код ардуино, исправленный, должен работать:

Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;
char x_cor = 0;
char y_cor = 0;
 
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   switch (kmfunct) {
 
    case 1:  //  Mouse.click

      click_par = int (val - kmfunct*268435456); // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
     break;
 
    case 2: //  Mouse.move()
      Serial.println("Mouse_move");
      x_cor = char((val - kmfunct*268435456)/256);
      y_cor = char(val - x_cor*256 - kmfunct*268435456);

      Mouse.move(x_cor, y_cor, 0);
      break;
    }
 
  val = 0; //в конце обнуляем нашу переменную
  }
}

Код кликермана для теста:

Code: (clickermann) [Select]
$comport = 6  //порт твоей ардуины

SUB(action, $command)
   STRWRITELN ("file.bat"," ", 1) // стираем файл и пишем чушь изза глюков с ВОМ
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 0)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$command,"> com",$comport), 0)
   EXECUTE("file.bat")
END_SUB

SUB(Mouse_click, $button)   // button = 1 это левая кнопка, 2 -  правая, 3 - средняя
   action(268435456 + $button) //в ардуино выйдет первая функция и нужный из трех параметров
END_SUB

SUB(Mouse_move, $x_cor, $y_cor)
   WHILE(($x_cor ! $_xmouse)&($y_cor ! $_ymouse))
      $x_temp = $_xmouse
      $y_temp = $_ymouse
      $x_dist = $x_cor - $_xmouse           // определяем расстояние до нуженой точки
      $y_dist = $y_cor - $_ymouse
     
      IF((-128 < $x_dist)&($x_dist < 127))   //проверяем, чтоб не заходило значение за пределы char
         IF($x_dist < 0)
            $x_dist = 127 - $x_dist     //переделываем в беззнаковый unsigned char
         END_IF
      END_IF
     
      IF((-128 < $y_dist)&($y_dist < 127))
         IF($y_dist < 0)
            $y_dist = 127 - $y_dist
         END_IF
      END_IF
     
      action(536870912 + $x_dist*256 + $y_dist) //в ардуино выйдет вторая функция и нужные сдвиги одним параметром
      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
         waitms(100)    //ждем перемещения курсора
      END_CYC
     
   END_CYC
END_SUB





//твой код  (переделанный под ардуино)  для теста


Mouse_move(56,71) // координаты чуть что подправь, чтоб увидеть клики
waitms(100)
Mouse_click(1)
waitms(100)
Mouse_move(200,200)
waitms(100)
Mouse_click(2)
wait(5)


Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 06:04:03 PM
Ничего не происходит, но когда двигаю курсор начинает бешено много  открываться cmd окошко
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 06:07:07 PM
Убрал передвижение, клики тоже не работают
Code: (clickermann) [Select]
//Mouse_move(56,71) // координаты чуть что подправь, чтоб увидеть клики
waitms(100)
Mouse_click(1)
waitms(100)
//Mouse_move(200,200)
waitms(100)
Mouse_click(2)
wait(5)
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 06:13:56 PM
Ком порт не сменился?

Если нет, то еще раз попробуй без кликермана - левый клик каждые 3 сек:
Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
String instring = "";
unsigned long val = 268435457; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;
char x_cor = 0;
char y_cor = 0;
 
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
   }
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   switch (kmfunct) {
 
    case 1:  //  Mouse.click

      click_par = int (val - kmfunct*268435456); // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
     break;
 
    case 2: //  Mouse.move()
      Serial.println("Mouse_move");
      x_cor = char((val - kmfunct*268435456)/256);
      y_cor = char(val - x_cor*256 - kmfunct*268435456);

      Mouse.move(x_cor, y_cor, 0);
      break;
    }
   delay(3000)

  //val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 06:16:40 PM
Перезагрузил комп, правый левый клик работает, передвижение нет, предполагаю что из за того что условие не срабатывает
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 06:27:03 PM
попробуй такой вариант, вынес все переменные в глобальные. Пробуй управлять кликерманом.
Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;
char x_cor = 0;
char y_cor = 0;
int inchar = 0;
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if (isDigit(inchar)) { //если это цифра,
      instring += (char)inchar;   //то соединяем ее с предыдущей цифрой
    }
    if (inchar == '\n') { //как только закончили прием. '\n' значит перенос строки, значит конец передачи.
    val = instring.toInt(); //строку instring переделываем в число val
    instring = ""; //обнуляем строку
    inchar = 0;
   }
  } //все, с приемом окончили, получили число val
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   switch (kmfunct) {
 
    case 1:  //  Mouse.click

      click_par = int (val - kmfunct*268435456); // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
     break;
 
    case 2: //  Mouse.move()
      Serial.println("Mouse_move");
      x_cor = char((val - kmfunct*268435456)/256);
      y_cor = char(val - x_cor*256 - kmfunct*268435456);

      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 06:35:30 PM
Не работает, я думаю проблема в цыкле или условии, он дальше подпрограммы Mouse_move не идет, когда комментирую //Mouse_move то клики пкм лкм срабатывают, движения нет
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 06:54:27 PM
Подпрограмма движения курсора такая?
Code: (clickermann) [Select]
SUB(Mouse_move, $x_cor, $y_cor)
   WHILE(($x_cor ! $_xmouse)&($y_cor ! $_ymouse))
      $x_temp = $_xmouse
      $y_temp = $_ymouse
      $x_dist = $x_cor - $_xmouse           // определяем расстояние до нуженой точки
      $y_dist = $y_cor - $_ymouse
     
      IF((-128 < $x_dist)&($x_dist < 127))   //проверяем, чтоб не заходило значение за пределы char
         IF($x_dist < 0)
            $x_dist = 127 - $x_dist     //переделываем в беззнаковый unsigned char
         END_IF
      END_IF
     
      IF((-128 < $y_dist)&($y_dist < 127))
         IF($y_dist < 0)
            $y_dist = 127 - $y_dist
         END_IF
      END_IF
      print($x_dist, "x", $y_dist)
      action(536870912 + $x_dist*256 + $y_dist) //в ардуино выйдет вторая функция и нужные сдвиги одним параметром
     
      wait(3) // задержку подберешь
   END_CYC
END_SUB
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 07:00:27 PM
Нет вот этот цыкл стоит после action
Code: (clickermann) [Select]
      action(536870912 + $x_dist*256 + $y_dist) //в ардуино выйдет вторая функция и нужные сдвиги одним параметром
      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
         waitms(100)    //ждем перемещения курсора
      END_CY
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 07:01:55 PM
Попробуй вот такой скетч, управляй кликерманом:
Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
String instring = "";
unsigned long val = 0; // создаем переменную в 4 байта
int kmfunct = 0;
int click_par = 0;
int x_cor = 0;
int y_cor = 0;
String inchar = "";
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
////////////////////////////////////////////////////////////////////////
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    inchar = Serial.read(); // принимаем по одному символу ASCI (по другому пока я незнаю как передавать)
    if ((inchar != String(10)) & (inchar != String(13))) {
    instring = String (instring + inchar); 
    }   
  }
    val = instring.toInt(); //строку instring переделываем в число val   
    instring = ""; //обнуляем строку
    inchar = "";
 
////////////////////////////////////////////////////////////////////////
  //ожидаем, пока переменная val станет больше нуля
  if (val > 0) {
  //далее разбиваем наше число на биты, и судя по ним, делаем нужные действия
   kmfunct =  int(val/268435456) ; //номер функции
   switch (kmfunct) {
 
    case 1:  //  Mouse.click

      click_par = int (val - kmfunct*268435456); // возможны 3 варианта - левая, правая, средняя
      switch (click_par) {
      case 1:
      Mouse.click(MOUSE_LEFT);
      break;
      case 2:
      Mouse.click(MOUSE_RIGHT);
      break;
      case 3:
      Mouse.click(MOUSE_MIDDLE);
      break;
     }     
     break;
 
    case 2: //  Mouse.move()
      x_cor = int((val - kmfunct*268435456)/256);
      y_cor = int(val - x_cor*256 - kmfunct*268435456);
      if (x_cor > 127) x_cor = 127 - x_cor;
      if (y_cor > 127) y_cor = 127 - y_cor;
      Mouse.move(x_cor, y_cor, 0);
      break;
    }

  val = 0; //в конце обнуляем нашу переменную
  }
}
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 07:03:00 PM
Нет вот этот цыкл стоит после action
Code: (clickermann) [Select]
      action(536870912 + $x_dist*256 + $y_dist) //в ардуино выйдет вторая функция и нужные сдвиги одним параметром
      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
         waitms(100)    //ждем перемещения курсора
      END_CY

В место цикла поставь задержку в пару сек, пока для отладки.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 07:11:31 PM
Движения нет, еще заметил когда Mouse_move активно, смд срабатывает 1 раз клики не происходят, если Mouse_move закоментировать , окно смд срабатывает 2 раза лкм срабатывает пкм нет а до этого пкм тоже срабатывало
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 07:18:04 PM
Вобщем я пока всё. В слепую трудно чтото делать, как приобрету ардуину, сам потестю. А ты пока помучай Vint-a, он быстро разберется  :D.

Когда у меня было про-микро, как-то затруднений не возникало, но мне нужно то было лклик и пару кнопок на клавиатуре нажать. MOVE работал из кликера.
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 07:31:51 PM
Эх жаль что не вышло(, но я все же думаю проблема в подпрограмме
Code: (clickermann) [Select]
SUB(Mouse_move, $x_cor, $y_cor)
   WHILE(($x_cor ! $_xmouse)&($y_cor ! $_ymouse))
      $x_temp = $_xmouse
      $y_temp = $_ymouse
      $x_dist = $x_cor - $_xmouse           // определяем расстояние до нуженой точки
      $y_dist = $y_cor - $_ymouse
     
      IF((-128 < $x_dist)&($x_dist < 127))   //проверяем, чтоб не заходило значение за пределы char
         IF($x_dist < 0)
            $x_dist = 127 - $x_dist     //переделываем в беззнаковый unsigned char
         END_IF
      END_IF
     
      IF((-128 < $y_dist)&($y_dist < 127))
         IF($y_dist < 0)
            $y_dist = 127 - $y_dist
         END_IF
      END_IF
     
      action(536870912 + $x_dist*256 + $y_dist) //в ардуино выйдет вторая функция и нужные сдвиги одним параметром
      //      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
      //         waitms(100)    //ждем перемещения курсора
      //      END_CYC
      waitms(3000)
   END_CYC
END_SUB
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 09:23:57 PM
Попробовал первый вариант, клики мыши и написать букву, клики происходили а вот с буквой возникли проблемы, заменил зажатие отжатие на нажать. Но писать бувку не хотел, предположил что мешает окно смд, поменял подпрограмму отправки в порт как показывал Винт, теперь все кликает и пишет в блокноте.
Code: (javascript) [Select]
#include "Keyboard.h"
#include "Mouse.h"
 
String instring = "";
unsigned int val = 0;
 
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
 
  //ожидание команды от кликермана в виде строоки
  while (Serial.available() > 0) {
    int inchar = Serial.read();
    if (isDigit(inchar)) {
      instring += (char)inchar;
    }
    if (inchar == '\n') { //как только закончили прием
    val = instring.toInt(); //собираем из текста число в переменную val
    instring = "";
 
 
 
      //далее, в зависимости от этого числа, даем команду ардуине делать дела
      switch (val) {
        case 1:  // если получим число 1 , делаем левый клик
          Mouse.click(MOUSE_LEFT);
          break;
        case 2: // если получим число 2 , делаем правый клик
          Mouse.click(MOUSE_RIGHT);
          break;
        case 87: //если получили 87, то жмем и держим на W
          Keyboard.write('w');
          break;
          //и так далее, если нужны другие команды, все в твоих руках
      }
    }
  }
}
Управление с кликмана
Code: (clickermann) [Select]
#name "arduino mouse/keybord"
 
$comport = 6  //порт твоей ардуины
 
SUB(action, $command)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", $command))
END_SUB
 
 
wait(2)
MOVE(107,131)
 
waitms(500)
action(1) // Клик ЛКМ
 
wait(1)
action(87) //Пишет w
 
wait(1)
action(2) // Клик ПКМ
 
halt
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 09:29:29 PM
Осталось наладить перемещение мыши. Я представляю логику так, в кликере определяем текущие координаты мыши, запомнили, потом определяем координаты, куда надо перейти, вычисляем числа х у отправляем в ардуино в переменные х у и там уже происходит перемещение. но к сожалению я сам это не смог сделать, и пока не представляю как это можно сделать.
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 10:15:42 PM
вобщем смотри, есть подпрограмма:
Code: (clickermann) [Select]
SUB(Mouse_move, $x_cor, $y_cor)
SUB(Mouse_move, $x_cor, $y_cor)
   WHILE(($x_cor ! $_xmouse)&($y_cor ! $_ymouse))

      $x_dist = $x_cor - $_xmouse           // определяем расстояние до нуженой точки
      $y_dist = $y_cor - $_ymouse
 
      IF((-128 < $x_dist)&($x_dist < 127))   //проверяем, чтоб не заходило значение за пределы char
         IF($x_dist < 0)
            $x_dist = 127 - $x_dist     //переделываем в беззнаковый unsigned char
         END_IF
      END_IF
 
      IF((-128 < $y_dist)&($y_dist < 127))
         IF($y_dist < 0)
            $y_dist = 127 - $y_dist
         END_IF
      END_IF
 
      print(536870912 + $x_dist*256 + $y_dist) //смотрим какой параметр отсылается в микросхему
     
      action(536870912 + $x_dist*256 + $y_dist) //в ардуино выйдет вторая функция и нужные сдвиги одним параметром

      waitms(3000)
   END_CYC
END_SUB

//вызыаем ее
Mouse_move(100,100) //хотим переместить в точку 100,100


//изначально перемещу специально курсор в координаты 0,0

halt
//изначально перемещу специально курсор в координаты 0,0 вызываю Mouse_move(100,100)

Там где print(536870912 + $x_dist*256 + $y_dist) смотрю число, отправляемое в ммикросхему, оно у меня показало 536896612

Что происходит с этим числом в программе ардуино:

делим его на 268435456 и отбрасываем дробную часть kmfunct =  int(val/268435456). Получаем   536896612/268435456 = 2,00009573996067 число 2 , - это вторая функция в свитче - case 2: //  Mouse.move()

далее в этом кейсе извлекаем из общего параметра наши координаты x_cor = int((val - kmfunct*268435456)/256); это (536896612-2*268435456)/256 = 100,390625 - целая часть = 100 - это смещение по оси Х, все верно

далее проверяем это число, чтоб оно было не больше 127     if (x_cor > 127).... оно не больше, значит первый параметр остается равным 100, все верно, этот параметр и отсылаем в Mouse.move()

Далее расчет координаты У.    y_cor = int(val - x_cor*256 - kmfunct*268435456);  536896612-100*256-2*268435456 = 536896612-25600-536870912= 100 , все верно, от нуля до 100 нам нужно сместить на 100 пикселей по У, также проверяем чтоб небыло число больше 127, так оно и есть, это второй параметр Mouse.move()

Получаем Mouse.move(100, 100, 0) , тоесть смещаем на 100 пикс вправо и на 100 пикс вниз

Для чего там проверка на if (x_cor > 127), потому, что если бы было больше, то знак параметра сменился бы на отрицательный

Пример с отрицательными параметрами, покажу только на Х. Допустим курсор стоит в координате 100,100 , нужно сместить в 0,0

вызываем  Mouse_move(0,0) в км и держим курсор в координате 100,100

print(536870912 + $x_dist*256 + $y_dist)  выдает число 536929251

Контроллер ардуино высчитывает номер функции kmfunct =  int(val/268435456) ;  536929251/268435456 = 2,000217329710722 , целая часть = 2, это вторая функция в свитче Mouse.move()

опять высчитываем x_cor = int((val - kmfunct*268435456)/256);    (536929251-2*268435456)/256 = 58339/256 = 227,88671875 целая часть 227

проверяем на if (x_cor > 127), 227 больше 127, значит пересчитываем x_cor = 127 - x_cor; 127-227 = -100 , все совпадает, нам нужно сместить курсор на 100 пикселей влево, это первый параметр для Mouse.move()

Почти тоже самое высчитывается для координаты У, и тоже получаем -100

Вызываем функцию с параметрами Mouse.move(-100, -100, 0), тоесть смещаем курсор влево на 100 пикс, и вверх на 100 пикс.

Вот так это работает, я ошибки не вижу!!!

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




Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 10:27:55 PM
Я понимаю, что по цифрам все норм, но мне кажется это все слишком сложно реализовано, я просто не разбираюсь в коде, поэтому мне сложно реализовать, все мысли, вот одна из них. Если есть возможность, просто передать 2 числа из переменных $xcor и $ycor в плату и без всяких расчетов просто использовать их, но числа будут как положительные так и отрицательные, вот пример
Code: (clickermann) [Select]
SUB(Mouse_click, $button)   // button = 1 это левая кнопка, 2 -  правая, 3 - средняя
   action(268435456 + $button) //в ардуино выйдет первая функция и нужный из трех параметров
END_SUB

SUB(move)
   $xcor = $_return1 - $_xmouse
   $ycor = $_return2 - $_ymouse
   LOGWRITE ($xcor," x ",$ycor)
   // Тут надо отправить на плату, растояние, которое должен, пройти курсор
END_SUB

GETSCREEN
IF_PIXEL_IN(100,70,100,70, 1691714)
   move()
   Mouse_click(1)
   WAITMS(100)
END_IF
halt
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 10:41:23 PM
в том то и дело, что твои две координаты размером по 1байту передаются одним параметром в 2байта. В вин10 открой калькулятор, выбери программист.

(https://i.imgur.com/J5dHhum.png)

int(774/256) = 3   - один параметр
774 - int(774/256)*256 = 6   - второй параметр
Title: Re: Изменить способ обращения
Post by: Ramzesia on November 30, 2019, 10:44:11 PM
Извини но я не совсем понимаю про что ты говоришь, ты хочешь сказать что это не возможно? А если коры отправить, не числом а строкой?
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 10:46:55 PM
Извини но я не совсем понимаю про что ты говоришь, ты хочешь сказать что это не возможно? А если коры отправить, не числом а строкой?

Пожалуйста, отправляй, только придется потом делить строку на два числа, в си это не так просто, хотя можешь разобраться если есть желание, мне проще с числами  ;).
Title: Re: Изменить способ обращения
Post by: dramster on November 30, 2019, 10:49:07 PM
Извини но я не совсем понимаю про что ты говоришь, ты хочешь сказать что это не возможно? А если коры отправить, не числом а строкой?

Пожалуйста, отправляй, только придется потом делить строку на два числа, в си это не так просто, хотя можешь разобраться если есть желание, мне проще с числами  ;).

И нужно учитавать, что параметры в Mouse.move() ограничены именно по одному байту signed char, это от -128 до 127
Title: Re: Изменить способ обращения
Post by: dramster on December 01, 2019, 07:00:29 PM
Да, с перемещением курсора оказалось сложновато, там перемещение идет как в процедуре mover. Да и были проблемы со скоростью движения мыши, и сейчас не слишком шустро работает, но приемлимо. Если кто-нибудь разберется с отправкой сообщений в порт через DLL, будет работать мгновенно.

Дописал все мышкины процедуры. Скетч для ардуино:
Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
unsigned long par = 0;
String instring = "";
int kmfunct = 0;
int x_cor = 0;
int y_cor = 0;
int mult = 0;
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
  while (Serial.available() > 0) {
    int inchar = Serial.read();
    if (isDigit(inchar)) {
      instring += (char)inchar;
    }
    if (inchar == '\n') {
    par = instring.toInt();
    instring = "";
    }
  } 

    if (par > 0) {
     
     kmfunct =  par/16777216 ;
     switch (kmfunct) {

     case 1:  //Mouse.click
      Mouse.click(par - kmfunct*16777216);
      break;   
     case 2:  //  Mouse.move
      x_cor = (par - kmfunct*16777216)/256;
      y_cor = par - x_cor*256 - kmfunct*16777216;
      if (x_cor > 127) x_cor = 127 - x_cor;
      if (y_cor > 127) y_cor = 127 - y_cor;
      Mouse.move(x_cor, y_cor, 0);
      break;
     case 3: //Mouse.press
      Mouse.press(par - kmfunct*16777216);
      break;
     case 4: //Mouse.release
      Mouse.release(par - kmfunct*16777216);
      break;
     case 5:  //Mouse.dblclick
      Mouse.click(par - kmfunct*16777216);
      delay(50);
      Mouse.click(par - kmfunct*16777216);
      break;
     case 6: //wheel.down.up
      mult = par - kmfunct*16777216;
      if (mult > 127) mult = 127 - mult;
      Mouse.move(0, 0, mult);
     }
    }
   
    par = 0;

}

Библиотека для кликермана, сверху все процедуры, незабывать про номер порта:
Code: (clickermann) [Select]
//#name "Arduino_mouse"

$comport = 5  //незабываем нужный порт прописывать
////////////////////////////////////////////////

// Все процедуры с мышью  через ардуино

//micro_move ($x_cor, $y_cor)
//micro_lclick ($x_cor, $y_cor)
//micro_rclick ($x_cor, $y_cor)
//micro_mclick ($x_cor, $y_cor)
//micro_ldown ($x_cor, $y_cor)
//micro_rdown ($x_cor, $y_cor)
//micro_mdown ($x_cor, $y_cor)
//micro_lup ($x_cor, $y_cor)
//micro_rup ($x_cor, $y_cor)
//micro_mup ($x_cor, $y_cor)
//micro_dblclick ($x_cor, $y_cor)
//micro_wheeldown ($mult)
//micro_wheelup ($mult) 



//move
SUB(micro_move, $x_cor, $y_cor)
   
   WHILE(DIST($x_cor, $y_cor, $_xmouse, $_ymouse) > 3)
     
      $x_temp = $_xmouse
      $y_temp = $_ymouse
     
      $x_dist = $x_cor - $_xmouse
      $y_dist = $y_cor - $_ymouse
     
      IF($x_dist < 0)
         $x_dist = 127 + int(SQRT(abs($x_dist*4)))
      else
         $x_dist =  int(SQRT(abs($x_dist*4)))
      END_IF
      IF($y_dist < 0)
         $y_dist = 127 + int(SQRT(abs($y_dist*4)))
      else
         $y_dist =  int(SQRT(abs($y_dist*4)))
      END_IF

      EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 33554432 + $x_dist*256 + $y_dist))
     
      WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
         waitms(50)
      END_CYC
     
   END_CYC
END_SUB

//lclick
SUB(micro_lclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 16777217))
END_SUB

//rclick
SUB(micro_rclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 16777218))
END_SUB

//mclick
SUB(micro_mclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 16777219))
END_SUB

//ldown
SUB(micro_ldown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 50331649))
END_SUB

//rdown
SUB(micro_rdown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 50331650))
END_SUB

//mdown
SUB(micro_mdown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 50331651))
END_SUB

//lup
SUB(micro_lup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 67108865))
END_SUB

//rup
SUB(micro_rup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 67108866))
END_SUB

//mup
SUB(micro_mup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 67108867))
END_SUB

//dblclick
SUB(micro_dblclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 83886081))
END_SUB

//wheeldown
SUB(micro_wheeldown, $mult)   
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 100663423 + $mult))
END_SUB

//wheelup
SUB(micro_wheelup, $mult)   
   EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 100663296 + $mult))
END_SUB

Все не тестировал, если что не работает, пиши.




Ах да, в файле shfile.bat , его в отдельную папку.
Code: (clickermann) [Select]
@echo off
Mode com%1 baud=9600 parity=n data=8 stop=1
echo %2 > com%1

На этот файл делаем ярлык, в свойствах "свернуто в значек", убираем расширение - "shfile",  кидаем в папку со скриптом. Vint, спасибо за идею.




Добавлено:

Добавил кручение колеса мыши wheel.down.up . Немного оптимизировал код.
Title: Re: Изменить способ обращения
Post by: Ramzesia on December 02, 2019, 01:12:02 PM
Спасибо тебе добрый человек за проделаный труд, пока нет возможности протестить это чудо, приду с работы проверю, а можно ещё прикрутить клавишу? Что бы правильно все вышло а я уже допишу остальные просто покажи куда.
Title: Re: Изменить способ обращения
Post by: dramster on December 08, 2019, 11:33:50 PM
Переписал пакетный файл так, чтобы он постоянно мониторил текстовый файл, в  который мы посылаем сообщения. Это ускорило перемещение курсора, теперь move работает быстро и  даже довольно реалистично.
Файл "shfile.bat" должен быть в одной папке со скриптом. Его содержимое:
Code: (text) [Select]
@echo off

Mode com5 baud=9600 parity=n data=8 stop=1

<nul set /p "=0">file.txt

:while
set /p param=< file.txt
if %param%==0 (goto while) else (goto next)
:next
<nul set /p "=0">file.txt
echo %param%> com5
goto while

В этом же файле прописываем свой номер ком порта в место com5, В ДВУХ МЕСТАХ!!!

Перед запуском основного скрипта кликермана, нужно запустить этот файл!!!



Дописал клавиатурные действия, кроме кейстринга. Но контроллер почему то правильно работает не с кодом клавиши клавиатуры, а его библиотека написана на прием ASCI символов (кодов символов). То есть, к примеру, micro_keydown(#A) - код кнопки = 65, а в ASCI таблице это заглавная буква "A", поэтому ардуина жмет левый шифт и кнопу "A". Чтобы нажалась именно кнопка "A" без шифта, нужно глянуть в таблицу ASCI - а там мелкая буква "a" имеет код 97. Поэтому, чтобы нажатия работали правильно, нужно писать micro_keydown("a"), это и будет нажатие кнопки "a" без шифта.

Код скетча для контроллера ардуино:
Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
unsigned long par = 0;
String instring = "";
int kmfunct = 0;
int x_cor = 0;
int y_cor = 0;
int mult = 0;
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
}
 
void loop() {
  while (Serial.available() > 0) {
    int inchar = Serial.read();
    if (isDigit(inchar)) {
      instring += (char)inchar;
    }
    if (inchar == '\n') {
    par = instring.toInt();
    instring = "";
    }
  } 
 
    if (par > 0) {
 
     kmfunct =  par/16777216 ;
     switch (kmfunct) {
 
     case 1:  //Mouse.click
      Mouse.click(par - kmfunct*16777216);
      break;   
     case 2:  //  Mouse.move
      x_cor = (par - kmfunct*16777216)/256;
      y_cor = par - x_cor*256 - kmfunct*16777216;
      if (x_cor > 127) x_cor = 127 - x_cor;
      if (y_cor > 127) y_cor = 127 - y_cor;
      Mouse.move(x_cor, y_cor, 0);
      break;
     case 3: //Mouse.press
      Mouse.press(par - kmfunct*16777216);
      break;
     case 4: //Mouse.release
      Mouse.release(par - kmfunct*16777216);
      break;
     case 5:  //Mouse.dblclick
      Mouse.click(par - kmfunct*16777216);
      delay(50);
      Mouse.click(par - kmfunct*16777216);
      break;
     case 6: //wheel.down.up
      mult = par - kmfunct*16777216;
      if (mult > 127) mult = 127 - mult;
      Mouse.move(0, 0, mult);
     case 7: // Keyboard.keydown
      Keyboard.press(par - kmfunct*16777216);
      break;
     case 8: // Keyboard.keyup
      Keyboard.release(par - kmfunct*16777216);
      break;
     case 9: // Keyboard.keypress
      Keyboard.write(par - kmfunct*16777216);
      break;
     }
    }
 
    par = 0;
 
}


Код кликермана с подпрограммами всех действий:
Code: (clickermann) [Select]
//#name "Arduino_mouse&keyboard"

////////////////////////////////////////////////

// Все процедуры с мышью и клавиатурой через ардуино

//micro_move ($x_cor, $y_cor)
//micro_lclick ($x_cor, $y_cor)
//micro_rclick ($x_cor, $y_cor)
//micro_mclick ($x_cor, $y_cor)
//micro_ldown ($x_cor, $y_cor)
//micro_rdown ($x_cor, $y_cor)
//micro_mdown ($x_cor, $y_cor)
//micro_lup ($x_cor, $y_cor)
//micro_rup ($x_cor, $y_cor)
//micro_mup ($x_cor, $y_cor)
//micro_dblclick ($x_cor, $y_cor)
//micro_wheeldown ($mult)
//micro_wheelup ($mult)

// вместо $char_ASCI писать не код клавиши, а символ ASCI.
// в ардуино как-то тупо сделали клавиатурные нажатия :/
//micro_keydown ($char_ASCI)
//micro_keyup ($char_ASCI)
//micro_keypress ($char_ASCI)



//move
SUB(micro_move, $x_cor, $y_cor)
   
   WHILE(DIST($x_cor, $y_cor, $_xmouse, $_ymouse) > 3)
     
      $x_temp = $_xmouse
      $y_temp = $_ymouse
     
      $x_dist = $x_cor - $_xmouse
      $y_dist = $y_cor - $_ymouse
     
      IF($x_dist < 0)
         $x_dist = 127 + int(SQRT(abs($x_dist*4)))
      else
         $x_dist =  int(SQRT(abs($x_dist*4)))
      END_IF
      IF($y_dist < 0)
         $y_dist = 127 + int(SQRT(abs($y_dist*4)))
      else
         $y_dist =  int(SQRT(abs($y_dist*4)))
      END_IF
     
      TFWRITE("file.txt", 33554432 + $x_dist*256 + $y_dist, 1)
     
      WHILE(TFREAD("file.txt", 1)!0)
         waitms(50)
      END_CYC
     
   END_CYC
END_SUB


//lclick
SUB(micro_lclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 16777217, 1)
END_SUB

//rclick
SUB(micro_rclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 16777218, 1)
END_SUB

//mclick
SUB(micro_mclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 16777219, 1)
END_SUB

//ldown
SUB(micro_ldown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 50331649, 1)
END_SUB

//rdown
SUB(micro_rdown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 50331650, 1)
END_SUB

//mdown
SUB(micro_mdown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 50331651, 1)
END_SUB

//lup
SUB(micro_lup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 67108865, 1)
END_SUB

//rup
SUB(micro_rup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 67108866, 1)
END_SUB

//mup
SUB(micro_mup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 67108867, 1)
END_SUB

//dblclick
SUB(micro_dblclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   TFWRITE("file.txt", 83886081, 1)
END_SUB

//wheeldown
SUB(micro_wheeldown, $mult)
   TFWRITE("file.txt", 100663423 + $mult, 1)
END_SUB

//wheelup
SUB(micro_wheelup, $mult)
   TFWRITE("file.txt", 100663296 + $mult, 1)
END_SUB

//keydown
SUB(micro_keydown, $char_ASCI)
   TFWRITE("file.txt", 117440512 + code($char_ASCI), 1)
END_SUB

//keyup
SUB(micro_keyup, $char_ASCI)
   TFWRITE("file.txt", 134217728 + code($char_ASCI), 1)
END_SUB

//keypress
SUB(micro_keypress, $char_ASCI)
   TFWRITE("file.txt", 150994944 + code($char_ASCI), 1)
END_SUB
Title: Re: Изменить способ обращения
Post by: Ramzesia on May 25, 2020, 07:14:29 PM
Привет, долго меня не было, реал затянул. Вот нашлось время и эта прекрасная тема опять понадобилась. Все установил все поставил, но столкнулся с парой проблем, скорость передвижения все таки медленная, остсюда вопрос можно ли без передвижения? Тупо мгновенно клик в заданные координаты? И вторая проблема почему то буквы у меня не печатает( с мышкой все нормально а с буквами беда может что то не правильно делаю?
Code: (clickermann) [Select]
micro_keypress ("a")
Title: Re: Изменить способ обращения
Post by: JacsoN on February 17, 2021, 09:23:18 PM
Ребята  предлогаю  поднять тему  и   продолжить  работу  приобрел  ардуино все  перепробывал   все то что с  8  страниц етой темы
Code: (clickermann) [Select]
#include "Mouse.h"
 
void setup() {
  Mouse.begin();
}
 
void loop() {

Mouse.click(MOUSE_LEFT);
delay(1000);
}
от что  у меня  получилось  стряпать защиту  пробивает на  ура ))))  но нужно сидеть слидить   плюс  ето  без  кликермана  а  хочу  теперь  както ето автоматизировать
Title: Re: Изменить способ обращения
Post by: dramster on February 17, 2021, 10:52:59 PM
Предлагаю продолжить тут http://crapware.aidf.org/forum/index.php?topic=5529.0 , а эту тему закрыть. Тут из восьми страниц только пару постов по делу, остальное ни о чем.

Сейчас я там постараюсь поподробнее описать работу, и с чего вообще начинать.