begin process at 2010 02 10 07:17:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Delphi

 > 

Archives

 > 

J'AI BESOIN D'AIDE !!!! :O

 > 

Détecter quand un utilisateur appuie sur le bouton Power (marche\arret) du pc


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Détecter quand un utilisateur appuie sur le bouton Power (marche\arret) du pc

mercredi 21 septembre 2005 à 10:11:57 | Détecter quand un utilisateur appuie sur le bouton Power (marche\arret) du pc

Millenod

Bonjour, On me demande de développer un service, qui vise à logguer l'extinction d'un ordinateur. Mon problème provient de cette action "sous win2000, quand l'utilisateur appuie sur le bouton power (marche\arret) du pc, celui ci s'éteint dessuite. Or je n'arrive pas à logguer cette action. Voici mon code : [Code] unit Unit1; interface uses Windows , Messages , SysUtils , Classes , Controls , SvcMgr // TService ; type TSrvUpTime = class(TService) procedure ServiceCreate(Sender: TObject); procedure ServiceDestroy(Sender: TObject); procedure ServiceShutdown(Sender: TService); procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServiceStop(Sender: TService; var Stopped: Boolean); procedure ServiceContinue(Sender: TService; var Continued: Boolean); private { Déclarations privées } LogHandle : THandle; Procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION; procedure WMPowerBroadcast(var Msg: TMessage); message WM_POWERBROADCAST; public function GetServiceController: TServiceController; override; { Déclarations publiques } end; var SrvUpTime: TSrvUpTime; implementation {$R *.DFM} const DebugLog : PChar = 'C:\uptime.txt'; ServiceName : PChar = 'UpTime'; PBT_APMQUERYSUSPEND = 0000; PBT_APMQUERYSTANDBY = 0001; PBT_APMQUERYSUSPENDFAILED = 0002; PBT_APMQUERYSTANDBYFAILED = 0003; PBT_APMSUSPEND = 0004; PBT_APMSTANDBY = 0005; PBT_APMRESUMECRITICAL = 0006; PBT_APMRESUMESUSPEND = 0007; PBT_APMRESUMESTANDBY = 0008; PBTF_APMRESUMEFROMFAILURE = 00000001; PBT_APMBATTERYLOW = 0009; PBT_APMPOWERSTATUSCHANGE = $000A; PBT_APMOEMEVENT = $000B; PBT_APMRESUMEAUTOMATIC = $0012; procedure ServiceController(CtrlCode: DWord); stdcall; begin SrvUpTime.Controller(CtrlCode); end; function TSrvUpTime.GetServiceController: TServiceController; begin Result := ServiceController; end; Procedure TSrvUpTime.WMEndSession(var Msg : TWMEndSession); var strdate : string; Begin if Msg.EndSession then Begin if Self.LogHandle<>INVALID_HANDLE_VALUE then Begin strDate := DateTimeToStr(Now) + ' - Fermeture de la session'+ #13#10; FileWrite(Self.LogHandle, strdate[1], Length(strdate)); End; End; inherited; End; procedure TSrvUpTime.WMPowerBroadcast(var Msg: TMessage); var strdate : string; Begin // if (Msg.wParam = PBT_APMQUERYSUSPEND) or (Msg.wParam = PBT_APMSUSPEND) then begin strDate := DateTimeToStr(Now) + ' - SUSPEND'+ #13#10; FileWrite(Self.LogHandle, strdate[1], Length(strdate)); // End; inherited; End; procedure TSrvUpTime.ServiceCreate(Sender: TObject); begin Self.DisplayName := ServiceName; Self.LogHandle := INVALID_HANDLE_VALUE; Self.LogHandle := CreateFile(DebugLog, GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if Self.LogHandle=INVALID_HANDLE_VALUE then Begin MessageBox(0, 'Impossible de créer le Handle sur le fichier de Log', ServiceName, MB_OK or MB_ICONERROR); Exit; End; FileSeek(Self.LogHandle,0,2); end; procedure TSrvUpTime.ServiceDestroy(Sender: TObject); var strdate : string; begin if Self.LogHandle=INVALID_HANDLE_VALUE then Exit; strDate := DateTimeToStr(Now) + ' - Destruction du service'+ #13#10; FileWrite(Self.LogHandle, strdate[1], Length(strdate)); CloseHandle(Self.LogHandle); end; procedure TSrvUpTime.ServiceShutdown(Sender: TService); var strdate : string; Begin if Self.LogHandle<>INVALID_HANDLE_VALUE then Begin strDate := DateTimeToStr(Now) + ' - Shutdown du service'+ #13#10; FileWrite(Self.LogHandle, strdate[1], Length(strdate)); End; end; procedure TSrvUpTime.ServiceStart(Sender: TService; var Started: Boolean); var strDate : string; begin strDate := DateTimeToStr(Now) + ' - Démarrage'+ #13#10; FileWrite(Self.LogHandle, strdate[1], Length(strdate)); end; procedure TSrvUpTime.ServiceStop(Sender: TService; var Stopped: Boolean); var strDate : string; begin strDate := DateTimeToStr(Now) + ' - Arrêt'+ #13#10; FileWrite(Self.LogHandle, strdate[1], Length(strdate)); end; procedure TSrvUpTime.ServiceContinue(Sender: TService; var Continued: Boolean); var strDate : string; begin strDate := DateTimeToStr(Now) + ' - Reprise (sortie de pause)'+ #13#10; FileWrite(Self.LogHandle, strdate[1], Length(strdate)); end; end. [/Code] Si quelqu'un a une idée, ou des suggestions, ce serait sympa. Merci d'avance
mercredi 21 septembre 2005 à 10:20:07 | Re : Détecter quand un utilisateur appuie sur le bouton Power (marche\arret) du pc

