Автор Тема: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!  (Прочитано 2122 раз)

0 Пользователей и 1 Гость просматривают эту тему.

dramster

  • Герой форума
  • *****
  • Сообщений: 1104
    • Просмотр профиля
Не прошло и года, как у меня все-же получилось написать длл для общения с ком портом, а именно с ардуиномикро. По сравнению с командной строкой, работает шустро и незаметно.
При написании никаких дополнительных компонентов для работы с ком не использовал. С ними оказалось намного все сложнее.
Вобщем, пару вечеров, куча статей и форумов, вот первый, и вполне рабочий вариант.
Кто в теме, или вдруг загорится этой темой, код длл делфи10:
Код: Clickermann
  1. library micro_com;
  2.  
  3. uses    Windows, SysUtils;
  4.  
  5. //------------------------------------------------------------------------------
  6. // Основное тело функции, идет на экспорт, вызывается из кликера
  7. function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
  8.  
  9.  
  10. type
  11.  pIntArr = array[0..0] of Integer;
  12. var
  13. DCB   : TDCB;
  14. hPort : THandle;
  15. port_num : integer;
  16. param : integer;
  17. byete_res: Cardinal;
  18. str : string;
  19. len : integer;
  20. begin
  21.   port_num := pIntArr(_mas^)[0];
  22.   param := pIntArr(_mas^)[_size-1];
  23.  
  24.  // 1. Открываем файл
  25.  hPort := CreateFile(PChar('COM'+IntToStr(port_num)), GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  26.  // 2. Контроль ошибок
  27.  if hPort = INVALID_HANDLE_VALUE then begin
  28.   // Обнаружена ошибка, порт открыть не удалось
  29.   result := 1;
  30.   exit;
  31.  end;
  32.  
  33.  // 3. Чтение текущих настроек порта
  34. if GetCommState(hPort, DCB) then ;
  35.  // 4. Настройки:
  36.  // Скорость обмена
  37. DCB.BaudRate := 9600;
  38.  // Число бит на символ
  39. DCB.ByteSize := 8;
  40.  // Стоп-биты
  41. DCB.StopBits := 1;
  42.  // Четность
  43. DCB.Parity   := 0;
  44.  // Какая-то херь непонятная
  45. DCB.Flags := 20625;
  46.  // 5. Передача настроек
  47. if not SetCommState(hPort, DCB) then begin{ошибка настройки порта}
  48.   result := 2;
  49.   exit;
  50. end;
  51.  // 6. Настройка буферов порта (очередей ввода и вывода)
  52. if not SetupComm(hPort, 16, 16) then begin{ошибка настройки буферов}
  53.   result := 3;
  54.   exit;
  55. end;
  56.  // 7. Сброс буферов и очередей
  57. if PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR) then
  58. // 8. Запись в порт
  59. str := intToStr(param);
  60. len := Length(str);
  61. WriteFile(hPort, PChar(str)^, len*2, byete_res, nil);
  62.  // 9. Закрытие порта
  63. CloseHandle(hPort);
  64. result := 5;
  65. end;
  66.  
  67. //------------------------------------------------------------------------------
  68.  
  69. // список экспорта
  70. exports execute;
  71.  
  72. begin
  73.  
  74. end.

Скомпилированная библиотека уверенно отправляет в нужный порт любой текст. Примерно так:
Код: Clickermann
  1. CALL ("micro_com.dll", $com, $val)

Нам же, для управления микрой, нужны только числа. Скетч для контроллера взял старый отсюда http://crapware.aidf.org/forum/index.php?topic=5215.msg34294#msg34294 . Немного доработал его:
Код: Clickermann
  1. #include <Mouse.h>
  2. #include <Keyboard.h>
  3.  
  4. unsigned long par = 0;
  5. String instring = "";
  6. int kmfunct = 0;
  7. int x_cor = 0;
  8. int y_cor = 0;
  9. int mult = 0;
  10. int inchar = 0;
  11.  
  12. void setup() {
  13.  Serial.begin(9600);
  14.  Mouse.begin();
  15.  Keyboard.begin();
  16.  
  17. }
  18.  
  19. void loop() {
  20.  
  21.  
  22. while(Serial.available() > 0){  
  23. inchar = Serial.read();
  24. if (isDigit(inchar)) {
  25.   instring += (char)inchar;      
  26.    }  
  27. }    
  28.  par = instring.toInt();
  29.  instring = "";
  30.  
  31.  
  32.    if (par > 0) {
  33.  
  34.     kmfunct =  par/16777216 ;
  35.     switch (kmfunct) {
  36.  
  37.     case 1:  //Mouse.click
  38.      Mouse.click(par - kmfunct*16777216);
  39.      break;    
  40.     case 2:  //  Mouse.move
  41.      x_cor = (par - kmfunct*16777216)/256;
  42.      y_cor = par - x_cor*256 - kmfunct*16777216;
  43.      if (x_cor > 127) x_cor = 127 - x_cor;
  44.      if (y_cor > 127) y_cor = 127 - y_cor;
  45.      Mouse.move(x_cor, y_cor, 0);
  46.      break;
  47.     case 3: //Mouse.press
  48.      Mouse.press(par - kmfunct*16777216);
  49.      break;
  50.     case 4: //Mouse.release
  51.      Mouse.release(par - kmfunct*16777216);
  52.      break;
  53.     case 5:  //Mouse.dblclick
  54.      Mouse.click(par - kmfunct*16777216);
  55.      delay(50);
  56.      Mouse.click(par - kmfunct*16777216);
  57.      break;
  58.     case 6: //wheel.down.up
  59.      mult = par - kmfunct*16777216;
  60.      if (mult > 127) mult = 127 - mult;
  61.      Mouse.move(0, 0, mult);
  62.     case 7: // Keyboard.keydown
  63.      Keyboard.press(par - kmfunct*16777216);
  64.      break;
  65.     case 8: // Keyboard.keyup
  66.      Keyboard.release(par - kmfunct*16777216);
  67.      break;
  68.     case 9: // Keyboard.keypress
  69.      Keyboard.write(par - kmfunct*16777216);
  70.      break;
  71.     }
  72.    }
  73.    par = 0;
  74.  
  75. }


Библиотека с подпрограммами для кликермана тут:
Код: Clickermann
  1. $com = 5   //свой порт
  2.  
  3. //#name "Arduino_mouse&keyboard"
  4.  
  5. ////////////////////////////////////////////////
  6.  
  7. // Все процедуры с мышью и клавиатурой через ардуино
  8.  
  9. //micro_move ($x_cor, $y_cor)
  10. //micro_lclick ($x_cor, $y_cor)
  11. //micro_rclick ($x_cor, $y_cor)
  12. //micro_mclick ($x_cor, $y_cor)
  13. //micro_ldown ($x_cor, $y_cor)
  14. //micro_rdown ($x_cor, $y_cor)
  15. //micro_mdown ($x_cor, $y_cor)
  16. //micro_lup ($x_cor, $y_cor)
  17. //micro_rup ($x_cor, $y_cor)
  18. //micro_mup ($x_cor, $y_cor)
  19. //micro_dblclick ($x_cor, $y_cor)
  20. //micro_wheeldown ($mult)
  21. //micro_wheelup ($mult)
  22.  
  23. // вместо $char_ASCII писать не код клавиши, а символ ASCII.
  24. // в ардуино как-то тупо сделали клавиатурные нажатия :/
  25. //micro_keydown ($char_ASCII)
  26. //micro_keyup ($char_ASCII)
  27. //micro_keypress ($char_ASCII)
  28.  
  29.  
  30.  
  31. //move
  32. SUB(micro_move, $x_cor, $y_cor)
  33.  
  34.   WHILE(DIST($x_cor, $y_cor, $_xmouse, $_ymouse) > 3)
  35.  
  36.      $x_temp = $_xmouse
  37.      $y_temp = $_ymouse
  38.  
  39.      $x_dist = $x_cor - $_xmouse
  40.      $y_dist = $y_cor - $_ymouse
  41.  
  42.      IF($x_dist < 0)
  43.         $x_dist = 127 + int(SQRT(abs($x_dist*4)))
  44.      else
  45.         $x_dist =  int(SQRT(abs($x_dist*4)))
  46.      END_IF
  47.      IF($y_dist < 0)
  48.         $y_dist = 127 + int(SQRT(abs($y_dist*4)))
  49.      else
  50.         $y_dist =  int(SQRT(abs($y_dist*4)))
  51.      END_IF
  52.      CALL ("micro_com.dll", $com, 33554432 + $x_dist*256 + $y_dist)  
  53.  
  54.   END_CYC
  55. END_SUB
  56.  
  57. //lclick
  58. SUB(micro_lclick, $x_cor, $y_cor)
  59.   micro_move($x_cor, $y_cor)
  60.   CALL ("micro_com.dll", $com, 16777217)
  61. END_SUB
  62.  
  63. //rclick
  64. SUB(micro_rclick, $x_cor, $y_cor)
  65.   micro_move($x_cor, $y_cor)
  66.   CALL ("micro_com.dll", $com, 16777218)
  67. END_SUB
  68.  
  69. //mclick
  70. SUB(micro_mclick, $x_cor, $y_cor)
  71.   micro_move($x_cor, $y_cor)
  72.   CALL ("micro_com.dll", $com, 16777219)
  73. END_SUB
  74.  
  75. //ldown
  76. SUB(micro_ldown, $x_cor, $y_cor)
  77.   micro_move($x_cor, $y_cor)
  78.   CALL ("micro_com.dll", $com, 50331649)
  79. END_SUB
  80.  
  81. //rdown
  82. SUB(micro_rdown, $x_cor, $y_cor)
  83.   micro_move($x_cor, $y_cor)
  84.   CALL ("micro_com.dll", $com, 50331650)
  85. END_SUB
  86.  
  87. //mdown
  88. SUB(micro_mdown, $x_cor, $y_cor)
  89.   micro_move($x_cor, $y_cor)
  90.   CALL ("micro_com.dll", $com, 50331651)
  91. END_SUB
  92.  
  93. //lup
  94. SUB(micro_lup, $x_cor, $y_cor)
  95.   micro_move($x_cor, $y_cor)
  96.   CALL ("micro_com.dll", $com, 67108865)
  97. END_SUB
  98.  
  99. //rup
  100. SUB(micro_rup, $x_cor, $y_cor)
  101.   micro_move($x_cor, $y_cor)
  102.   CALL ("micro_com.dll", $com, 67108866)
  103. END_SUB
  104.  
  105. //mup
  106. SUB(micro_mup, $x_cor, $y_cor)
  107.   micro_move($x_cor, $y_cor)
  108.   CALL ("micro_com.dll", $com, 67108867)
  109. END_SUB
  110.  
  111. //dblclick
  112. SUB(micro_dblclick, $x_cor, $y_cor)
  113.   micro_move($x_cor, $y_cor)
  114.   CALL ("micro_com.dll", $com, 83886081)
  115. END_SUB
  116.  
  117. //wheeldown
  118. SUB(micro_wheeldown, $mult)
  119.   CALL ("micro_com.dll", $com, 100663423 + $mult)
  120. END_SUB
  121.  
  122. //wheelup
  123. SUB(micro_wheelup, $mult)
  124.   CALL ("micro_com.dll", $com, 100663296 + $mult)
  125. END_SUB
  126.  
  127. //keydown
  128. SUB(micro_keydown, $char_ASCII)
  129.   CALL ("micro_com.dll", $com, 117440512 + code($char_ASCII))
  130. END_SUB
  131.  
  132. //keyup
  133. SUB(micro_keyup, $char_ASCII)
  134.   CALL ("micro_com.dll", $com, 134217728 + code($char_ASCII))
  135. END_SUB
  136.  
  137. //keypress
  138. SUB(micro_keypress, $char_ASCII)
  139.   CALL ("micro_com.dll", $com, 150994944 + code($char_ASCII))
  140. END_SUB
  141.  

Даже и не уверен, придумают ли защиту от такого аппаратного управления машиной  ;).

Подключайтесь, проверяйте. Я проверил и использовал лишь в одной защищенной древнючей игре MTA_SA. Не смотря на ее древнючесть, они уже давно  впилили защиту от кликеров. Сам контроллер не сильно и дорогой, глянул - от 350р. Я вроде еще за 280 когда-то купил.

Во вложении dll для х32 систем.


dramster

  • Герой форума
  • *****
  • Сообщений: 1104
    • Просмотр профиля
А теперь поподробнее, с чего начинать, что купить, как прошить, как запустить...


 1. Нам нужен сам контроллер ардуино. Подойдут только те, которые определяются на ПК как мышь и клавиатура. Те, о которых я в курсе - Arduino Micro, Arduino Pro Micro, Arduino Leonardo.

 

2. Подключаем наш девайс к ПК в любой USB. Смотрим в диспетчер устройств. Должно появиться три новых устройства - клавиатура HID, HID совместимая мышь, устройство с последовательным интерфейсом USB (COM). Номер COM порта запоминаем.



3. Далее нужно прошить наш контроллер. Для этого нужен софт. Качаем с оффсайта ардуино последнюю версию Arduino IDE https://www.arduino.cc/en/software . Я использую портативную версию для windows - "Windows ZIP file" . Она не требует установки, просто распаковать из архива, и готово, можно пользоваться.



4. Настраиваем IDE под наш контроллер. Меню - инструменты - плата: - Arduino Micro, либо Leonardo в зависимости от того что там у вас. Меню - инструменты - порт: - выбираем порт к которому подключен контроллер.



5. Все, можно загружать скетч. Берем тот что я написал, либо пишите свой. Мой:
Код: Clickermann
  1. #include <Mouse.h>
  2. #include <Keyboard.h>
  3.  
  4. unsigned long par = 0;
  5. String instring = "";
  6. int kmfunct = 0;
  7. int x_cor = 0;
  8. int y_cor = 0;
  9. int mult = 0;
  10. int inchar = 0;
  11.  
  12. void setup() {
  13.  Serial.begin(9600);
  14.  Mouse.begin();
  15.  Keyboard.begin();
  16.  
  17. }
  18.  
  19. void loop() {
  20.  
  21.  
  22. while(Serial.available() > 0){  
  23. inchar = Serial.read();
  24. if (isDigit(inchar)) {
  25.   instring += (char)inchar;      
  26.    }  
  27. }    
  28.  par = instring.toInt();
  29.  instring = "";
  30.  
  31.  
  32.    if (par > 0) {
  33.  
  34.     kmfunct =  par/16777216 ;
  35.     switch (kmfunct) {
  36.  
  37.     case 1:  //Mouse.click
  38.      Mouse.click(par - kmfunct*16777216);
  39.      break;    
  40.     case 2:  //  Mouse.move
  41.      x_cor = (par - kmfunct*16777216)/256;
  42.      y_cor = par - x_cor*256 - kmfunct*16777216;
  43.      if (x_cor > 127) x_cor = 127 - x_cor;
  44.      if (y_cor > 127) y_cor = 127 - y_cor;
  45.      Mouse.move(x_cor, y_cor, 0);
  46.      break;
  47.     case 3: //Mouse.press
  48.      Mouse.press(par - kmfunct*16777216);
  49.      break;
  50.     case 4: //Mouse.release
  51.      Mouse.release(par - kmfunct*16777216);
  52.      break;
  53.     case 5:  //Mouse.dblclick
  54.      Mouse.click(par - kmfunct*16777216);
  55.      delay(50);
  56.      Mouse.click(par - kmfunct*16777216);
  57.      break;
  58.     case 6: //wheel.down.up
  59.      mult = par - kmfunct*16777216;
  60.      if (mult > 127) mult = 127 - mult;
  61.      Mouse.move(0, 0, mult);
  62.     case 7: // Keyboard.keydown
  63.      Keyboard.press(par - kmfunct*16777216);
  64.      break;
  65.     case 8: // Keyboard.keyup
  66.      Keyboard.release(par - kmfunct*16777216);
  67.      break;
  68.     case 9: // Keyboard.keypress
  69.      Keyboard.write(par - kmfunct*16777216);
  70.      break;
  71.     }
  72.    }
  73.    par = 0;
  74.  
  75. }

Копируете и вставляете в редактор arduino. Жмете кнопку "проверить", пойдет компиляция скетча. После завершения в логе будет что-то типа
Цитировать
Скетч использует 7426 байт (25%) памяти устройства. Всего доступно 28672 байт.
Глобальные переменные используют 265 байт (10%) динамической памяти, оставляя 2295 байт для локальных переменных. Максимум: 2560 байт.

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





 6. Контроллер готов и ждет команды из COM порта. Для отправки сообщения в наш порт я написал DLL библиотеку  "micro_com.dll". Берем во вложении первого поста, либо вот с ядиска https://disk.yandex.ru/d/YuMXDEFLhWiD6A . Качаем (либо копируем) библиотеку с процедурами мыши и клавиатуры для Clickermann "Arduino_mouse_keyboard.cms" , во вложении, либо код из поста выше, либо с ядиска https://disk.yandex.ru/d/kmqlsabjb4RJvg . Кидаем эти два файла в одну папку. Открываем "Arduino_mouse_keyboard.cms" и прописываем в переменную $com номер порта, к которому подключена ардуина.


 7. Создаем наш основной скрипт, либо редактируем уже существующий. Подключаем в него "Arduino_mouse_keyboard.cms".
Код: Clickermann
  1. #include "Arduino_mouse_keyboard.cms"

Все процедуры, которые я пока написал:
Клавиатурные действия пока будут работать только на бета версии v4.14.003 beta x32 http://crapware.aidf.org/forum/index.php?topic=356.0 . В будущем напишу чтоб работали на старших версиях.

Будущее:
Обновленная библиотека для всех версий (кроме х64) в этом посте http://crapware.aidf.org/forum/index.php?topic=5529.msg36250#msg36250 , берем оттуда и пользуемся клавиатурой полноценно!!!

Код: Text
  1. //micro_move ($x_cor, $y_cor)
  2. //micro_lclick ($x_cor, $y_cor)
  3. //micro_rclick ($x_cor, $y_cor)
  4. //micro_mclick ($x_cor, $y_cor)
  5. //micro_ldown ($x_cor, $y_cor)
  6. //micro_rdown ($x_cor, $y_cor)
  7. //micro_mdown ($x_cor, $y_cor)
  8. //micro_lup ($x_cor, $y_cor)
  9. //micro_rup ($x_cor, $y_cor)
  10. //micro_mup ($x_cor, $y_cor)
  11. //micro_dblclick ($x_cor, $y_cor)
  12. //micro_wheeldown ($mult)
  13. //micro_wheelup ($mult)
  14.  
  15. // вместо $char_ASCII писать не код клавиши, а символ ASCII.
  16. // в ардуино как-то тупо сделали клавиатурные нажатия :/
  17. // пока поддерживают только печатные символы, в будущем добавлю подпрограмму для клавиш-модификаторов.
  18. //micro_keydown ($char_ASCII)
  19. //micro_keyup ($char_ASCII)
  20. //micro_keypress ($char_ASCII)

Ну и для проверки можно подергать курсором. Пишем к примеру такой код:
Код: Clickermann
  1. #include "Arduino_mouse_keyboard.cms"
  2.  
  3. wait(2)
  4. micro_move (100, 100)
  5. wait(2)
  6. micro_move (500, 500)
  7. wait(2)
  8. micro_move (500, 100)
  9. wait(2)
  10. micro_move (100, 100)
  11. halt
Жмем "применить" и сохраняем скрипт в папку с "micro_com.dll" и "Arduino_mouse_keyboard.cms". Запускаем и смотрим как курсор двигается по прописанным координатам.


 8. Радуемся.




Если курсор не двигается, то ищем где мы накосячили. DLL может помочь в этом. Функция из библиотеки возвращает код, сообщая, на каком моменте остановилась работа по общению с COM портом. Если все в норме, функция должна возвратить "5"
Код: Clickermann
  1. #include "Arduino_mouse_keyboard.cms"
  2.  
  3. wait(2)
  4. micro_move (100, 100)
  5. print($_return1)  //должно быть "5", иначе - пишите в этой теме, и подумаем в чем ошибка.
  6. halt




Подробно о библиотеках Mouse и Keyboard для ардуино тут - https://doc.arduino.ua/ru/prog/MouseKeyboard либо на оффсайте на английском.
Коды клавиш-модификаторов тут - https://doc.arduino.ua/ru/prog/KeyboardModifiers .  Для них нужно будет писать отдельную подпрограмму, либо вызывать индивидуально.

DLL написана для х32 систем, соответственно версия кликермана должна быть х32!!!



Если у вас есть деньги на контроллер, то и пару копеек на развитие проекта не пожалейте. Вон, смотрю место на хостинге походу закончилось  :(, вложения не работают. Реквизиты тут http://crapware.aidf.org/page/clickermann .
« Последнее редактирование: Февраль 19, 2021, 12:05:57 am от dramster »

JacsoN

  • Активный участник
  • ***
  • Сообщений: 151
  • извините но мне нужны полнейшие обяснения
    • Просмотр профиля
так   пробывал  версию кликера  последнюю и  к томуже  она  х64...то уввы не  работает  потом  уже  дочитал  что только  х32.........  дополните ваш гайд  какой именно  версии у вас  кликер   чтобы  вопросов было меньше  чтобы  можно  было  повторить

скачал х32 тото я по вашим примерам не то делаю или вы чтото не договорили
 возможно система х64 не пускает  win10x64
« Последнее редактирование: Февраль 18, 2021, 09:07:40 am от JacsoN »
если  есть  возможность  объясни  по  скайпу  что  да  как

JacsoN

  • Активный участник
  • ***
  • Сообщений: 151
  • извините но мне нужны полнейшие обяснения
    • Просмотр профиля
Так   Давайте чтото  делать ....... я незнаю с чего начать в моем случает  цель научится  дружить  кликер и  ардуино  игра   пох  любая
если  есть  возможность  объясни  по  скайпу  что  да  как

dramster

  • Герой форума
  • *****
  • Сообщений: 1104
    • Просмотр профиля
По идее должно работать во всех версиях начиная с v4.0.002, там появился CALL, кроме v4.13 x64 .
Насчет клавиатурных действий я немного не уточнил, да и призабыл, что функция CODE() появилась только в версии v4.14.ххх  ::). Так-что для клавиатуры пока можно скачать бету отсюда http://crapware.aidf.org/forum/index.php?topic=356.msg2896#msg2896 . Но мышка должна работать на всех остальных версиях.
 Я даже видео записал https://www.youtube.com/watch?v=0n83fGce7nU :
1. качаю кликерман последнюю х32 версию с оффсайта
2. качаю свою длл и библиотеку с подпрограммами в одну папку
3. втыкаю прошитый контроллер и смотрю какой ком порт он использует
4. вписываю в "Arduino_mouse_keyboard.cms" номер порта и сохраняю
5. создаю и сохраняю тестовый скрипт, дописываю проверку ответа функции из длл print($_return1)
6. смотрю как двигается курсор, смотрю в логе ответ функции, он равен пяти, значит запись в ком прошла успешно

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






Готово http://crapware.aidf.org/forum/index.php?topic=5529.msg36250#msg36250 .
« Последнее редактирование: Февраль 18, 2021, 11:57:53 pm от dramster »

JacsoN

  • Активный участник
  • ***
  • Сообщений: 151
  • извините но мне нужны полнейшие обяснения
    • Просмотр профиля
я  так   предпологаю    максимально все   кто хоть  чтото  сам  может  все  на   бете и  сидят  )  забыл  в видео  запрограмировать  ардуинку ++

Так  у  меня  все  получилось  как  и у  тебя   тоесть я  пологаю  теперь  можно  пробівать делать   какогото бота....для тестов   
« Последнее редактирование: Февраль 18, 2021, 11:44:39 pm от JacsoN »
если  есть  возможность  объясни  по  скайпу  что  да  как

dramster

  • Герой форума
  • *****
  • Сообщений: 1104
    • Просмотр профиля
    Вот библиотека для всех версий (кроме х64), включая 4.13 и старше. Написал основные клавиши и клавиши модификаторы. Не достающие клавиши можете дописать сами.

Код: Clickermann
  1. $com = 5  //свой порт
  2.  
  3. //"Arduino_mouse&keyboard"  для версии 4.13 и старше.
  4.  
  5. ////////////////////////////////////////////////
  6.  
  7. // Все процедуры с мышью и клавиатурой через ардуино
  8.  
  9. //micro_move ($x_cor, $y_cor)
  10. //micro_lclick ($x_cor, $y_cor)
  11. //micro_rclick ($x_cor, $y_cor)
  12. //micro_mclick ($x_cor, $y_cor)
  13. //micro_ldown ($x_cor, $y_cor)
  14. //micro_rdown ($x_cor, $y_cor)
  15. //micro_mdown ($x_cor, $y_cor)
  16. //micro_lup ($x_cor, $y_cor)
  17. //micro_rup ($x_cor, $y_cor)
  18. //micro_mup ($x_cor, $y_cor)
  19. //micro_dblclick ($x_cor, $y_cor)
  20. //micro_wheeldown ($mult)
  21. //micro_wheelup ($mult)
  22.  
  23.  
  24. //micro_keydown (key_)
  25. //micro_keyup (key_)
  26. //micro_keypress (key_)
  27.  
  28. //коды клавиш, если чегото не хватает, дописывайте сами.
  29. #define key_0:48
  30. #define key_1:49
  31. #define key_2:50
  32. #define key_3:51
  33. #define key_4:52
  34. #define key_5:53
  35. #define key_6:54
  36. #define key_7:55
  37. #define key_8:56
  38. #define key_9:57
  39. #define key_a:97
  40. #define key_b:98
  41. #define key_c:99
  42. #define key_d:100
  43. #define key_e:101
  44. #define key_f:102
  45. #define key_g:103
  46. #define key_h:104
  47. #define key_i:105
  48. #define key_j:106
  49. #define key_k:107
  50. #define key_l:108
  51. #define key_m:109
  52. #define key_n:110
  53. #define key_o:111
  54. #define key_p:112
  55. #define key_q:113
  56. #define key_r:114
  57. #define key_s:115
  58. #define key_t:116
  59. #define key_u:117
  60. #define key_v:118
  61. #define key_w:119
  62. #define key_x:120
  63. #define key_y:121
  64. #define key_z:122
  65. #define KEY_LEFT_CTRL:128
  66. #define KEY_LEFT_SHIFT:129
  67. #define KEY_LEFT_ALT:130
  68. #define KEY_LEFT_GUI:131
  69. #define KEY_RIGHT_CTRL:132
  70. #define KEY_RIGHT_SHIFT:133
  71. #define KEY_RIGHT_ALT:134
  72. #define KEY_RIGHT_GUI:135
  73. #define KEY_UP_ARROW:218
  74. #define KEY_DOWN_ARROW:217
  75. #define KEY_LEFT_ARROW:216
  76. #define KEY_RIGHT_ARROW:215
  77. #define KEY_BACKSPACE:178
  78. #define KEY_TAB:179
  79. #define KEY_RETURN:176
  80. #define KEY_ESC:177
  81. #define KEY_INSERT:209
  82. #define KEY_DELETE:212
  83. #define KEY_PAGE_UP:211
  84. #define KEY_PAGE_DOWN:214
  85. #define KEY_HOME:210
  86. #define KEY_END:213
  87. #define KEY_CAPS_LOCK:193
  88. #define KEY_F1:194
  89. #define KEY_F2:195
  90. #define KEY_F3:196
  91. #define KEY_F4:197
  92. #define KEY_F5:198
  93. #define KEY_F6:199
  94. #define KEY_F7:200
  95. #define KEY_F8:201
  96. #define KEY_F9:202
  97. #define KEY_F10:203
  98. #define KEY_F11:204
  99. #define KEY_F12:205
  100.  
  101.  
  102. //move
  103. SUB(micro_move, $x_cor, $y_cor)
  104.  
  105.   WHILE(DIST($x_cor, $y_cor, $_xmouse, $_ymouse) > 3)
  106.  
  107.      $x_temp = $_xmouse
  108.      $y_temp = $_ymouse
  109.  
  110.      $x_dist = $x_cor - $_xmouse
  111.      $y_dist = $y_cor - $_ymouse
  112.  
  113.      IF($x_dist < 0)
  114.         $x_dist = 127 + int(SQRT(abs($x_dist*4)))
  115.      else
  116.         $x_dist =  int(SQRT(abs($x_dist*4)))
  117.      END_IF
  118.      IF($y_dist < 0)
  119.         $y_dist = 127 + int(SQRT(abs($y_dist*4)))
  120.      else
  121.         $y_dist =  int(SQRT(abs($y_dist*4)))
  122.      END_IF
  123.      CALL ("micro_com.dll", $com, 33554432 + $x_dist*256 + $y_dist)  
  124.  
  125.   END_CYC
  126. END_SUB
  127.  
  128. //lclick
  129. SUB(micro_lclick, $x_cor, $y_cor)
  130.   micro_move($x_cor, $y_cor)
  131.   CALL ("micro_com.dll", $com, 16777217)
  132. END_SUB
  133.  
  134. //rclick
  135. SUB(micro_rclick, $x_cor, $y_cor)
  136.   micro_move($x_cor, $y_cor)
  137.   CALL ("micro_com.dll", $com, 16777218)
  138. END_SUB
  139.  
  140. //mclick
  141. SUB(micro_mclick, $x_cor, $y_cor)
  142.   micro_move($x_cor, $y_cor)
  143.   CALL ("micro_com.dll", $com, 16777219)
  144. END_SUB
  145.  
  146. //ldown
  147. SUB(micro_ldown, $x_cor, $y_cor)
  148.   micro_move($x_cor, $y_cor)
  149.   CALL ("micro_com.dll", $com, 50331649)
  150. END_SUB
  151.  
  152. //rdown
  153. SUB(micro_rdown, $x_cor, $y_cor)
  154.   micro_move($x_cor, $y_cor)
  155.   CALL ("micro_com.dll", $com, 50331650)
  156. END_SUB
  157.  
  158. //mdown
  159. SUB(micro_mdown, $x_cor, $y_cor)
  160.   micro_move($x_cor, $y_cor)
  161.   CALL ("micro_com.dll", $com, 50331651)
  162. END_SUB
  163.  
  164. //lup
  165. SUB(micro_lup, $x_cor, $y_cor)
  166.   micro_move($x_cor, $y_cor)
  167.   CALL ("micro_com.dll", $com, 67108865)
  168. END_SUB
  169.  
  170. //rup
  171. SUB(micro_rup, $x_cor, $y_cor)
  172.   micro_move($x_cor, $y_cor)
  173.   CALL ("micro_com.dll", $com, 67108866)
  174. END_SUB
  175.  
  176. //mup
  177. SUB(micro_mup, $x_cor, $y_cor)
  178.   micro_move($x_cor, $y_cor)
  179.   CALL ("micro_com.dll", $com, 67108867)
  180. END_SUB
  181.  
  182. //dblclick
  183. SUB(micro_dblclick, $x_cor, $y_cor)
  184.   micro_move($x_cor, $y_cor)
  185.   CALL ("micro_com.dll", $com, 83886081)
  186. END_SUB
  187.  
  188. //wheeldown
  189. SUB(micro_wheeldown, $mult)
  190.   CALL ("micro_com.dll", $com, 100663423 + $mult)
  191. END_SUB
  192.  
  193. //wheelup
  194. SUB(micro_wheelup, $mult)
  195.   CALL ("micro_com.dll", $com, 100663296 + $mult)
  196. END_SUB
  197.  
  198. //keydown
  199. SUB(micro_keydown, $key_)
  200.   CALL ("micro_com.dll", $com, 117440512 + int($key_))
  201. END_SUB
  202.  
  203. //keyup
  204. SUB(micro_keyup, $key_)
  205.   CALL ("micro_com.dll", $com, 134217728 + int($key_))
  206. END_SUB
  207.  
  208. //keypress
  209. SUB(micro_keypress, $key_)
  210.   CALL ("micro_com.dll", $com, 150994944 + int($key_))
  211. END_SUB

Пример по использованию:
Код: Clickermann
  1. #include "Arduino_mouse_keyboard.cms"
  2.  
  3. //контроллер выделяет текст активного окна и удаляет его
  4. wait(1)
  5. micro_keydown (KEY_RIGHT_CTRL) //зажимает левый контрал
  6. micro_keydown (key_a)     //зажимает клавишу "A"
  7. waitms(100)
  8. micro_keyup (key_a)     //отпускает клавишу "A"
  9. micro_keyup (KEY_RIGHT_CTRL)  //отпускает левый контрал
  10. waitms(100)
  11. micro_keypress (KEY_BACKSPACE) //нажимает и отпускает клавишу BACKSPACE
  12. halt

Добавленные клавиши:
Код: Text
  1. key_0
  2. key_1
  3. key_2
  4. key_3
  5. key_4
  6. key_5
  7. key_6
  8. key_7
  9. key_8
  10. key_9
  11. key_a
  12. key_b
  13. key_c
  14. key_d
  15. key_e
  16. key_f
  17. key_g
  18. key_h
  19. key_i
  20. key_j
  21. key_k
  22. key_l
  23. key_m
  24. key_n
  25. key_o
  26. key_p
  27. key_q
  28. key_r
  29. key_s
  30. key_t
  31. key_u
  32. key_v
  33. key_w
  34. key_x
  35. key_y
  36. key_z
  37. KEY_LEFT_CTRL
  38. KEY_LEFT_SHIFT
  39. KEY_LEFT_ALT
  40. KEY_LEFT_GUI
  41. KEY_RIGHT_CTRL
  42. KEY_RIGHT_SHIFT
  43. KEY_RIGHT_ALT
  44. KEY_RIGHT_GUI
  45. KEY_UP_ARROW
  46. KEY_DOWN_ARROW
  47. KEY_LEFT_ARROW
  48. KEY_RIGHT_ARROW
  49. KEY_BACKSPACE
  50. KEY_TAB
  51. KEY_RETURN
  52. KEY_ESC
  53. KEY_INSERT
  54. KEY_DELETE
  55. KEY_PAGE_UP
  56. KEY_PAGE_DOWN
  57. KEY_HOME
  58. KEY_END
  59. KEY_CAPS_LOCK
  60. KEY_F1
  61. KEY_F2
  62. KEY_F3
  63. KEY_F4
  64. KEY_F5
  65. KEY_F6
  66. KEY_F7
  67. KEY_F8
  68. KEY_F9
  69. KEY_F10
  70. KEY_F11
  71. KEY_F12

