Зажечь Scrol Lock
От: AVALAH  
Дата: 08.07.13 14:53
Оценка:
Задача стояла программно Зажечь светодиод Scrol Lock не переключая саму функцию.
С трудом удалось, но возникла проблема, при работе других переключателей Caps lock,Num Lock они восстанавливают истинное значение и диода Scroll lock хотя их об этом и не просили.
Подскажите как решить проблему...

Использую для подсветки английской раскладки клавиатуры (параллельное переключение функции Scroll lock иногда мешает )
Re: Зажечь Scrol Lock
От: okman Беларусь https://searchinform.ru/
Дата: 08.07.13 17:37
Оценка:
Здравствуйте, AVALAH, Вы писали:

AVA>Задача стояла программно Зажечь светодиод Scrol Lock не переключая саму функцию.

AVA>С трудом удалось, но возникла проблема, при работе других переключателей Caps lock,Num Lock они восстанавливают истинное значение и диода Scroll lock хотя их об этом и не просили.
AVA> Подскажите как решить проблему...

AVA>Использую для подсветки английской раскладки клавиатуры (параллельное переключение функции Scroll lock иногда мешает )


Знаю три способа: keybd_event, порт 0х60 (работает только для PS/2-клавиатур) и
IOCTL_KEYBOARD_SET_INDICATORS. Все три подвержены проблемам, которые Вы описали.
Думаю, надежное решение можно сделать только каким-нибудь очень глубоким хаком
где-нибудь в Raw Input Thread или даже написав драйвер. Например, посадить фильтр
над драйвером класса клавиатуры (kbdclass) и фейлить все чужие запросы индикаторам, а
свои разрешать. Для знающих людей делов на денек работы
Re[2]: Зажечь Scrol Lock
От: Nikolay_Ch Россия  
Дата: 09.07.13 08:36
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, AVALAH, Вы писали:


O>Например, посадить фильтр над драйвером класса клавиатуры (kbdclass) и фейлить все чужие запросы индикаторам, а свои разрешать.

Мне кажется, что загорание индикатора встроено в клавиатурный контроллер. И, несмотря на то, что управление индикатором извне возможно, вполне допустима ситуация, когда контроллер будет зажигать или гасить индикатор ничего не сообщая операционной системе.
Re[3]: Зажечь Scrol Lock
От: okman Беларусь https://searchinform.ru/
Дата: 09.07.13 09:08
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>Мне кажется, что загорание индикатора встроено в клавиатурный контроллер.


Разве это что-то меняет ?
Управляет индикаторами система, она посылает драйверу класса соответствующий код,
он передает его вниз, драйверу клавиатуры (i8042prt, kbdhid или другому, в зависимости
от типа подключения клавиатуры), а уже тот сам разбирается, как зажигать индикатор.
Если посадить фильтр над kbdclass, будет полный контроль над этими процессами.

N_C>И, несмотря на то, что управление индикатором извне возможно, вполне допустима ситуация, когда контроллер будет зажигать или гасить индикатор ничего не сообщая операционной системе.


В каком случае такая ситуация возможна ?
Контроллер вдруг сам зажжет индикатор, но при этом операционке ничего "не скажет" ?
Re[4]: Зажечь Scrol Lock
От: Nikolay_Ch Россия  
Дата: 09.07.13 09:48
Оценка:
Здравствуйте, okman, Вы писали:

O>Управляет индикаторами система, она посылает драйверу класса соответствующий код,

O>он передает его вниз, драйверу клавиатуры (i8042prt, kbdhid или другому, в зависимости
O>от типа подключения клавиатуры), а уже тот сам разбирается, как зажигать индикатор.
Не совсем. Может быть такая ситуация, когда контроллер меняет состояние индикатора сам, когда нажимается кнопка — не зависимо от того, есть ли система или нет.

N_C>>И, несмотря на то, что управление индикатором извне возможно, вполне допустима ситуация, когда контроллер будет зажигать или гасить индикатор ничего не сообщая операционной системе.

O>В каком случае такая ситуация возможна ?
O>Контроллер вдруг сам зажжет индикатор, но при этом операционке ничего "не скажет"?
Не вдруг, а из-за чего-то. К примеру — у меня на клавиатуре лампочки зажигаются сомопроизвольно при розжиге настольной лампы дневного света. Почему это происходит — видимо от помех, но это происходит-же. И ОС не получает уведомления от контроллера, что лампочки включились.
Re[5]: Зажечь Scrol Lock
От: okman Беларусь https://searchinform.ru/
Дата: 09.07.13 14:44
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>Не совсем. Может быть такая ситуация, когда контроллер меняет состояние индикатора сам, когда нажимается кнопка — не зависимо от того, есть ли система или нет.


Это легко проверяется. Вешаем хук на kbdclass, например (MJ Table Patch или PnP Filter — не
важно) и перехватываем запрос IOCTL_KEYBOARD_SET_INDICATORS, вырезая KEYBOARD_CAPS_LOCK_ON из
структуры KEYBOARD_INDICATOR_PARAMETERS, которая приходит во входном буфере, после чего
отправляем запрос дальше. Caps Lock после этого отрубается и ни на что не реагирует.
Проверено на USB и PS/2. Думаю, на других типах клавиатур будет такой же результат.

N_C>Не вдруг, а из-за чего-то. К примеру — у меня на клавиатуре лампочки зажигаются сомопроизвольно при розжиге настольной лампы дневного света. Почему это происходит — видимо от помех, но это происходит-же. И ОС не получает уведомления от контроллера, что лампочки включились.


С тем, что такое в принципе возможно, например из-за помех, я не спорю.
Просто это уже немного за рамками задачи, озвученной топикстартером.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.