IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Interception des messages Windows dans un service


Sujet :

Lazarus Pascal

  1. #1
    Membre régulier Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 77
    Points
    77
    Par défaut Interception des messages Windows dans un service
    Bonjour à toutes & à tous,

    Je voudrais transformer un programme de contrôle parental en service windows.
    Je butte sur un seul problème: intercepter les messages windows au sein du service, tel que Ouverture/Fermeture de session/windows.

    Les objets de base pour travailler avec les services étant TCustomDaemon, TCustomDaemonMapper et le TThread, ceux-ci n'ont me semble t-il aucune méthode d'interception des messages windows systèmes.

    Merci d'avance pour votre aide !

  2. #2
    Membre régulier Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 77
    Points
    77
    Par défaut suite...
    A force de chercher, on trouve...ou presque !

    Il semblerait que le salut se trouve dans la fonction RegisterServiceCtrlHandlerEx() mais je sèche quant à l'utiliser correctement...

    Quelqu'un sait-il comment faire ?

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 18
    Points : 53
    Points
    53
    Par défaut
    Bonjour, as-tu avancé sur ce sujet ?

    Effectivement tu as raison sur la fonction.

    Voici ce qui peut t'aider.
    Il faut d'abord trouver le Handle de ton service.
    Utilise la fonction FindWindows pour récupérer son adresse Handle;
    Après tu Créer un Enregistrement de contrôle d'événement pour ce service et tu l'associe à a ton processus.

    Voici un exemple à la grosse.
    Je n'ai pas tester le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    program test
     
    uses windows, jwawinsvc, Classes, SysUtils, FileUtil;
     
     Var
      hwindow : THandle;
      ClassName : String;
      Cname :  array[0..255] of char;
     
    function MyServiceControlHandlerEntry(dwControl,dwEventType: DWord; lpEventData,lpContext : Pointer) : DWord; StdCall;
    const
      SErrNoControlContext = 'Not handling Control message without control context: (%d %d %d).';
    begin
        If (Nil<>lpContext) then
          begin
            CallLog('MyServiceController: '+Format('ControlCode - EventType : %d - %d',[dwControl,dwEventType]));
            TDaemonController(lpContext).Controller(dwControl,dwEventType,lpEventData)
          end
        else
          Application.Log(etError,Format(SerrNoControlContext,[dwControl,dwEventType,lpEventData]));
       result:=NO_ERROR;
    end;
     
      Begin
       ClassName := 'SystemTray Main';
       StrPCopy(Cname, ClassName);
       MYDAEMON_NAME:= FindWindow(CName,nil);
       T:=RegisterServiceCtrlHandlerEx(MYDAEMON_NAME,@MyServiceControlHandlerEntry,Controller);
      end.
    Si tu souhaites créer un Service tu peux en communicant avec SVCHOST.EXE
    Soit en TProcess, soit par APIWindows, soit par Thread. (J'ai vue différente technique, mais je n'ai jamais testé)
    Ensuite pour le démarrage de ton service il faut implémenté dans le registre Windows.

    Cldit.
    Iwoks

Discussions similaires

  1. Interception des messages Windows
    Par gfarcy dans le forum C
    Réponses: 0
    Dernier message: 28/11/2011, 12h01
  2. Réponses: 2
    Dernier message: 17/02/2010, 17h27
  3. Interception des messages windows
    Par sunchai dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/08/2005, 10h31
  4. Réponses: 2
    Dernier message: 06/04/2004, 08h39
  5. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo