Внимание! Горячие новости и планы проекта Usb2Kbd
    18.03.2024 В версии девайса 6.7 Usb2kbd_LAN/COM реализован метод выполнения заранее заготовленных команд с MicroSD карты через .txt
    04.02.2024 Реализован метод управления через UDP девайсом Usb2kbd_COM (без LAN модуля) при помощи udp2serial
    16.11.2023 Начал применение более современных LAN модулей для Usb2kbd_LAN на основе чипа w5500, что обеспечит лучшую стабильность связи.
    04.06.2023 Начаты разработки для применимости девайса для разблокировки PIN-кода для владельцев MacBook.
    04.06.2023 Вышло глобальное обновление прошивки и ПО Usb2kbd_LAN 6.5. Внедрён альтернативный режим работы мыши - в абсолютной системе координат. Т.е. в этом режиме можно отправлять абсолютные координаты перемещения курсора мыши, например, сразу в координаты экрана X=100 Y=100.
    04.06.2023 Зафиксирован и подтвержден мной первый в истории девайса Usb2kbd_DLL факт блокировки игровой защитой одной из MMORPG самой управляющей DLL. Напрямую команды в Usb2kbd_DLL проходят без проблем. В связи с этим рекомендуется всем, у кого наблюдается данная проблема, переходить на продукт Usb2kbd_LAN/COM с управлением через UDP или COM порт.

Usb2kbd_LAN/COM


Уважаемые друзья!

Многие из Вас пишут о том, что неплохо было бы подключить к девайсу LAN-модуль (аналог сетевой карты), чтоб получить возможность управлять девайсом через сеть. Представляю Вашему вниманию мою очередную разработку - Usb2kbd_LAN/COM.

Usb2kbd_LAN/COM

В основе этого девайса лежит знаменитая платформа Arduino Leonardoа для управления девайсом через LAN предусмотрен сетевой модуль Arduino Ethernet shield W5500, работающий по UDP-протоколу (модуль может отсоединяться).

Важно помнить, что Usb2kbd_LAN/COM управляется по сети или через собственный COM-порт, функции управления через Dll (как было в usb2kbd) в нем нет!

В версии Usb2kbd_LAN/COM 6.0 реализована возможность управлять девайсом и через COM-порт. Эта функция подойдет для случая, если у Вас нет задачи управлять дистанционным компьютером и Вы захотите управлять девайсом локально через собственный COM-порт устройства. Для активации режима COM-порта в девайсе достаточно перед включением девайса в USB замкнуть перемычкой выводы 12 и GND девайса, затем включить девайс в USB и убедиться, что у Вас в диспетчере устройств Windows появился новый COM-порт девайса (см. фото ниже).

Usb2kbd_LAN/COM

Важно! Такая возможность управления девайсом через COM-порт доступна как для пользователей Win10 и Win11 (установка дополнительных драйверов не требуется), так и для пользователей Win7 (скачать драйвер .inf с инструкцией можно здесь. После подготовки Вами и правки прилагаемого файла .inf согласно инструкции нажмите "Обновить драйвер" неизвестного устройства в диспетчере устройств Windows и выберите отрадактированный Вами .inf файл). 

При подключении в USB-порт компьютера, Usb2kbd_LAN/COM автоматически определится системой как стандартная USB-HID клавиатура и мышь (комбо-девайс. 2-в-одном), никаких дополнительных драйверов для клавиатуры и мыши устанавливать не нужно!

Принцип работы Usb2kbd_LAN/COM заключается в том, что девайс умеет принимать управляющие команды (пакеты) из LAN-сети (UDP) или же через собственный COM-порт, причём неважно, откуда пришел пакет, главное, чтобы он прошел проверку на подлинность девайсом. Далее, получив такой пакет, Usb2kbd_LAN/COM через USB-протокол нажимает клавишу клавиатуры или управляет мышью согласно пакету. Как Вы видите, теперь девайсу не нужны никакие DLL, Вам достаточно знать, как из Вашей программы, написанной на любом известном Вам языке программирования, составить и отправить простой управляющий пакет девайсу по сети (протокол UDP, локальная сеть или интернет) или через COM-порт (примеры отсылки управляющих пакетов приведены ниже в разделе примеров).

Важно помнить, что управляющий пакет для COM-порта девайса Usb2kbd_LAN/COM по структуре полностью аналогичен управляющему пакету пакету UDP, только в конце пакета обязательно должен быть добавлен специальный символ конца строки ($0A, он же LF).

Итак, для чего нужен девайс Usb2kbd_LAN/COM, в чем его главное отличие от Usb2kbd_DLL, какая основная функция, возможности, и какое применение на практике?
- Самая важная и основная функция Usb2kbd_LAN/COM состоит в том, что, благодаря девайсу, можно управлять любым дистанционным компьютером или даже планшетом (на базе Android с поддержкой OTG) в локальной сети (включая самим собой) или через интернет, причем безо всяких DLL.

Плюсы Usb2kbd_LAN/COM:

Доступно управление девайсом как через LAN-интерфейс, так и через внутренний COM-порт;

- Через Usb2kbd_LAN/COM можно без труда управлять мышкой и клавиатурой в системах DOS, BIOS, Linux (т.е. вне системы Windows);

- Управление Usb2kbd_LAN/COM через UDP работает на 10% быстрее, чем Usb2kbd_DLL (так как не тратится время на работу с DLL).

- Управление Usb2kbd_LAN/COM через COM-порт работает в 8 раз быстрее, чем Usb2kbd_LAN/COM через UDP-протокол. Это 2 мс на одну команду против 15,6 мс!

- Usb2kbd_LAN/COM выполнен на всемирно известной платформе Arduino, что обеспечивает стабильность работы и помехоустойчивость.

NEWМышь в Usb2kbd_LAN/COM может иметь относительную или абсолютную систему координат по Вашему выбору.

- Usb2kbd_LAN/COM в относительной системе координат может смещать курсор мыши за 1 команду на + - 32767 пикселей, в абсолютной - в пределах текущего разрешения экрана.

По умолчанию девайс имеет относительную систему координат мыши. Для перевода устройства в абсолютную систему координат достаточно будет отключить его, затем замкнуть перемычкой ПИН11 и GRD, как показано на фото, затем включить девайс.

Usb2kbd_LAN/COM

Минусы Usb2kbd_LAN/COM:

- ТОЛЬКО ДЛЯ ОТНОСИТЕЛЬНОЙ СИСТЕМЫ КООРДИНАТ! Для корректной работы мыши Usb2kbd_LAN/COM в относительной системе координат необходимо будет ОБЯЗАТЕЛЬНО отключать "ускорение мыши" в Windows на управляемом и управляющем компьютерах. Что такое "отключение ускорения Widnows" и зачем его отключать? Дело в том, что по умолчанию такое ускорение включено в Windows и если, например, Вы отправите девайсу Usb2kbd_LAN/COM через управляющий пакет команду "сместить курсор на 100 пикселей по оси X", то девайс, конечно, выполнит команду и отправит в Windows точное смещение на те же 100 пикселей по оси X. Но вот Windows, получив такое смещение, самостоятельно "ускорит" мышь - и курсор мыши сместиться не на 100 пикселей, а на большую величину (например, 159 пикселей).  Так вот чтоб такого не произошло, Вам необходимо будет самостоятельно отключить ускорение мыши в настройках мыши Windows (смотрите рисунок ниже) на обоих компьютерах (управляющем и управляемом посредством Usb2kbd_LAN/COM). Для этого войдите в раздел панели управления "Мышь" и выставите настройки как на картинке ниже (В примере - для Windows 7, для Windows 10 - внешний вид настройки чуть другой, но принцип тот же).

Usb2kbd_LAN/COM

Ниже рассмотрим более детально основную функцию Usb2kbd_LAN/COM - функцию управления по сети.

Как управлять дистанционным компьютером/планшетом в локальной сети:

а) Подключите LAN-разьем девайса Usb2kbd_LAN/COM в локальную сеть при помощи патч-корда (например, в свободный разъем LAN вашего домашнего маршрутизатора или же свитча).

б) Подключите USB-разъем девайса Usb2kbd_LAN/COM через ДАТА-кабель MicroUSB (минимальной длины) в управляемый компьютер или планшет (через OTG-кабель), которым хотите дистанционно управлять.

в) Убедитесь, что девайс Usb2kbd_LAN/COM корректно виден в локальной сети, т.е. пропингуйте его с компьютера, с которого Вы хотите управлять (управляющий компьютер) - по умолчанию IP-адрес девайса - (клавиатура+мышь) - 192.168.0.222, порт - 12345. (IP-адрес и порт девайса могут быть заданы любыми при покупке).

Важно помнить, что Usb2kbd_LAN/COM умеет при включении считывать и задавать себе  IP-адрес с конфигурационного txt-файла с флеш памяти MicroSD. Для этого найдите флеш-карту MicroSD желательно размером 4 Гб или меньше, отформатируйте ее в файловой системе FAT32, затем подготовьте и поместите на карту строго 1 файл ip.txt (скачать образец в RAR-архиве можно здесь), в котором пропишите желаемый IP-адрес. Вставьте MicroSD карту в Usb2kbd_LAN/COM, после чего включите его в USB-разъем комьютера. При загрузке Usb2kbd_LAN/COM считает файл IP.txt с флеш-карты MicroSD и автоматически присвоит себе заданные Вами в файле IP-адрес.

г) Попробуйте в своей программе (скрипте) на управляющем компьютере составить и отправить первый управляющий UDP-пакет девайсу (мыши+клавиатуре) в локальной сети. Можно также использовать штатную программу дистанционного управления и отсылки пакетов в Usb2kbd_LAN/COM (программа высылается при покупке девайса). Программа не только проверит работоспособность девайса, но и поможет Вам научиться правильно составлять управляющие пакеты для отправки в девайс (описание программы читайте в конце этого раздела).

ОЧЕНЬ ВАЖНО!  ВНИМАНИЕ! При ручном управлении мышью с использованием штатного ПО очень важно использовать НЕ ИГРОВУЮ самую обычную мышь! Т.к. игровые мыши посылают намного больше событий в девайс, чем обычные мышки, тем самым могут вызвать зависание устройства!

Структура же самого отправляемого управляющего пакета также будет рассмотрена ниже.

д) Если Вы все сделали правильно, то LAN-модуль девайса получит Ваш управляющий пакет и исполнит его (нажмет клавишу клавиатуры или переместит мышь) на управляемом компьютере/планшете.

Так как UDP пакет не подразумевает контроль доставляемости, в девайсе реализована возможность контроля доставляемости UDP пакета. Так, получив управляющий UDP-пакет, девайс ответит на IP-адрес отправителя и порт 22222 информационным UDP пакетом, который будет содержать полученный им управляющий пакет. Так можно будет контролировать 100% доставляемость UDP управляющих пакетов в девайс.

NEW!  Также в Usb2kbd_LAN реализована возможность выполнения заранее набранных команд с MicroSD карты, вставленной в девайс. Достаточно скопировать файл commands.txt из этого архива (образец, проставьте свои команды и паузы!) в корень MicroSD карты (Fat32) и при включении девайс через небольшую паузу начнет их выполнять в цикле.

Для управления удаленным компьютером/планшетом через сеть интернет - Вам также нужно будет сделать настройку маршрутизатора удаленной сети - осуществить "проброс порта" 12345 из вне на девайс в сети -  IP-адрес девайса Usb2kbd_LAN/COM по умолчанию, как мы уже говорили, 192.168.0.222, порт 12345.

Ниже - пример проброса портов для роутера TPLINK-WR841N:

Usb2kbd_LAN/COM

