Автор: dramster
http://crapware.aidf.org/forum/index.php?topic=5529.0
Не прошло и года, как у меня все-же получилось написать длл для общения с ком
портом, а именно с ардуиномикро. По сравнению с командной строкой, работает
шустро и незаметно.
При написании никаких дополнительных компонентов для работы с ком не
использовал. С ними оказалось намного все сложнее.
Вобщем, пару вечеров, куча статей и форумов, вот первый, и вполне рабочий вариант.
Кто в теме, или вдруг загорится этой темой, код длл делфи10:
Код: Delphi
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 orPURGE_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)
Нам же, для управления микрой, нужны только числа. Скетч для контроллера взял старый отсюда https://vintets.ru/cm_arduino_1. Немного доработал его:
Код: sketch Arduino
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_mouse_keyboard_4.13.cms (4.68 КБ)
Arduino_mouse_keyboard_4.14.cms (3.36 КБ)
Код: 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
Даже и не уверен, придумают ли защиту от такого аппаратного управления машиной .
Подключайтесь, проверяйте. Я проверил и использовал лишь в одной защищенной древнючей игре MTA_SA. Не смотря на ее древнючесть, они уже давно впилили защиту от кликеров. Сам контроллер не сильно и дорогой, глянул - от 350р. Я вроде еще за 280 когда-то купил.
Скачать dll для х32 систем: micro_com.dll (133 КБ)
А теперь поподробнее, с чего начинать, что купить, как прошить, как запустить...
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. Все, можно загружать скетч. Берем тот что я написал, либо пишите свой. Мой:
Код скетча:
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"
Все процедуры, которые я пока написал:
Код: 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!!!
Вот библиотека для всех версий (кроме х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:49
30. #define key_1:50
31. #define key_2:51
32. #define key_3:52
33. #define key_4:53
34. #define key_5:54
35. #define key_6:55
36. #define key_7:56
37. #define key_8:57
38. #define key_9:58
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_keypr...
Добавленные клавиши:
Код: 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
Вот такой прикольный корпус есть для ардуинки