Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-11-2004
oworty oworty is offline
Registrado
 
Registrado: nov 2004
Posts: 9
Poder: 0
oworty Va por buen camino
Detectar paso a inactividad

Hola a todos.

Estoy interesado en realizar una aplicacion que este residente en memoria y que lance un proceso justo cuando el ordenador lance el protector de pantalla, o se ponga en modo suspension o en modo hibernación, pero no he conseguido averiar que evento hay que capturar para lanzar este proceso. Si en el caso de que no existiese tal evento, saber si existe alguna función de la API windows que me diga si esta el protector de pantalla esta en marcha o el modo de suspensión o el de hibernacion.
Me seria de gran utilidad si alguien me pudiese orientarme un poco, puesto que soy un pollo en el mundo de la api de windows.

Ante todo muchas gracias a todos!
Responder Con Cita
  #2  
Antiguo 05-11-2004
bumiga bumiga is offline
Miembro
 
Registrado: sep 2004
Posts: 28
Poder: 0
bumiga Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 07-11-2004
oworty oworty is offline
Registrado
 
Registrado: nov 2004
Posts: 9
Poder: 0
oworty Va por buen camino
Ante todo muchas gracias por la información que me has dado, me ha sido de gran ayuda. Pero he encontrado un pequeño problema, verás funciona perfectamente siempre y cuando este el programa en primer plano, pero si el programa no esta en primer plano(esta minimizado) el programa no captura el evento, carga el protector de pantalla y no se ejecuta el proceso que yo he programado.

Gracias de nuevo!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:33:47.


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
Copyright 1996-2007 Club Delphi