Как включить подсветку заглавных букв на клавиатуре, не включая заглушку? - PullRequest
2 голосов
/ 12 февраля 2010

Я пишу программу, которая использует caps-lock в качестве тумблера. Было бы неплохо установить светодиод на клавиатуре, чтобы показать, что моя программа включена или выключена, как, например, клавиша capslock.

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

Мне, однако, было бы интересно просто включить светодиодную подсветку БЕЗ фактического включения caps-lock. Есть ли способ сделать это?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 22 марта 2010

Для Miranda IM существует плагин с именем " Keyboard Notify Ext. ", который содержит в своем исходном коде 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);
2 голосов
/ 10 мая 2012

Вы можете найти код для изменения индикаторов на клавиатуре из C # на Блокировка фальшивых номеров, заглавных букв и прокрутки светодиодов

2 голосов
/ 12 февраля 2010

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

...