



Crie um novo projeto e adicione um botão.
Crie o tupo enumerado a seguir:
1 | TKeyType = (ktCapsLock, ktNumLock, ktScrollLock); |
Abaixo o código fonte do procedimento:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | procedure SetLedState(KeyCode: TKeyType; bOn: Boolean); var KBState: TKeyboardState; Code: Byte; begin case KeyCode of ktScrollLock: Code := VK_SCROLL; ktCapsLock: Code := VK_CAPITAL; ktNumLock: Code := VK_NUMLOCK; end; GetKeyboardState(KBState); if (Win32Platform = VER_PLATFORM_WIN32_NT) then begin if Boolean(KBState[Code]) <> bOn then begin keybd_event(Code, MapVirtualKey(Code, 0), KEYEVENTF_EXTENDEDKEY, 0); keybd_event(Code, MapVirtualKey(Code, 0), KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); end; end else begin KBState[Code] := Ord(bOn); SetKeyboardState(KBState); end; end; |
Exemplos de uso
1 2 3 4 5 6 | procedure TForm1.Button1Click(Sender: TObject); begin SetLedState(ktCapsLock, False); // CapsLock on SetLedState(ktNumLock, True); // NumLock on SetLedState(ktScrollLock, False); // ScrollLock on end; |
Só tenha o cuidado de que o procedimento atualiza o status do caps, num e scroll lock,
mas as luzes do teclado não acompanham a atualização. Pelo mesmo nos testes que eu fiz.