RE:Detectar el uso del raton y teclado
Te adjunto una posible solución que tenemos que agradecer a mi compañero Jose Carlos Corpás:
En primer lugar vamos a usar un TTimer porque es la forma más sencilla de cronometrar tiempos.
Por otro lado, para detectar la inactividad del equipo, vamos a recoger los mensajes que indican actividad por parte del usuario, esto es, los mensajes WM_MOUSEMOVE y WM_KEYDOWN y cada vez que esto ocurra inicializamos el contador del Timer:
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.Message = WM_KEYDOWN) or (Msg.Message = WM_MOUSEMOVE) then
begin
Timer1.Enabled := False;
Timer1.Enabled := True;
end;
end;
Por último sólo hay que chequear estos mensajes en el evento OnMessage de nuestra aplicación y poner lo que queramos en el evento OnTimer de nuestro componente.
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppMessage;
end;
En el ejemplo se ha usado el evento OnCreate del Formulario para asignar el manejador de mensajes de la aplicación.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ShowMessageFmt('Han pasado %d segundos de inactividad', [Timer1.Interval div 1000])
end;
NOTA.- En este ejemplo simplemente ponemos un mensaje en pantalla pero podríamos lanzar un salvapantallas o cualquier otro proceso.