Перейти к содержимому

Модули и функции

Плагины могут расширять свои возможности за пределы базовых операций чтения и записи USB с помощью двух систем: модулей и функций. Понимание разницы между ними поможет вам обнаружить доступные возможности и использовать правильный механизм.

МодулиФункции
Как использоватьimport { x } from "@SignalRGB/name"device.addFeature("name") в Initialize()
НазначениеСлужебные сервисы (сеть, кодирование, системная информация)Возможности устройства (аккумулятор, ввод)
Пространство имёнСобственные экспортируемые имена модуляdevice.featureName.*
ЭкземплярыОдин на плагинМожет быть несколько

Импортируйте их в начале файла плагина.

Путь импортаНазначение
@SignalRGB/serialСвязь через последовательный/COM-порт
@SignalRGB/tcpСвязь через TCP-сокет
@SignalRGB/udpСвязь через UDP-сокет
@SignalRGB/base64Кодирование и декодирование Base64
@SignalRGB/performanceПрофилирование производительности и таймеры кадров
@SignalRGB/appInfoИнформация о версии приложения SignalRGB
@SignalRGB/systeminfoИнформация об аппаратном обеспечении системы
@SignalRGB/permissionsПроверка состояния разрешений пользователя

Примеры использования serial, tcp и udp см. в разделе Расширенная связь.


Вызовите device.addFeature("name") в экспорте Initialize(). Функция создаёт глобальный объект с тем же именем, что и функция.

Имя функцииПространство имёнНазначение
"keyboard"keyboardИнжектирование нажатий клавиш или маршрутизация событий клавиатуры в макросы SignalRGB
"mouse"mouseИнжектирование ввода мыши или маршрутизация событий мыши в макросы SignalRGB
"battery"batteryОтчёт об уровне заряда и состоянии зарядки для беспроводных устройств
"dtls"dtlsDTLS-зашифрованный UDP с PSK-аутентификацией

Для плагинов, представляющих клавиатурные устройства. Позволяет инжектировать реальные нажатия клавиш в ОС или генерировать события, которые могут запускать макросы SignalRGB.

export function Initialize() {
device.addFeature("keyboard");
}

Отправляет необработанное нажатие клавиши напрямую в операционную систему через keybd_event. Клавиша воспринимается как реальный ввод всеми приложениями — полностью обходит систему макросов.

ПараметрТипОписаниеПример
vkCodeNumberКод виртуальной клавиши Windows0x41 (клавиша A)
options.releasedBoolean (обязательный)true для события отпускания, false для нажатияfalse
keyboard.sendHid(0x41, { released: false }); // Press A
keyboard.sendHid(0x41, { released: true }); // Release A

Маршрутизирует событие клавиатуры через систему макросов SignalRGB. Макросы с триггером onKey могут сопоставляться с этими событиями. Не инжектирует реальное нажатие клавиши — только макросы SignalRGB видят это событие.

Система макросов автоматически дополняет событие актуальным состоянием модификаторов (Ctrl, Shift, Alt, Win) с физической клавиатуры перед диспетчеризацией.

ПараметрТипОписаниеПример
eventDataObject или StringДанные события. Включите key (строковое имя) и опционально keyCode (число) для сопоставления клавиш.{ key: "A", keyCode: 0x41 }
eventTypeStringМетка типа события"KeyPress"
keyboard.sendEvent({ key: "A", keyCode: 0x41, released: false }, "KeyPress");

Скрипты макросов получают event.Sender (UID плагина) и event.SenderType ("Device"), чтобы отличать события плагина от нажатий на реальном оборудовании.


Для плагинов, представляющих мышь или указательные устройства.

export function Initialize() {
device.addFeature("mouse");
}

Отправляет необработанное событие мыши в ОС через SendInput. Перемещение мыши (MOUSEEVENTF_MOVE, MOUSEEVENTF_ABSOLUTE) заблокировано в целях безопасности.

ПараметрТипОписание
buttonCodeNumberФлаг Windows MOUSEEVENTF_*
options.XButtonNumberОбязателен для событий X-кнопки — 1 (X1) или 2 (X2)
options.WheelDeltaNumberОбязателен для событий колёсика прокрутки — положительное значение прокручивает вверх, отрицательное — вниз

Распространённые коды кнопок:

КодКонстантаОписание
0x0002MOUSEEVENTF_LEFTDOWNНажатие левой кнопки
0x0004MOUSEEVENTF_LEFTUPОтпускание левой кнопки
0x0008MOUSEEVENTF_RIGHTDOWNНажатие правой кнопки
0x0010MOUSEEVENTF_RIGHTUPОтпускание правой кнопки
0x0020MOUSEEVENTF_MIDDLEDOWNНажатие средней кнопки
0x0040MOUSEEVENTF_MIDDLEUPОтпускание средней кнопки
0x0800MOUSEEVENTF_WHEELВертикальная прокрутка
0x01000MOUSEEVENTF_HWHEELГоризонтальная прокрутка
0x0080MOUSEEVENTF_XDOWNНажатие X-кнопки (требует опции XButton)
0x0100MOUSEEVENTF_XUPОтпускание X-кнопки (требует опции XButton)
// Left click
mouse.sendHid(0x0002, {}); // down
mouse.sendHid(0x0004, {}); // up
// Scroll up one notch
mouse.sendHid(0x0800, { WheelDelta: 120 });
// X1 button press
mouse.sendHid(0x0080, { XButton: 1 });
mouse.sendHid(0x0100, { XButton: 1 });

Маршрутизирует пользовательское событие мыши через систему макросов SignalRGB. Скрипты макросов с триггером onMouse могут сопоставляться с этими событиями. Не инжектирует никакого ввода мыши на уровне ОС.

mouse.sendEvent({ button: "LeftClick" }, "ButtonPress");

Для беспроводных устройств, сообщающих о состоянии аккумулятора. После добавления функции обновляйте уровень заряда и состояние при каждом соответствующем сообщении от устройства.

export function Initialize() {
device.addFeature("battery");
}
МетодОписание
battery.setBatteryLevel(level)Установить процент заряда (0–100)
battery.setBatteryState(state)Установить состояние зарядки с помощью константы состояния

Константы состояния (доступ через battery.<name>):

КонстантаОписание
battery.disabledОтчёт об аккумуляторе отключён
battery.unknownСостояние ещё неизвестно
battery.drainingРаботает от аккумулятора
battery.chargingЗарядка через кабель
battery.fullChargingЗарядка при полном заряде
battery.fullПолный заряд, не заряжается
battery.wirelessChargingБеспроводная зарядка

Эти свойства отражают последние установленные значения:

СвойствоТипОписание
battery.batteryLevelNumberТекущий уровень заряда (0–100)
battery.batteryStateNumberТекущее значение состояния
battery.stateStringStringМетка состояния для чтения
export function Initialize() {
device.addFeature("battery");
}
export function Render() {
// Non-blocking read — check if the device sent a battery report this frame
var data = device.read([], 64, 0);
if(device.getLastReadSize() > 0 && data[0] === 0x02) {
var level = data[1]; // 0–100
var charging = data[2] === 0x01;
battery.setBatteryLevel(level);
battery.setBatteryState(
charging ? battery.charging : battery.draining
);
}
}