Как я могу нажимать клавиши клавиатуры, когда компьютер заблокирован - PullRequest
3 голосов
/ 12 января 2011

Я хотел бы иметь возможность "нажать" клавишу Scroll Lock (из приложения), чтобы светодиодный индикатор на клавиатуре включался или выключался.

Я использовал DllImport для функции keybd_event (из user32.dll), и мое приложение работает как служба на Win XP

Работает нормально, но когда я блокирую компьютер (win + L), эта функция перестает работать.

Я пытался запустить службу как локальная служба и как администратор, но это не имело никакого значения.

есть предложения?

спасибо.

Ответы [ 3 ]

0 голосов
/ 13 января 2011

Прежде всего вам необходим глобальный хук для этого, и, поскольку вы запускаете службу Windows, вам нужно будет сделать службу интерактивной, это можно установить из панели управления службой на вкладке «Вход в систему» ​​-> «Разрешить службе взаимодействовать с рабочим столом»..

Глобальные перехваты с управляемым кодом нелегки.Вам все еще понадобится некоторый неуправляемый код для его вызова, но это может помочь вам: http://www.codeproject.com/KB/system/globalsystemhook.aspx

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

В образовательных целях, если вы хотите перехватить логин, документированным способом будет заменить gina.dll.

0 голосов
/ 22 января 2011

спасибо за помощь, ребята.

то, что я в итоге делал, заменял msgina.dll на мою собственную dll (ginastub.dll), и в ней открылся новый поток (который запускается в winlogonсессия).Мой сервис может связаться с этим потоком, используя именованный канал, и посылать ему команды, чтобы «нажать» клавишу.

это заняло некоторое время, но, похоже, работает:)

0 голосов
/ 12 января 2011

Одной из возможностей будет подписка на уведомление о том, что рабочая станция разблокирована , а затем выполнение действия в этот момент.

...