Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Inactividad (https://www.clubdelphi.com/foros/showthread.php?t=86525)

shoulder 26-08-2014 20:09:46

Inactividad
 
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?.
Código Delphi [-]
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

Código Delphi [-]
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 [quote]...[/quote] quitan todo el formato. Por otro lado te recuerdo que las etiquetas [delphi]...[/delphi] hacen automáticamente la tarea que realizaste a mano.

Saludos :)

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

shoulder 26-08-2014 20:58:18

Inactividad - Se cierra despues de 300 segundos
 
Perdon no me di cuenta.

shoulder 26-08-2014 22:16:13

Inactividad - Se cierra despues de 300 segundos
 
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

Inactividad - Se cierra despues de 300 segundos
 
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.

shoulder 27-08-2014 00:36:10

Inactividad
 
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.swissdelphicenter.ch/torr...de.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.
Cita:

Empezado por shoulder (Mensaje 480380)
...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:
Código Delphi [-]
...
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

Inactividad - Se cierra despues de 300 segundos
 
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
Cita:

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

Cita:

Empezado por shoulder (Mensaje 480421)
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

Inactividad - Se cierra despues de 300 segundos
 
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

Cita:

Empezado por shoulder (Mensaje 480423)
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

Inactividad - Se cierra despues de 300 segundos
 
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

Inactividad - Se cierra despues de 300 segundos
 
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.


La franja horaria es GMT +2. Ahora son las 20:59:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi