Para cierto hilo de los Foros del ClubDelphi he preparado un sencillo ejemplo de cómo puede controlarse la inactividad del teclado y ratón en Delphi.

Se trata de registrar sendos "Hooks" (ganchos) en el teclado y ratón, de modo que se nos informe cada vez que se hace uso de uno u otro dispositivo. No hay sino añadir la unidad "UHooks.pas" a un proyecto, y estar pendiente de la variable pública "SegundosInactividad".

unit UHooks;
 
interface
 
uses
  Windows;
 
var
  HookRaton,HookTeclado: HHOOK;
  SegundosInactividad: integer;
 
implementation
 
const
  WH_KEYBOARD_LL = 13;
  WH_MOUSE_LL = 14;
 
function MouseProc(nCode: Integer;
 WParam, LParam: DWORD): HHook; stdcall;
begin
  if (nCode = HC_ACTION) then begin
    // Se hizo uso del ratón
    SegundosInactividad := 0;
  end;
  result := CallNextHookEx(HookRaton,
             nCode, WParam, LParam);
end;
 
function KeyBoardProc(nCode: Integer;
 WParam, LParam: DWORD): HHook; stdcall;
begin
  if (nCode = HC_ACTION) then begin
    // Se hizo uso del teclado
    SegundosInactividad := 0;
  end;
  result := CallNextHookEx(HookTeclado,
             nCode, WParam, LParam);
end;
 
initialization
  SegundosInactividad := 0;
 
  HookRaton := SetWindowsHookEx(WH_MOUSE_LL,
                @MouseProc, HInstance, 0);
 
  HookTeclado := SetWindowsHookEx(WH_KEYBOARD_LL,
                  @KeyBoardProc, HInstance, 0);
 
finalization
  if (HookRaton  0) then
    UnhookWindowsHookEx(HookRaton);
 
  if (HookTeclado  0) then
    UnhookWindowsHookEx(HookTeclado);
 
end.

Arriba ves la unidad "UHooks.pas", empero, podéis ver un proyecto de ejemplo completo en el hilo de los Foros del ClubDelphi que enlazo más arriba.