Места для вложений не хватает, так-что можете качать "Arduino_mouse_keyboard.cms" на ядиске https://disk.yandex.ru/d/rSA4Qcpjy3ziEg
« Последнее редактирование: Февраль 21, 2021, 08:23:08 pm от dramster »

dramster

  • Герой форума
  • *****
  • Сообщений: 1104
    • Просмотр профиля
забыл  в видео  запрограмировать  ардуинку ++++

Как прошить ардуину я вроде как подробно описал выше, если у кого-то будут вопросы, тогда и будем разбираться  ;).

JacsoN

  • Активный участник
  • ***
  • Сообщений: 151
  • извините но мне нужны полнейшие обяснения
    • Просмотр профиля
так  прошу  сделай    дополнения  в  первом  посту  что  нужно качать !?!?  чтобы вся   основная инфа   была там  типо  Шапка  темы!!!   
если  есть  возможность  объясни  по  скайпу  что  да  как

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3756
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Всё работает, респект. Проверял просто в обычных приложениях без защит.

Код: Clickermann
  1. #define key_0:49
  2. #define key_1:50
  3. #define key_2:51
  4. #define key_3:52
  5. #define key_4:53
  6. #define key_5:54
  7. #define key_6:55
  8. #define key_7:56
  9. #define key_8:57
  10. #define key_9:58
У тебя здесь съехали коды цифр на 1. Должно быть от 48 до 57
« Последнее редактирование: Февраль 20, 2021, 03:28:24 pm от Vint »


dramster

  • Герой форума
  • *****
  • Сообщений: 1104
    • Просмотр профиля

У тебя здесь съехали коды цифр на 1. Должно быть от 48 до 57

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3756
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Пусть код передают, нефиг баловать.


kiril

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

inilim

  • Зашел в гости
  • *
  • Сообщений: 11
    • Просмотр профиля
Arduino Leonardo примерно 600р
Arduino Pro Micro примерно 700р
Arduino Micro около 3000р

Почему такой разброс?

Что лучше купить под вашу библиотеку?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3756
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Аналог Micro с али стоит 340 р.