Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #17  
Antiguo 04-07-2024
buenarquero buenarquero is offline
Miembro
 
Registrado: feb 2008
Posts: 33
Poder: 0
buenarquero Va por buen camino
¡Gracias!

Cita:
Empezado por escafandra Ver Mensaje
Pongo un ejemplo con un Hook a bajo nivel del teclado que bloquea F1 si se pulsa junto con ALT


Código Delphi [-]
...........
var
  WHookKeyboard: HHOOK = 0;

implementation

{$R *.dfm}


function KeyboardHook(Code, wParam, lParam: Integer): Integer; stdcall;
var
  vkCode:    DWORD;
  AltDown:   boolean;
  CtlDown:   boolean;
  ShiftDown: boolean;
begin
  vkCode:= PDWORD(lParam)^;
  AltDown   := (GetAsyncKeyState(VK_LMENU) and $8000 <> 0) or (GetAsyncKeyState(VK_RMENU) and $8000 <> 0);
  CtlDown   := GetAsyncKeyState(VK_CONTROL) and $8000 <> 0;
  ShiftDown := GetAsyncKeyState(VK_SHIFT) and $8000 <> 0;
  if (Code = HC_ACTION and (wParam = WM_KEYDOWN) then
  begin
    if vkCode = VK_F1 then
    begin
      if AltDown then Windows.Beep(1000, 100);
      Result:= 1;
      exit;
    end;
  end;
  Result:= CallNextHookEx(WHookKeyboard, Code, wParam, lParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WHookKeyboard:= SetWindowsHookEx(13{WH_KEYBOARD_LL}, @KeyboardHook, GetModuleHandle(nil), 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnhookWindowsHookEx(WHookKeyboard);
end;


El hook tipo WH_KEYBOARD_LL es necesario para que actúe en todo el sistema y la puesta en marcha del hook debe hacerse global para que no falle:
SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardHook, GetModuleHandle(nil), 0);




Saludos.
¡Gracias por tu aportación! No tengo ni idea de como adaptar el código para capturar solo las teclas de función sin Alt o si funcionará tal cual solo con la tecla de función, pero lo probaré. Lo que me gustaría que me explicaras es lo de que el hook hay que hacerlo a nivel global. ¿Que hay que hacer para que sea a nivel global? ¿no está implícito en el código? ¿Hay que declarar la función en una parte determinada del .Pas?

Última edición por buenarquero fecha: 04-07-2024 a las 11:46:45.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Detectar pulsación de teclas Ctrl, Alt y Shift y teclas virtuales (de función,...) rrf Varios 11 09-08-2017 13:24:21
Aparece símbolo de moneda en todo el sistema Oscar Guzmán OOP 3 23-03-2015 07:07:55
Desactivar y activar sonido del sistema nandynna API de Windows 5 08-01-2009 00:12:21
como desactivar las teclas Alt o Ctrl Hitsugaya API de Windows 2 03-12-2008 20:13:41
Teclas de Función Dado de baja Varios 2 05-09-2007 15:02:07


La franja horaria es GMT +2. Ahora son las 07:42:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi