HID-клавиатура: отправлять только клавиши-модификаторы
Я хочу отправлять клавиши-модификаторы, такие как Shift, Alt, Ctrl и т. д., без каких-либо других клавиш. Теоретически это должно быть возможно, поскольку оно работает на моей обычной клавиатуре (проверял с Xoutput и играми).
На данный момент мне нужно отправить фиктивные нажатия клавиш, такие как блокировка прокрутки (0xCF), чтобы отправить модификаторы. Я использую ядро Arduino для ESP32 с модулем разработки ESP32S3.
#include "USBHIDKeyboard.h"
USBHIDKeyboard Keyboard;
Keyboard.press(KEY_LEFT_CTRL); Keyboard.write(0xCF); Keyboard.write(0xCF);
delay(1000);
Keyboard.release(KEY_LEFT_CTRL); Keyboard.write(0xCF); Keyboard.write(0xCF);
Это работает, но очень некрасиво: иногда мигает светодиод блокировки прокрутки, а в играх настройки иногда видят блокировку прокрутки и жалуются.
Есть идеи?
@Join Catman, 👍0
1 ответ
▲ 1
Вы можете использовать Keyboard.pressRaw()
, модификаторами должны быть 0xE0–0xE8.
size_t USBHIDKeyboard::pressRaw(uint8_t k) {
uint8_t i;
if (k >= 0xE0 && k < 0xE8) {
// это клавиша-модификатор
_keyReport.modifiers |= (1<<(k-0x80));
} else if (k && k < 0xA5) {
// Добавляем k в ключевой отчет, только если его еще нет
// и если есть пустой слот.
if (_keyReport.keys[0] != k && _keyReport.keys[1] != k && _keyReport.keys[2] != k && _keyReport.keys[3] != k && _keyReport.keys[4] != k && _keyReport.keys[5] != k) {
for (i=0; i<6; i++) {
if (_keyReport.keys[i] == 0x00) {
_keyReport.keys[i] = k;
break;
}
}
if (i == 6) {
return 0;
}
}
} else {
// не модификатор и не ключ
return 0;
}
sendReport(&_keyReport);
return 1;
}
USBHIDKeyboard.cpp
,
@Join Catman
Смотрите также:
- Arduino nano как клавиатура HID
- Keyboard.h не найден
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как выбрать альтернативные контакты I2C на ESP32?
- Драйверы для чипа последовательного порта CH9102X
- Нажать клавишу Windows, используя «keyboard.press();»
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi