Author Topic: Изменить способ обращения  (Read 28873 times)

0 Members and 1 Guest are viewing this topic.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #30 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; писать? это оптимизирует-ускорит работу, или это не существенно?
« Last Edit: November 29, 2019, 01:25:37 AM by dramster »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #31 on: November 29, 2019, 12:43:43 AM »
  В идеале вся эта работа по сообщению с платой должна проходить с помощью длл с автоматическим определением ком порта, и без сяких там командных строк и черных окон. Но это нужно читать, вникать как работает связь с последовательными портами. Если будет нужда и желание, можно будет написать универсальную длл для работы кликермана с ардуино, тоесть все мышкины и клавиатурные действия. Пока такой нужды нет :( .

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #32 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) //перемещаем курсор в нужное место
 
« Last Edit: November 29, 2019, 09:42:56 AM by Ramzesia »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #33 on: November 29, 2019, 02:11:16 PM »
Как я и говорил, кликерман перестает работать после того как окно игры становится активным. тоесть если к примеру прописать перейти в координаты 100 100 и клинуть потом найти пиксель в 200 200 и кликнуть отработается только первое действие и все дальше ниче не работает.  Но если после первой команды перевести фокус на любое другое окно опять срабатывает одна команда и все. Что мне далать дайте дельный совет ... Тупая старая игра и так сложно обойти защиту( Как отключить или обойти защиту Gameguard?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Изменить способ обращения
« Reply #34 on: November 29, 2019, 02:56:14 PM »
Как у вас интересно. Мне тоже ардуинка приехала неделю назад. Ещё не распаковывал, всё времени нет  :(

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


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Изменить способ обращения
« Reply #35 on: November 29, 2019, 03:08:00 PM »
А ты менял "Используемый GUI идентификатор программы"
в data/config.ini
program_name = ...

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

Посмотри на своё приложение, какой у него приоритет. Может у него задран приоритет и он почти не отдаёт время другим приложениям (кроме системных). Понизь до нормального.
« Last Edit: November 29, 2019, 03:09:42 PM by Vint »


Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #36 on: November 29, 2019, 03:53:09 PM »
А ты менял "Используемый GUI идентификатор программы"
в data/config.ini
program_name = ...
Да


Вот что показывает когда навожу на окно игры


Вот это запускаю на ноуте с ps2 мышь/клава, не работает
« Last Edit: November 29, 2019, 04:23:16 PM by Ramzesia »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #37 on: November 29, 2019, 04:21:19 PM »
И почему бы не развить эту тему? У пилота есть своя длл под ардуино, почему бы и кликмана не собрать свою? Просьба гуру форума помочь в этом  ;)
Еще такой вопрос а нельзя ли полность написать скрипв в плату? Или он тупо не поместится? Я заметил что мы записали пару строк и мапять заполнилась на 18%
« Last Edit: November 29, 2019, 04:25:15 PM by Ramzesia »

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Re: Изменить способ обращения
« Reply #38 on: November 29, 2019, 05:40:59 PM »
Как у вас интересно. Мне тоже ардуинка приехала неделю назад. Ещё не распаковывал, всё времени нет  :(

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

А зачем маленькому приложению защита от POSTMESSAGE? Бери что нибудь многопользовательское.
Ту же rzonline.ru. Что бы Ramzesia не один мучился.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #39 on: November 29, 2019, 05:47:14 PM »
Надеюсь это был не сарказм) и да было бы просто отлично, если взялись бы гуру форума за эту игрулю) если кто выложит рабочий настраиваемый скрип, на фарм данджа и в поле, я даже готов отблагодарить в рублях) можно даже вариант с обходом защитой, что бы я мог свободно использовать кликмана без всяких приблуд.

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Re: Изменить способ обращения
« Reply #40 on: November 29, 2019, 07:46:56 PM »
Посмотрел игрушку - не зацепило. Я на другой сижу. Ковырять защиту без азарта, скучно.
А Винту все равно на чем тренироваться. Может чего полезного придумает.
« Last Edit: November 29, 2019, 07:50:50 PM by ya12 »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #41 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 это шаг хода курсора   ???  А возможно мануал врет? и можно перемещать курсор на большие расстояния?

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


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #42 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

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Изменить способ обращения
« Reply #43 on: November 29, 2019, 09:27:00 PM »
Еще такой вопрос а нельзя ли полность написать скрипв в плату? Или он тупо не поместится? Я заметил что мы записали пару строк и мапять заполнилась на 18%
Память микры 32кб - это 32 тысячи символов (там еще загрузчик чтото забирает вроде 4кб) . Вот твои 18% и есть скорее всего загрузчик, плюс две библиотеки тоже место занимают.

К стати у микрухи есть еще 1 кб памяти (EEPROM), которую мы можем читать и писать прямо во время работы платы, без участия ide . К примеру сохранять какието параметры, которые не пропадут при следующем включении. Но для нас эта память врядли пригодится. ... Применимо для смены каких то параметров, которые нужно сменить, но не охота перепрошивать полностью скетч, либо для сохранения подобия лога (на 1кб сильно не разгуляешься  :D).

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Изменить способ обращения
« Reply #44 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
« Last Edit: November 30, 2019, 04:00:27 AM by Ramzesia »