Ver Mensaje Individual
  #4  
Antiguo 04-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Creo que puedo estar matando moscas a cañonazos, pero podemos usar un hook.
Código Delphi [-]
var
  // Esta es una variable global
  Hook: HHook;

function KeyboardProc(Code: Integer; WParam, LParam: DWORD): LRESULT; stdcall;
begin
  if Code = HC_ACTION then
  begin
    // Aqui comprobamos si es una pulsacion y si ya estaba pulsada antes
    if LParam and $C0000000 = $40000000 then
    begin
      // y si ya estaba pulsada con antes, ignoramos la repeticion 
      Result:= 1;
      Exit;
    end;
  end;
  Result := CallNextHookEx(Hook, Code, WParam, LParam);
end;

Para instalar y desinstalar el hook usamos las siguientes instrucciones:
Código Delphi [-]
// Para instalar. Limitamos el hook al thread actual
  Hook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, 0, GetCurrentThreadId);
// Para desinstalar
  if Hook <> 0 then UnhookWindowsHookEx(Hook);

Coloca esas dos instrucciones en el lugar adecuado, en los eventos OnCreate y OnClose, por ejemplo, o en sección intialization/finalization.
Código Delphi [-]
initialization
  Hook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, 0, GetCurrentThreadId);
finalization
  if Hook <> 0 then UnhookWindowsHookEx(Hook);
Responder Con Cita