PDA

Ver la Versión Completa : Inactividad


shoulder
26-08-2014, 20:09:46
Hola estoy probando la funcion de Inactividad GetlastinputInfo, pero habia puesto cada 7200 segundos que cierre el programa (2 horas de inactividad), con un Timer 1000. pero no me hace caso lo probe con el caption (mas abajo el ejemplo) a los 300 segundos cierra todo sin ningun close cuando trabaja la funcion que va contando, llega ese contador a 300 y se cierra, que puede ser?.

function SecondsIdle: DWord;
var
liInfo: TLastInputInfo;
begin
liInfo.cbSize := SizeOf(TLastInputInfo) ;
GetLastInputInfo(liInfo) ;
Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := Format('System IDLE last %d seconds', [SecondsIdle]) ;
end;

Casimiro Notevi
26-08-2014, 20:40:20
Por favor, recuerda poner títulos descriptivos a tus preguntas, gracias ;)

Casimiro Notevi
26-08-2014, 20:42:04
function SecondsIdle: DWord; var liInfo: TLastInputInfo;
begin
liInfo.cbSize := SizeOf(TLastInputInfo);
GetLastInputInfo(liInfo);
Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := Format('System IDLE last %d seconds', [SecondsIdle]);
end;

ecfisa
26-08-2014, 20:46:41
Hola shoulder.

Ví que te tomaste mucho trabajo en la presentación del código, pero lamentablemente las etiquetas ... quitan todo el formato. Por otro lado te recuerdo que las etiquetas ... hacen automáticamente la tarea que realizaste a mano.

Saludos :)

Edito: (ya lo había notado Casimiro... :))

shoulder
26-08-2014, 20:58:18
Perdon no me di cuenta.

shoulder
26-08-2014, 22:16:13
Probe y exactamente a los 300 segundos se cierra aunque escriba un valor mas alto en el Timer1, la pantalla se ve mas tenue y se cierra el prg.

Casimiro Notevi
26-08-2014, 22:34:28
Qué es TLastInputInfo?

shoulder
26-08-2014, 23:02:20
Sabes que no se, la funcion la copie de Internet, decis que sea un valor predefinido a 300 segundos de maximo? . Trabajo con windows 7 y delphi 7.
Gracias.

Casimiro Notevi
26-08-2014, 23:10:58
¿Que yo sé que tú no sabes? :confused:
Lo siento mucho, amigo, pero no tenemos una bola de cristal para saber de dónde lo has copiado, qué hace, para qué sirve, ni siquiera tenemos tu código completo para intentar averiguarlo.
Me ha hecho gracia tu comentario, creo que deberías leer nuestra otra guía de estilo (http://www.clubdelphi.com/foros/showpost.php?p=112824&postcount=6).

shoulder
27-08-2014, 00:36:10
Hola la funcion GetlastInput te devuelve en milisegundos el tiempo que esta inactivo el windows sin usar teclas y mouse, de internet copie la funcion para delphi. Les paso los links.
http://www.michael-puff.de/Programmierung/Delphi/Code-Snippets/GetLastInputInfo.shtml
(http://www.michael-puff.de/Programmierung/Delphi/Code-Snippets/GetLastInputInfo.shtml)
http://www.swissdelphicenter.ch/torry/showcode.php?id=2018

http://neftali.clubdelphi.com/?tag=tips

Copio tal cual como pueden ver en los ejemplos o como escribi mas arriba, pero al llegar al segundo 300 de espera se cierra la aplicacion y no se porque independientemente de lo que escriba en el timer.

Espero haber cumplido la regla de estilos esta vez...

ecfisa
27-08-2014, 05:33:18
Hola shoulder.
...habia puesto cada 7200 segundos que cierre el programa (2 horas de inactividad), con un Timer 1000. pero no me hace caso...

Fijate si de este modo hace lo que buscas:

...
implementation

const
DOS_HORAS = 2{hr} * 3600{seg} * 1000{ms};

procedure TForm1.FormCreate(Sender: TObject);
begin
with Timer1 do
begin
Interval:= 1000{1 seg};
Enabled := True;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
LastInputInfo: TLastInputInfo;
begin
ZeroMemory(@LastInputInfo, SizeOf(LastInputInfo));
LastInputInfo.cbSize:= SizeOf(TLastInputInfo);
Win32Check(GetLastInputInfo(LastInputInfo));
if GetTickCount - LastInputInfo.dwTime >= DOS_HORAS then
begin
Timer1.Enabled:= False;
MessageBox(0,'La aplicación estuvo 2 horas inactiva y se cerrará', '', MB_OK);
Application.Terminate;
end;
end;


Saludos :)

shoulder
27-08-2014, 16:02:55
Gracias lo probe pero me pasa los mismo a los 300 segundos se cierra el prg, no se que mas revisar.

Es decir nunca pasa por
if GetTickCount - LastInputInfo.dwTime >= DOS_HORAS then
begin
Timer1.Enabled:= False;
MessageBox(0,'La aplicación estuvo 2 horas inactiva y se cerrará', '', MB_OK);
Application.Terminate;
end;

Cuando el valor interno de inactividad de Windows llega a 300 segundos me cierra el programa si uso este tipo de funciones.

Casimiro Notevi
27-08-2014, 16:29:06
Gracias lo probe pero me pasa los mismo a los 300 segundos se cierra el prg, no se que mas revisar.
Cuando el valor interno de inactividad de Windows llega a 300 segundos me cierra el programa si uso este tipo de funciones.
¿Y cómo lo sabes si no puedes pulsar ninguna tecla ni mover ratón?
De todas formas, si no pones todo el código fuente para que lo veamos, por si acaso tienes otra cosa en otro sitio.

shoulder
27-08-2014, 16:47:17
Hola, me doy cuenta porque se me cerraba siempre a los 5 minutos, entonces lo que hice con un edit me refrescaba los segundos que iban pasando de inactividad y a los 300 se cierra el prg.
El codigo exactamente que use, el que me paso ecfisa mas arriba, no cambie nada, probe antes con los otros codigos que pase los links en los post anteriores y es igual. Sera un tema del Windows 7?

Casimiro Notevi
27-08-2014, 17:09:56
¿Que windows cierre tu programa?, no creo.

Casimiro Notevi
27-08-2014, 17:11:24
El codigo exactamente que use, el que me paso ecfisa mas arriba, no cambie nada

O sea, que todo tu programa es solamente el código que ha puesto ecfisa.

shoulder
27-08-2014, 17:14:16
Si como no me funciona ningun link y siempre me hace lo mismo lo probe como un nuevo programa.
Sera algo entre delphi 7 y windows 7?.

shoulder
27-08-2014, 17:42:43
Solucione el problema era un ERROR mio, probandolo solo funciono, yo tenia una ventana password que abre una prinicipal ahi tenia un timer corriendo que dicha ventana no se mantuviera abierta mayor a 300 segundos, cuando entraba a la ventana principal aunque la ventana password no se veia mas seguia corriendo ese timer.

Gracias a todos.

Casimiro Notevi
27-08-2014, 18:22:51
Por eso te comentaba que pusieras todo el código y si no tenías nada más funcionando.