PDA

Ver la Versión Completa : Capturar ninguna acción


muli
20-05-2004, 20:45:28
Necesito capturar mientras se esté ejecutando mi programa si existe actividad en el ordenador, es decir, como si yo fuera a lanzar el salvapantallas, que no es el caso, es para que pasado un tiempo sin trabajar en el ordenador se salga fuera del programa automáticamente.

Gracias.

Saludos

roman
20-05-2004, 20:46:45
Busca acerca del evento OnIdle del objeto TApplication.

// Saludos

muli
21-05-2004, 20:38:13
ok, he puesto lo siguiente y parece que funciona es poco chapucero, pero!

procedure TForm1.MyIdleHandler(Sender: TObject; var Done: Boolean);
begin
Timer1.Enabled:=False;
Timer1.Enabled:=True;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle:= MyIdleHandler;
end;

En el timer tengo el tiempo que quiere el usuario mantener activa la aplicación y cuando llega a cumplirse ese tiempo


procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;
ShowMessage('han pasado x tiempo sin hacer nada');
utiles.CierraTablas(Datos) // Cierro todas las fuentes de datos
Halt; // cierro el programa
end;

Pero, yo quisiera complicarlo un poco más, desearía capturar también el tiempo de inactivad en el propio windows, tal y como hace el salvapantallas.
Alguna idea?

Gracias, y Saludos

DarkByte
21-05-2004, 22:08:48
muli, intenta encerrar tu código en las etiquetas [ Delphi ] y [ / Delphi ] (pero sin espacios), y tampoco estaría de mal que identases tu código.

Para que veas que tal queda:

procedure TForm1.MyIdleHandler(Sender: TObject; var Done: Boolean);
begin
Timer1.Enabled:=False;
Timer1.Enabled:=True;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle:= MyIdleHandler;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;
ShowMessage('han pasado x tiempo sin hacer nada');
utiles.CierraTablas(Datos) // Cierro todas las fuentes de datos
Halt; // cierro el programa
end;

DarkByte
21-05-2004, 22:09:24
Lo he identado a mano, a si que se van a ver errores de espacio seguro.

muli
21-05-2004, 23:25:35
Me parece muy bonito, pero yo espero algo funcional no bonito, seguro que a la gente que le interesa el post le da igual si está en azul o en negrita lo que quiere es que funcione y aprender de la respuesta.

No me interpretes mal, pero me parece que existen cosas mas importantes que la belleza a la hora de contestar.

roman
21-05-2004, 23:35:50
Disculpa muli pero la recomendación de DarkByte la pude haber hecho yo o cualquier otro moderador. Te recomiendo que leas este aviso (http://www.clubdelphi.com/foros/showthread.php?t=10005) que se encuentra al principio de todos los foros. El colorear el texto y darle una correcta indentación no sólo es para que se vea bonito sino para que sea claro de leer, de manera que no nos da igual. Si deseas ayuda lo correcto es exponer claramente las dudas y ello abarca la legibilidad del código.

// Saludos

DarkByte
22-05-2004, 09:50:24
Muli, podrías tambien poner otra aplicación como salvapantallas, y que cuando se ejecutase, enviase un mensaje a tu aplicación con la cual esta se cierra. Después, la aplicación "salvapantallas" ejecutaría el verdadero salvapantallas y se cerraría...

No se, es una posiblilidad, no?

muli
22-05-2004, 12:42:06
ok, es una buena idea, puedo tener un proceso corriendo siempre en la aplicación que detecte si está el salvapantallas activado y si éste está activado cerrar la aplicación, lo que pasa es que obligo al usuario a tener un salvapantallas, y no se si estando la aplicación por ejemplo minimizada sigue corriendo el proceso.

Saludos. Gracias.

DarkByte
22-05-2004, 13:21:03
O puedes poner dicho proceso como salvapantalla, y que al activarse, cierre la aplicación y después, si el usuario quiere, ejecutar un salvapantallas.

roman
22-05-2004, 18:39:37
Vamos a ver, no sé si estoy entendiendo bien.

Aquí el problema es cómo detectar actividad en el ordenador pues la inactividad no tiene problema: si no hay actividad en el ordenador tampoco la hay en tu aplicación. Así, aún cuando el usuario tenga minimizada tu aplicación, si está trabajando en otra cosa la aplicacion no debe cerrarse. ¿Es correcto esto? Porque entonces creo que lo que requieres es un gancho del teclado y del mouse para poder detectar la actividad de éstos en todo el sistema y no sólo en tu aplicación. Si es así te recomiendo que busques acerca de hooks en la ayuda del SDK de Windows. Hay un ejemplo de un gancho del teclado en mi página en la unidad hooks.pas (http://www.clubdelphi.com/users/roman/hooks.php) aunque tal parece que dichos ganchos deben implementarse en una dll.

// Saludos