Turn on/off Caps/Num/Scroll Lock

type 
  TKeyType 
= (ktCapsLock, ktNumLock, ktScrollLock); 

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; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  SetLedState(ktCapsLock, True);  
// CapsLock on 
  SetLedState(ktNumLock, True);  // NumLock on 
  SetLedState(ktScrollLock, True);  // ScrollLock on 
end; 

原文地址:https://www.cnblogs.com/taobataoma/p/862694.html