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

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

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

Однако мне было бы интересно просто включить светодиодный индикатор БЕЗ фактического включения Caps-Lock. Есть ли способ сделать это?

Спасибо.


person ck_    schedule 11.02.2010    source источник
comment
Возможно, вы захотите пересмотреть свой дизайн. Если включение клавиши Caps Lock не позволяет пользователям вводить заглавные буквы, ваше приложение имеет серьезные недостатки в удобстве использования.   -  person Anon.    schedule 12.02.2010
comment
Раньше у меня был плагин для обмена сообщениями MSN, который мигал светом заглавной буквы / блокировки прокрутки и т. Д., Когда я получал новое мгновенное сообщение. Я несколько раз набрал по ошибке заглавными буквами, и плагин был быстро удален.   -  person alex    schedule 12.02.2010
comment
Теперь я это вижу ... ваша программа бесцеремонно вылетает, и индикатор Caps Lock инвертируется. Затем вопрос, который все считают глупым, размещается на SuperUser ...   -  person Jason Punyon    schedule 12.02.2010
comment
Весь смысл приложения в том, чтобы переназначить клавишу Capslock на что-нибудь полезное. Люди все время меняют его на дополнительный Ctrl или что-то еще. Так что, если они установили мое приложение, они будут ожидать отсутствия крышек.   -  person ck_    schedule 12.02.2010
comment
Так плагин MSN messenger только что включил / выключил Capslock? Это бы обидно ... Или светодиоды просто мигали?   -  person ck_    schedule 12.02.2010
comment
System.Windows.Forms.NotifyIcon было бы проще кодировать. Просто измените свойство Icon, чтобы оно указывало на разные значки, когда ваша программа включена или выключена.   -  person Chris R. Timmons    schedule 12.02.2010
comment
Да, используя это уже, а также воздушный шарик. Спасибо :)   -  person ck_    schedule 12.02.2010
comment
По какой причине вы не можете использовать Scroll или num Lock вместо Capslock? Capslock будет вводить в заблуждение ...   -  person sam    schedule 12.02.2010
comment
Легче получить доступ через домашнюю позицию набора текста. Тем не менее, прокрутка / цифровая блокировка будут вариантами. Вы, ребята, серьезно используете Capslock настолько, что сомневаетесь в его переназначении?   -  person ck_    schedule 12.02.2010
comment
@cksubs Я предполагал, что для них мигают переключатели - когда они мигают, я набираю LIKE THIS.   -  person alex    schedule 12.02.2010
comment
@cksubs: Проблема не в том, как часто используется Caps Lock, а в том, насколько редко мы узнаем о нем что-то новое. Мы знаем, что делает Caps Lock, потому что маленькие мозги выяснили это очень давно, и это использовалось в течение 10, 20 ... 50 лет или около того. Изменение того, что он делает, было бы равносильно выпуску надстройки для вашего автомобиля, которая (как функция) меняет направление рулевого колеса на противоположное ...   -  person Jason Punyon    schedule 12.02.2010
comment
Это было бы больше похоже на то, чтобы взять одну особенность автомобильного радиоприемника, которую вы никогда не использовали, и заставить ее делать что-то, что вы будете использовать гораздо больше. Но активируя его через тот же элемент управления. И вы были тем, кто взял отвертку к своему радио, так что вы знаете, что изменение было внесено. - Я не говорю, что избавиться от привычки легко, но если вознаграждение будет достаточно высоким, люди переключатся на него. Capslock - это не руль.   -  person ck_    schedule 12.02.2010
comment
Конечно, Capslock - это не руль. Это ... КРУИЗ-КОНТРОЛЬ! (Извините, не удержался.)   -  person Ishmaeel    schedule 06.12.2011
comment
@cksubs считают, что на немецкой клавиатуре с включенной Capslock ввод 1 дает !, а shift+1 дает 1; подумайте о том, насколько автоматическим и жестким является наше использование клавиатуры после многих лет тренировки мышечной памяти; теперь подумайте о том, что происходит в мозгу немецкого пользователя, когда он подсознательно осознает, что загорелся индикатор колпачков. :(   -  person ANeves thinks SE is evil    schedule 18.01.2012


Ответы (2)


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

person Scott P    schedule 11.02.2010
comment
Он должен создать периферийное оборудование, которое поставляется вместе с программным обеспечением. Большой глобус в коробке с надписью TOGGLE - person alex; 12.02.2010
comment
Если вы загружаете свою собственную ОС и имеете прямой доступ для записи в порт, к которому подключена клавиатура ... а в C #? Я сомневаюсь. - person Daniel Coffman; 12.02.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);
person ivanzoid    schedule 22.03.2010