После осуществления проброса портов Вы сможете управлять клавитурой и мышью дистанционного компьютера (не своим) через Usb2kbd_LAN/COM по UDP-протоколу безо всяких скриптов через вышеупомянутую специальную штатную программу управления и отсылки пакетов в Usb2kbd_LAN (далее штатное ПО, высылается при покупке), вот такую:

Usb2kbd_LAN/COM

и в ней прописываете настройки соединения (вкладка "Настройки"), соединяетесь с удаленным компьютером через любую программу дистанционного управления (рекомендую Parsec) в режиме просмотра (чтоб видеть, чем же Вы там управляете) и жмете "Старт" в программе. Теперь все события клавиатуры и мыши с управляемого компьютера будут отсылаться в девайс по локальной сети на заданный IP адрес и порт, и вот Вы управляете удаленным компьютером как будто Вы возле него! Причем все нажатия клавиатуры и мыши будут настоящими, а не эмулированными!

Есть еще один вариант управления девайсом в случае, если сам девайс и управляемый компьютер располагаются удаленно от управляющего компьютера и напрямую слать пакеты в девайс нет возможности по локальной сети. В таком случае вы запускаете штатное ПО на удаленном компьютере (которым нужно управлять), выбираете в штатном ПО особый режим работы, когда все эмулированные события движения мыши и клавиатуры, полученные  из Parsec, будут дублироваться в девайс и становиться "настоящими". 

Кстати, в Usb2kbd_LAN/COM есть возможность отсылать дублированные нажатия клавиатуры и мыши одновременно сразу на несколько пар IP:PORT. Для этого допишите необходимые параметры в файл settings.ini программы. Вот пример settings.ini с двумя дополнительными парами IP и PORT (т.е. в примере одна пара SendToIPAddress:SendToPort - основная, а SendToIPAddress1:SendToPort1 и SendToIPAddress2:SendToPort2 - дополнительные. Итого - пакеты будет отсылаться одновременно на 3 пары.

Пример файла settings.ini:

[global]
serial=1247
systempass=0
IPAddress=192.168.0.50
SendToIPAddress=192.168.0.223
SendToPort=12345
SendToIPAddress1=192.168.0.224
SendToPort1=12345
SendToIPAddress2=192.168.0.225
SendToPort2=12345

При запуске штатной программы с такими установками во вкладке "Настройки" Вы увидите надпись о том, сколько дополнительных пар IP:PORT было найдено в settings.ini

Кроме того, напомню, что при помощи этой программы Вы также сможете научиться правильно составлять управляющие пакеты для отправки в девайс (вкладка программы Составитель пакетов). Там же можно и сразу отправить составленный пакет в девайс (работает только для пакетов смещения курсора мыши без нажатий кнопок, чтоб не было эффекта "залипания" нажатой клавиши без отжатия).

Управляющий пакет Usb2kbd_LAN/COM

Итак, что такое управляющий пакет Usb2kbd_LAN/COM? Управляющий пакет - это 18-значный цифровой код определенного формата, который Вы отправляете в Usb2kbd_LAN/COM (через LAN-интерфейс или COM-порт), который получается девайсом, проверяется и, если пакет прошел проверку на корректность, выполняется (происходит нажатие клавиши клавиатуры, движение мыши и т.д.). Рассмотрим структуру управляющего пакета для отправки в Usb2kbd_LAN/COM:

Usb2kbd_LAN/COM
Как видно, структура управляющего пакета очень простая и состоит строго из 18 цифровых символов.  Для простоты представления можно представить управляющий пакет в виде формулы:
Packet = ID+b1+b2+b3+b4

где ID  - ID  девайса (написан маркером на девайсе, у каждого девайса уникален);

b1, b2, b3, b4параметры управляющего пакета, где мы описываем что мы хотим нажимать, куда смещать мышь и на сколько.

Давайте сначала рассмотрим детальнее параметры b1, b2, b3, b4 управляющего пакета, необходимые для работы Usb2kbd_LAN:

b1 - Управляющий символ (целое число) - определяет действие, которое необходимо выполнить устройством Usb2kbd_Lan. Его возможные значения Вы сможете увидеть в таблице ниже

b2 - Вспомогательный символ, который дополняет символ b1. Может означать:

а) Код клавиши (целое число, значения от 4 до 231) - определяет код нажатой или отжатой клавиши клавиатуры для случаев, когда b1 = 1 или 2 (коды клавиш Вы сможете скачать в разделе сайта "Загрузки");

ИЛИ

б) Код нажатия кнопок мыши (целое число, значения от 0 до 7) - определяет код нажатой или отжатой кнопки мыши для случаев, когда b1 = 4.

... т.д. Подробнее - в таблице параметров управляющего пакета ниже.

Usb2kbd_LAN/COM
Очень важно! Обратите внимание на параметры b3 и b4 - это передаваемые координаты  X и Y. Для относительной системы координат X и Y могут принимать значения смещений курсора мыши в диапазоне от -32767 ... 0 ... +32768, фактически же в управляющий пакет кладуться только положительные значения (см. формулу расчета в структуре управляющего пакета), для абсолютной системы координат - передаваемые значения X и Y в девайс должны рассчитываться по формуле (смотрите пример выше).
Для закрепления знаний об управляющем пакете давайте рассмотрим управляющий пакет вида "120640000010000100" (как раз он изображен в структуре управляющего пакета на картинке выше), где
"1206" - ID девайса (написан маркером на девайсе, у каждого девайса уникален);
"4" - управляющий символ b1 - в данном случае - 4 - "событие мыши" - см. таблицу параметров управляющего пакета выше. Если мышь Usb2kbd_LAN/COM находится в относительной системе координат, то курсор будет  смещаться относительно текущего положения курсора мыши на заданную величину X и Y, если же в абсолютный системе координат - то курсор мыши будет смещаться в заданную координату экрана X и Y.
"000" - вспомогательный символ b2 - в данном случае 0 -  "ни одна из кнопок мыши не нажата", значит будем просто перемещать курсор мыши без нажатий;
"00100" - b3 задано значение 100 по оси X. Для относительной системы координат мыши - это будет смещение по оси X на 100 пикселей, для абсолютной - перемещение в координату X экрана  = 100;
"00100" - b4 задано значение 100 по оси Y. Для относительной системы координат мыши - это будет смещение по оси X на 100 пикселей, для абсолютной - перемещение в координату X экрана  = 100;
Как видно, данный пример пошлет команду девайсу сместить курсор мыши относительного текущего положения курсора мыши на положительные значения X=X+100, Y=Y+100 (пикселей) для относительнй системы координат, либо переместить курсор мыши в координаты экрана X=100 Y=100 для абсолютной системы координат мыши девайса. 
Как рассчитать отрицательные смещения для относительной системы координат? Смотрите ответ на картинке выше в структуре управляющего пакета.
Приведу пример - Вы хотите отправить команду смещения мыши на отрицательные значения X=-100 Y=-50. 
Без труда вычислим параметры b3 и b4, необходимые для относительного смещения курсора мыши (смотрим шпаргалку - структуру управляющего пакета):
b3 = 65536 - 100 = 65436;
b4 = 65536 - 50 = 65486;
Еще раз напомню, потренироваться составлять управляющие пакеты Вы сможете при помощи штатной программы управления и отсылки пакетов в Usb2kbd_LAN/COM (программа высылается Вам при покупке девайса). Я уверен, что Вы разберетесь! :)

Хватит теории, пошла практика:

ВНИМАНИЕ! ВАЖНО! Для стабильной и бесперебойной работы Usb2kbd_LAN/COM по протоколу UDP (LAN) ОБЯЗАТЕЛЬНО используйте минимальные паузы в 1 мс между событиями, иначе возможны потери UDP-пакетов! Для работы через COM-порт паузы между событиями не обязательны.

Отправка UDP управляющего пакета в локальную сеть:

Перед началом написания программы отправки управляющего UDP-пакета в устройство помните, что сначала в Вашей программе Вам нужно будет задать следующие исходные параметры сети:

