Obtener/Cambiar el estado de las teclas BloqNum, BloqDespl y ScrollLock  

Enviado Por: Q3 Team
Web : http://www.q3.nu
Email: dlib@q3.nu
Fecha: 06/02/04

Truco accedido 102 veces

 


Obtener el estado de una de esas teclas mediante GetKeyState:


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   If GetKeyState(VK_NUMLOCK)=1
     then ShowMessage('Conectada')
     else ShowMessage('Desconectada');
 end;



Códigos VK_ para este tipo de teclas:
  • VK_NUMLOCK = Estado de BloqNum
  • VK_CAPITAL = Mayúsculas
  • VK_SCROLL = Estado de BloqDespl


    Podemos obtener todo el teclado a la vez y luego mirar la que nos interese, mediante GetKeyboardState:


     procedure TForm1.Button2Click(Sender: TObject);
     var
        Teclado: TKeyboardState;
     begin
       GetKeyboardState(Teclado);
       If Teclado[VK_NUMLOCK]=1
         then ShowMessage('Conectada')
         else ShowMessage('Desconectada');
     end;
    




    Finalmente, podemos setear cualquiera de estos estados con SetKeyboardState:


     procedure TForm1.Button3Click(Sender: TObject);
     var
        Teclado: TKeyboardState;
     begin
       {Leemos estado actual del teclado}
       {Read current keyboard status}
       GetKeyboardState(Teclado);
       {Activamos mayúsculas/Set capitals}
       Teclado [VK_CAPITAL]:=1;
       {Desactivamos NumLock/Deactivate NumLock}
       Teclado [VK_NUMLOCK]:=0;
       SetKeyboardState(Teclado);
     end;
    


    NOTA: Algo ha cambiado desde que publiqué el truco. En su dia lo probé en Delphi 3 y Windows 98 y el invento funcionaba bien, no obstante, ahora en Windows 2000 o XP esto no funciona


    Nuevo método, que si va en cualquier Windows:


     procedure TForm1.Button3Click(Sender: TObject);
    
       procedure FijaTecla(VKTecla: Integer; Activar: Boolean);
       begin
         if (GetKeyState(VKTecla)=1) <> Activar then
         begin
           {Simulamos una pulsación de la tecla}
           {Simulate a key press}
           keybd_event( VKTecla,0,
                        KEYEVENTF_EXTENDEDKEY, 0);
    
           {Simulamos que soltamos la tecla}
           {Simulate key-release}
           keybd_event( VKTecla,0,
                        KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
         end;
       end;
    
     begin
       {-------- Ejemplos de llamada}
       {-------- Call examples}
    
       {Activar Bloq Num}
       {Activate Num Lock}
       FijaTecla(VK_NUMLOCK, True);
    
       {Desactivar Mayúsculas}
       {Deactivate Capital Lock}
       FijaTecla(VK_CAPITAL, False);
     end;
    


    Consiste en simular la pulsación de la tecla, para que así cambie de estado.


    Actualizado el 06/02/2004 Segundo método