Question How to control caps lock key? Answer A: 
In Windows enviroment, you can look at the keyboard lights values, but you can't 
set it, because Windows intercept your peek in the memory and blocks it (I tryed 
under Windows 95, maybe under Windows 3.11 it works). However, you should be able 
to look at the status. 
Try to put this simple code in a function: 
const 
   SCROLLLOCK = 1; 
   NUMLOCK    = 2; 
   CAPSLOCK   = 4; 
var 
   Status:  Byte; 
   PntK:    ^Byte; 
begin 
     PntK := Ptr($40, $97);        {directly point in memory} 
     Status := Byte(PntK^);        {read the status} 
     if (NUMLOCK and Status) = NUMLOCK then    {if NUM LOCK is on} 
         Status := Status and (255 - NUMLOCK)    {turn it off} 
     else 
         Status := Status or 2;            {turn it on} 
     Pntk^ := Status;                {poke in memory (don't works)} 
end; A: I use this procedures to turn on the caps lock if it isn't already on when 
the user enters my DBloockup combo.  This gets rid of the nasty problem 
of case-sensitive indexes. 
procedure TMainForm.StudentLookupEnter(Sender: TObject); 
Var Level : Integer; 
    KeyState : TKeyBoardState; 
begin 
  {check if caps-lock is on - if not turn it on} 
  Level := GetKeyState(VK_CAPITAL); 
  GetKeyboardState(KeyState); 
  CapsLockStatus := KeyState; 
  If Level = 0 then 
    begin 
      KeyState[VK_CAPITAL] := 1; 
      setKeyboardState(KeyState); 
    end; 
end; Question I need my application to be able to "stuff keystrokes" into the keyboard 
buffer. 
My application needs to be able to do this while minimzed and the 
keystrokes should effect the active Window and appear "typed". Answer 
A: 
{this proc interrogates the numlock key and sets the state} 
{according to the value of bOn} 
procedure TIndexForm.ToggleNumLockKey(bOn: Boolean); 
var 
  KeyState : TKeyBoardState; 
begin 
  GetKeyboardState( KeyState ); 
  if bOn then KeyState[VK_NUMLOCK] := 1 
     else KeyState[VK_NUMLOCK] := 0; 
  SetKeyboardState( KeyState ); 
end;