Millenod

Je suis désolé pour la presentation :S je n'arrive pas à éditer mon post :S j'ai aussi posté mon message sur developpez.net : http://www.developpez.net/forums/viewtopic.php?t=397890 le texte est formaté correctement sur ce lien la encore navré :(


Cette discussion est classée dans : end, var, self, procedure, strdate


Répondre à ce message

Sujets en rapport avec ce message

probleme quand je creer ma procedure [ par damomospike ] bonjour a tous!voila je voulais apprendre à creer ma propre procedure, en cherchant j'ai a peut prés trouvé se qu'il falait faire mais y me manque que IdSMTPServer + Client IdSMTP = 0 Mails [ par BenXbox ] Salut à tous, J'ai un pb, j'ai créer un serveur avec le IdSMTPServer et quant j'envoie un mail avec un client mail que j'ai fait avec le IdSMTP1 ça s Problème de control dans un composant hérité de TScrollBox [ par Francky23012301 ] Salut à tous,Je suis entrain de réaliser un composant. J'ai fais des tests préalable et au moment de son élaboration voila que je suis confronté à un Problème de scintillement malgré le DoubleBuffered [ par Francky23012301 ] Salut à tous,Voila je suis entrain de développer un composant de type potentiomètre. Tout fonctionne enfin presque . Ca scintille à mort et quand je Opinion sur un composant TTreePanel [ par Francky23012301 ] Salut à tous,Ca commence à etre de notoriété internationale : Francky et le Design, ca fait deux .Alors quitte à faire un truc autant faire un truc sy Refresh trop lent dans un composant [ par Francky23012301 ] Salut la compagnieJ'ai réalisé un petit composant  : Celui fonctionne très bien sauf qu'il est terriblement lent ce qui fait que le refresh de la fich Drag & Drop de fichiers vers TShellListView [ par MAURICIO ] Bonjour à tous!!Pourquoi est-ce que j' ai toujours un problème le vendredi à part si c' est pour me gâcher le Week-end?Je voudrais seleccionner un ou Evènements d'un enfant dans l'inspecteur d'objet [ par Francky23012301 ] Salut à tous,J'ai un ptit soucis : j'ai fais un composant qui créer d'autres composants ent tant qu' enfants. Dans l'inspecteur d'objet, les propriét Rajouter un TreeNode dans un TreeView [ par Francky23012301 ] Salut à tous,Je suis entrain de réaliser un composant dont voici le code :unit BrowserEffects;interfaceuses  Windows, Messages, SysUtils, Classes, Con Création objet, [ par xpmich ] Bonjour,J'ais un petit souci lors de la création d'un objet.voici mon code de l'Unit2 :/**************************************************************


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales