Como faço para verificar se meu sistema está inoperante??

Delphi

23/12/2004

Boa noite, precisava saber como posso fazer para verificar se meu sistema está inoperante, como se fosse a proteção de tela do windows, mesmo meu sistema estando em segundo plano ?


Ltres

Ltres

Curtidas 0

Respostas

Nerdex

Nerdex

23/12/2004

Se o seu sistema ficar em 2º plano, ele ainda fica operante... Ok...
Mas, de uma forma, creio que o evento OnMouseMove é uma saída para detectar se o usuário está ´antenado´ para com a aplicação...


GOSTEI 0
Ltres

Ltres

23/12/2004

a parte do mousemove eu já usei obrigado pela dica, mas meu sistema tem uma grande facilidade em teclas de atalho, muitos usuarios nem aomenos usam mouse, precisaria também verificar em todos os forms se alguma tecla foi precionada !!


GOSTEI 0
Titanius

Titanius

23/12/2004

Amigo,

Defina um const
 MaxTimeOut = 10; // tempo para bloquear a estação, em minutos.


Agora


procedure TForm1.PegarMensagens(var Msg: TMsg; var Pegou: Boolean);
begin
 case Msg.Message of
  WM_LBUTTONDBLCLK, WM_MBUTTONDBLCLK, WM_RBUTTONDBLCLK,
   WM_LBUTTONDOWN, WM_MBUTTONDOWN, WM_RBUTTONDOWN,
   WM_NCLBUTTONDOWN, WM_NCMBUTTONDOWN, WM_NCRBUTTONDOWN,
   WM_DEADCHAR, WM_KEYDOWN, WM_SYSCHAR, WM_SYSKEYDOWN,
   WM_SYSDEADCHAR:
   begin
    TimeOut := 0;
    IdleTmr.Enabled := not IdleTmr.Enabled;
    IdleTmr.Enabled := not IdleTmr.Enabled;
   end;
 end;
end;


depois um Timer, este verifica se o Tempo Idle é igual ao MaxTimeOut na const, se for, executa a opção!

procedure TForm1.IdleTmrTimer(Sender: TObject);
begin
 Inc(TimeOut);
 if (TimeOut = MaxTimeOut) then
 begin
//Zera os minutos inativos, se for igual ao número de minutos desejados
  TimeOut := 0;
  Bloquearestaodetrabalho1Click(Sender);
  IdleTmr.Enabled := not IdleTmr.Enabled;
 end;
end;





Espero ter ajudado!

[]s


GOSTEI 0
Ltres

Ltres

23/12/2004

Só uma coisa q naum entendi. Qaundo ele executa a procedure PegarMensagens? Ali tem so a implementation dela


GOSTEI 0
Titanius

Titanius

23/12/2004

foi mal mesmo cara, esqueci desse ´detalhe´

procedure TForm1.FormCreate(Sender: TObject);
begin
 TimeOut := 0; // zera o contador do idle....
 
 Application.OnMessage := PegarMensagens
end;


:D

[]s


GOSTEI 0
Ltres

Ltres

23/12/2004

Blz funcionou perfeitamente! Valeu 8)


GOSTEI 0
Dpinho

Dpinho

23/12/2004

estou tentando utilizar esta função porem esta dando idetificação não declarada nas propriedades:
WM_LBUTTONDBLCLK, WM_MBUTTONDBLCLK, WM_RBUTTONDBLCLK,
WM_LBUTTONDOWN, WM_MBUTTONDOWN, WM_RBUTTONDOWN,
WM_NCLBUTTONDOWN, WM_NCMBUTTONDOWN, WM_NCRBUTTONDOWN,
WM_DEADCHAR, WM_KEYDOWN, WM_SYSCHAR, WM_SYSKEYDOWN,
WM_SYSDEADCHAR:

utilizo Delphi 7
ajude por favor


GOSTEI 0
Ltres

Ltres

23/12/2004

Declare a unit Messages na uses de sua unit


GOSTEI 0
Dpinho

Dpinho

23/12/2004

nterface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
IdleTmr: TTimer;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure PegarMensagens(var Msg: TMsg; var Pegou: Boolean);
procedure IdleTmrTimer(Sender: TObject);
private
TimeOut :Integer;

{ Private declarations }
public
{ Public declarations }
end;
Const
MaxTimeOut = 1; // tempo para bloquear a estação, em minutos.
var
Form1: TForm1;

implementation


{$R *.dfm}


procedure TForm1.PegarMensagens(var Msg: TMsg; var Pegou: Boolean);

begin
case Msg.Message of
WM_LBUTTONDBLCLK, WM_MBUTTONDBLCLK, WM_RBUTTONDBLCLK,
WM_LBUTTONDOWN, WM_MBUTTONDOWN, WM_RBUTTONDOWN,
WM_NCLBUTTONDOWN, WM_NCMBUTTONDOWN, WM_NCRBUTTONDOWN,
WM_DEADCHAR, WM_KEYDOWN, WM_SYSCHAR, WM_SYSKEYDOWN,
WM_SYSDEADCHAR:
begin
TimeOut := 0;
IdleTmr.Enabled := not IdleTmr.Enabled;
IdleTmr.Enabled := not IdleTmr.Enabled;
end;
end;
end;

procedure TForm1.IdleTmrTimer(Sender: TObject);
begin
Inc(TimeOut);
if (TimeOut = MaxTimeOut) then
begin //Zera os minutos inativos, se for igual ao número de minutos desejados
TimeOut := 0;
ShowMessage(´mostrou o mouse´);
//Bloquearestaodetrabalho1Click(Sender);
IdleTmr.Enabled := not IdleTmr.Enabled;
end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
TimeOut := 0; // zera o contador do idle....
Application.OnMessage := PegarMensagens
end;

end.

Estou tentando resolver este codigo, o normal seria depois de 1 minuto sem utilizar o mouse ou teclado retornase o messagebox, ma não acontece nada alguem pode ajudar?


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

23/12/2004

garanta que o Interval do timer vai serr = 1000


GOSTEI 0
Dpinho

Dpinho

23/12/2004

Sim o intervalo é de 1000


GOSTEI 0
POSTAR