Espero que el siguiente codigo te sirva, no es mio, lo baje de Internet, pero no me acuerdo de donde y por eso no puedo colocar los creditos a la(s) persona(s) que lo publicaron, mis disculpas
Código:
Unit DetecIdleMain
interface
uses
windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls
type
TDetectIdleForm = Class(TForm)
IdleTimer: TTimer;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure ResetInactive(var Msg: TMsg; var Handled: Boolean);
procedure IdleTimerTimer(Sender: TObject);
private
fLastActive: TDateTime;
systemInactive: Boolean;
public
end;
var
DetecIdleForm: TDetecIdleForm;
implementation
{$R *.dfm}
procedure TDetectIdleForm.IdleTimerTimer(Sender: TObject);
begin
if ((fLastActive + EncodeTime(0,0,30,0)) < Now) then
begin
systemInactive := False;
IdleTimer.Enable := False;
end;
end;
procedure TDetectIdleForm.FormCreate(Sender: TObject);
begin
Application.OnMessage := ResetInactive;
end;
procedure TDetectIdleForm.ResetInactive(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.message = WM_SYSCOMMAND) then
if (msg.wParam = SC_SCREENSAVE) then
if (not systemInactive) then
begin
//Do something... User is inactive
StatusBar1.Panels[0].text := TimeToStr(Now);
IdelTimer.Enable := True;
end;
SystemInactive := True;
fLastActive := Now;
end;
end.