OldHawk

菜地一块,欢迎拍砖
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Turn on/off Caps/Num/Scroll Lock

Posted on 2007-08-20 14:22  OldHawk  阅读(599)  评论(0编辑  收藏  举报
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;