Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Détecter quand un utilisateur appuie sur le bouton Power (marche\arret) du pc [ Archives / J'AI BESOIN D'AIDE !!!! :O ] (Millenod)

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é 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...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.