- IP адрес локального компьютера (откуда будет посылаться UDP-пакеты), в примерах - 192.168.0.50, проставьте свой;

- IP-адрес подключенного устройства Usb2kbd_LAN/COM (по умолчанию один IP - 192.168.0.222 для клавиатуры и для мыши), проставьте свой, если отличен от 192.168.0.222;

- Порт назначения (12345 для клавиатуры и для мыши), проставьте свой, если отличен от 12345;

- вызвать функцию формирования и отправки управляющего UDP-пакета на указанный IP-адрес и порт).

Отправка COM управляющего пакета в COM-порт девайса:

Если же Вы решите вместо UDP отправлять управляющие пакеты через COM-порт в устройство Usb2kbd_LAN/COM, помните, что сначала в Вашей программе Вам нужно будет задать  следующие исходные параметры:

- COM-порт, который отобразится при подключении девайса к USB компьютера с замкнутыми выводами 12 и GRN платы (см. информацию выше в этом разделе);

- вызвать функцию формирования и отправки управляющего COM-пакета на указанный COM-порт. Напомню, управляющий пакет для COM-порта девайса аналогичен пакету UDP, только в конце пакета (18 цифр) обязательно должен быть добавлен специальный символ конца строки ($0A, он же LF).


Для всех примеров ниже за эталон ID девайса будет принято число 1206.

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

Пример на Autohotkey (UDP):

Sleep, 2000

IPAddress:="192.168.0.50" ; локальный ip

SendToIPAddress:="192.168.0.222" ; ip девайса

Port:= "12345" ; порт локальной тачки, откуда пойдут UDP-пакеты в сеть

SendToPort:= "12345" ; порт удаленной тачки, куда пойдет UDP-пакет для девайса

; инициализируем UDP один раз вначале

VarSetCapacity(wsaData, 32)

DllCall("Ws2_32\WSAStartup", "UShort", 2, "UInt", &wsaData)

socket := DllCall("Ws2_32\socket", "Int", 2, "Int", 2, "Int", 17)

VarSetCapacity(sockaddr, 32)

NumPut(2, sockaddr, 0, "Short")

NumPut(DllCall("Ws2_32\htons", "UShort", Port), sockaddr, 2, "UShort")

NumPut(DllCall("Ws2_32\inet_addr", "Str", IPAddress), sockaddr, 4)

DllCall("Ws2_32\WSAAsyncSelect", "UInt", socket, "UInt", WinExist("A"), "UInt", 0x5555, "Int", 1)

OnMessage(0x5555, "WinsockMessage")

SendText := "120640000010000100"

; отправим сформированный UDP-пакет в девайс

VarSetCapacity(sendaddr, 32)

NumPut(2, sendaddr, 0, "Short")

NumPut(DllCall("Ws2_32\htons", "UShort", SendToPort), sendaddr, 2, "UShort")

NumPut(DllCall("Ws2_32\inet_addr", "Str", SendToIPAddress), sendaddr, 4)

DllCall("Ws2_32\sendto", "UInt", socket, "Str", SendText, "Int", StrLen(SendText), "Int", 0 , "UInt", &sendaddr, "Int", 32)


Пример на Autoit (UDP):

Ниже приведу пример формирования и отсылки управляющего UDP-пакета в Usb2kbd_LAN/COM посредством Autoit:

UDPStartup()

$LocalIP = "192.168.0.50"
$LocalPort = "12345"
$RemoteIP = "192.168.0.222"
$RemotePort = "12345"
$sock = UDPBind($LocalIP, $LocalPort)
$sock[2] = $RemoteIP
$sock[3] = $RemotePort
Sleep(3000)
UDPSend($sock, "120610040000000000")
UDPSend($sock, "120680000000000000")
UDPShutdown()

Пример нажимает клавишу А на клавиатуре и затем отжимает ВСЕ клавиши клавиатуры.


Пример на С++ (UDP, спасибо за пример Александру):

void SendInputClass::SendInput(){

SendInputClass::SendUDP("1", "030", "00000", "00000"); // нажатие 1
Sleep(30);
SendInputClass::SendUDP("2", "030", "00000", "00000"); // отжатие 1
}
void SendInputClass::SendUDP(string b1, string b2, string b3, string b4) {
// 1206 - ID
// 192.168.0.222 - IP
// 12345 - Port
CHAR pak[300];
sprintf_s(pak, "1206%s%s%s%s", b1.c_str(), b2.c_str(), b3.c_str(), b4.c_str());
struct sockaddr_in si_other;
int s, slen = sizeof(si_other);
WSADATA wsa;
//Initialise winsock
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
DebugBreak();
//create socket
if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)
DebugBreak();
//setup address structure
memset((char *)&si_other, 0, sizeof(si_other));
si_other.sin_family = AF_INET;
si_other.sin_port = htons(12345);
si_other.sin_addr.S_un.S_addr = inet_addr("192.168.0.222");
sendto(s, pak, strlen(pak), 0, (struct sockaddr *) &si_other, slen);
closesocket(s);
WSACleanup();
}


Пример на Delphi7 (UDP):

Скачать пример


Пример на Java (UDP, спасибо за код Матвею):

DatagramSocket socket = new DatagramSocket();

 InetAddress inetAddress = InetAddress.getByName("192.168.1.222");
 byte[] msg;
 msg = "120610040000000000".getBytes(); // press button "a"
 DatagramPacket packet = new DatagramPacket(msg, msg.length, inetAddress, 12345);
 socket.send(packet);
 Thread.sleep(1); //delay 1ms
 msg = "120620040000000000".getBytes(); //release button "a"
 packet = new DatagramPacket(msg, msg.length, inetAddress, 12345);
 socket.send(packet);
 socket.close();


Пример на C# (UDP, спасибо за код Александру):

using System;
using System.Threading;
using System.Net.Sockets;

class Program
{
        static string server = "192.168.0.222";
        static int port = 12345;
        static string serial = "1206";
       
        static void Main(string[] args)
        {
                Sendkeyb("1", "030", "00000", "00000"); // отошлем клавиатуре нажатие 1
                Sendkeyb("2", "030", "00000", "00000"); // отошлем клавиатуре отжатие 1
        }
       
        static void Sendkeyb(string b1, string b2, string b3, string b4)
        {
                string message = serial + b1 + b2 + b3 + b4;
                UdpClient client = new UdpClient(server, port);
                byte[] data = Encoding.UTF8.GetBytes(message);
                int numberOfSentBytes = client.Send(data, data.Length);
                client.Close();
                Thread.Sleep(1);
        }
}


Пример на Autohotkey (COM-порт):

; инициализируем COM

port := FileOpen("\\.\COM72", "w")  ; Open for writing only, not reading/appending.  Тут проставьте COM-порт своего девайса.

port.Write("120640000000100000")  ; 1 px mouse X move

port.WriteChar(10)  ; Write конец строки ($0A).

port.Close() ; close the Port


Пример на AutoIt (COM-порт):

Скачать пример


Пример на Питоне (COM-порт, Спасибо за пример Александру):

#pip install pyserial - Уставливаем библиотеку

import serial # Импортируем библиотеку

 

#----------------#

 

def main():

 port = serial.Serial("COM3", timeout=1) # Открываем порт для записи.

 port.write(b"120640000000100000") # Двигаем мышкой как пример.

 port.write(b"\n") # Не забываем про конец строки.

 port.close()  # Закрываем порт.

 

if name == "main":

    main()


Пример на Питоне для программной перезагрузки девайса/reset (спасибо за пример Алексею):

Для использования класса serial.Serial и модуля time в вашем коде необходимо добавить соответствующие импорты. Вот модифицированный код с необходимыми импортами:

 

python

Copy code:

 

import serial

import time

 

