Как включить индикатор Caps Lock на клавиатуре, не включая Caps Lock?

StackOverflow https://stackoverflow.com/questions/2248358

Вопрос

Я пишу программу, которая использует клавишу Caps Lock в качестве переключателя.Было бы неплохо настроить светодиод клавиши, чтобы он показывал, включена или выключена моя программа, как это обычно делает клавиша Capslock.

Я знаю, что мог бы просто SendInput('Capslock'); или что-то еще, чтобы включать и выключать Caps Lock.Но мое приложение представляет собой программу для набора текста, и я не хочу иметь дело с переводом клавиш, написанных заглавными буквами, которые при включении этого приложения могут привести к их нижнему/верхнему регистру.Возможно, со временем я пойду по этому пути, но не для этой версии.

Однако мне было бы интересно просто включить светодиодную лампу. БЕЗ на самом деле включаю капс-лок.Есть ли способ сделать это?

Спасибо.

Это было полезно?

Решение

Код для изменения индикаторов на клавиатуре с C# можно найти по адресу Имитация светодиодов Num Lock, Caps Lock и Scroll Lock.

Другие советы

Я почти уверен, что вы не можете переключать светодиод без переключения фактической блокировки Caps, если только вы не писали драйвер клавиатуры.(Я не рекомендую этого!)

Существует плагин для Miranda IM под названием "Уведомление с клавиатуры доб.", который содержит в своем исходном коде реализацию управления светодиодами на языке C.См. файл Keyboard.c в исходном коде.Вероятно, вы сможете портировать его на C#.

Вот наиболее интересные моменты из исходного кода:

mir_snprintf(aux1, sizeof(aux1), "Kbd%d", i);
mir_snprintf(aux2, sizeof(aux2), "\\Device\\KeyboardClass%d", i);
DefineDosDevice(DDD_RAW_TARGET_PATH, aux1, aux2);

mir_snprintf(aux1, sizeof(aux1), "\\\\.\\Kbd%d", i);
hKbdDev[i] = CreateFile(aux1, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

...

result |= DeviceIoControl(hKbdDev[i], IOCTL_KEYBOARD_SET_INDICATORS, &InputBuffer, DataLength, NULL, 0, &ReturnedLength, NULL);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top