Я пытаюсь переключить световые индикаторы на клавиатуре на Num Lock, Caps Lock и Scroll Lock.(Я просто хочу, чтобы они выключали их автоматически в ночное время.) Это тривиально, используя AutoHotkey или AutoIt.Тем не менее, сценарий не работает, если рабочая станция заблокирована.
Во время исследования этого будет некоторый вызов DLL, я наткнулся на SetKeyboardState
в user32.dll
.К сожалению, согласно документации Центра разработки для Windows, невозможно установить состояние клавиатуры этих трех клавиш (и каждая из них упоминается по имени), используя SetKeyboardState
.
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setkeyboardstate
Другой поток сказал просто использовать ControlSend
в AutoIt.Это, как правило, очень надежно, даже когда нет активного сеанса графического интерфейса или когда клавиатура / мышь используются в интерактивном режиме.
Прекрасно работает следующее:
ControlSend("", "", "", "{NUMLOCK off}")
... но толькокогда есть активный сеанс GUI.Это не действует, когда экран заблокирован.
Я знаю, что это специальные клавиши: вместо того, чтобы управлять состоянием ввода программного потока, они являются частью физического состояния клавиатуры и управляют глобальным вводом длявся система.
Есть ли варианты вообще?На каком языке?