def trigger_bootloader(serial_port):

    try:

        # Открываем последовательное соединение

        ser = serial.Serial(serial_port, baudrate=1200, timeout=1)

 

        # Ждем короткое время перед сбросом (при необходимости, можно настроить время)

        time.sleep(0.1)

 

        # Выполняем сброс, переключая линию DTR (Data Terminal Ready)

        ser.setDTR(False)

        time.sleep(0.5)

        ser.setDTR(True)

 

        # Предоставляем время для того, чтобы Arduino вошла в режим загрузчика

        time.sleep(2)

 

        # Закрываем последовательное соединение

        ser.close()

 

        print("Режим загрузчика активирован.")

 

    except Exception as e:

        print(f"Произошла ошибка при активации режима загрузчика: {e}")

 

# Вызываем функцию так

serial_port = 'COM12'

trigger_bootloader(serial_port)

Убедитесь, что у вас установлена библиотека pyserial. Вы можете установить её с помощью следующей команды:

 

bash

Copy code:

 

pip install pyserial

 

Это гарантирует, что модуль serial будет доступен для использования в вашем скрипте.


Пример на AHK для программной перезагрузки девайса/reset (спасибо за пример Алексею):

autohotkeyCopy code; Открываем последовательный порт

SerialPort := ComObjCreate("MSCommLib.MSComm")

SerialPort.CommPort := 12 ; Измените на номер вашего порта

SerialPort.Settings := "1200,N,8,1"

SerialPort.PortOpen := true

 

; Ждем перед сбросом (при необходимости, измените время)

Sleep, 100

 

; Выполняем сброс, переключая линию DTR (Data Terminal Ready)

DllCall("kernel32.dll\EscapeCommFunction", Ptr, SerialPort.hCom, UInt, 6) ; 6 соответствует CLRDTR

 

; Предоставляем время для того, чтобы Arduino вошла в режим загрузчика

Sleep, 2000

 

; Закрываем последовательный порт

SerialPort.PortOpen := false

 

MsgBox Режим загрузчика активирован.

ExitApp

 

Примечание:

Убедитесь, что номер порта (CommPort) в коде соответствует вашему порту Arduino.При необходимости, вы можете изменить параметры последовательного порта в строке SerialPort.Settings.Код использует библиотеку MSCommLib, которая включена в AHK. В случае её отсутствия, вы можете скачать и зарегистрировать её.Пожалуйста, выполните код с административными правами, чтобы избежать проблем с доступом к порту.


Пример на C++ (COM-порт, Спасибо за пример Александру):

void SendDataToComPort(const std::wstring& port, const std::string& data) {

    HANDLE comHandle = CreateFileW(port.c_str(), GENERIC_READ | GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, 0, nullptr);

    if (comHandle == INVALID_HANDLE_VALUE) {

        std::cout << "Проблемы с COM-портом." << std::endl;

        return;

    }

 

    DWORD bytesWritten = 0;

    WriteFile(comHandle, data.c_str(), static_cast<DWORD>(data.length()), &bytesWritten, nullptr);

    std::cout << "Отправлено байт " << bytesWritten << " в USB2KBD" << std::endl;

 

    CloseHandle(comHandle);

}

 

int main() {

    // Отправляем данные на COM-порт Arduino

    std::wstring comPort = L"\\\\.\\COM3";  // Укажите соответствующий порт

    std::string dataToSend = "120640000050000500\n";  // Данные для отправки

    SendDataToComPort(comPort, dataToSend);

    return 0;

}


ВНИМАНИЕ! Если в примерах Вы не нашли пример на Вашем любимом языке программирования, попробуйте упорно погуглить (пояндексить), как можно отправить UDP-пакет в сеть или как отправить пакет в COM-порт компьютера при помощи Вашего языка программирования. Если Вы самостоятельно найдете решение, то поделитесь своей радостью с другими, написав решение мне в telegram/e-mail, указанный в разделе сайта "КОНТАКТЫ" и Ваш пример обязательно попадет на сайт продукта. Так Вы значительно облегчите жизнь другим и поможете развитию проекта. Спасибо!