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

 Delphi Discussion :

Nom exact Windows event


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Nom exact Windows event
    Bonjour a tous ,

    je dois avec un prog en delphi réagir à des event lancés par un autre programme à travers windows...

    Le probleme est que je n'arrive pas a trouver de documents car je ne connais pas le nom precis de la maniere de faire...

    Je sais juste qu'apparement on passe par windows API,

    Je sais que c'est pas clair, donc si vous pouviez m'aider a mettre un nom la dessus ca m'arrangerait....

    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    "It's more fun to compute !"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Merci beacoup pour l'indication,

    J'ai lu en plusieurs endroit des pages sur la notion de "hook" est-ce la meme chose ?

    Ces fonctions sont directement utilisables dans delphi ?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    J'ai lu en plusieurs endroit des pages sur la notion de "hook" est-ce la meme chose ?
    Non. Un évènement est un objet de synchronisation local ou interprocessus, alors qu'un hook est un moyen de capturer des appels ou des messages à l'aide de fonctions filtres. Ca n'a donc rien à voir.

    Ces fonctions sont directement utilisables dans delphi ?
    Oui, en incluant Windows.pas. Il est aussi possible d'utiliser des objets Delphi qui encapsulent ces appels en incluant SyncObjs.pas ( sur TEvent, TMutex, etc.).
    "It's more fun to compute !"

  5. #5
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    Et tu ne chercherais pas à faire ça par hasard ?
    En effet j'ai pas tout saisi...

    http://jfdeterme.developpez.com/tuto...hi/messagesys/

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Effectivement c'est bien ca Reisubar,merci !

    Par contre des que j'utilise un create sur unTEvent, j'ai une exception du genre : "Access violation at adress XXXX in module 'monPROJ.exe'. Write adresss 00000004"

    Je l'utilise de la maniere suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
       EventAttributes: PSecurityAttributes;
    begin
    mEvent.Create(EventAttributes,false,false,'MOI_Incoming_Data');
    sachant que les deux booleens ne doivent pas avoir d'incidence vu que ne fait que prendre la reference d'un event existant.
    Cela pourrait-il venir de EventAttributes ?

    remixTech : ce n'est pas de messages mais d'event dont je parle. Merci quand meme

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    EventAttributes doit être initialisé. Comme c'est un pointeur, et que ta variable est initialisée sur la pile, elle désigne une adresse invalide : son exploitation par le code de TEvent lève une erreur. Donc sois tu n'en as pas besoin et tu l'assignes à nil (voire tu utilises le constructeur sans ce paramètre s'il existe, je ne sais plus si Borland a daigné améliorer cette unité depuis 10 ans), ou tu l'exploites intentionnellement. Par exemple, le code suivant génère un attribut de sécurité qui rend l'objet global à tout le système :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var
      LSecurityAttributes: TSecurityAttributes;
      PSecurityDescriptor: PSECURITY_DESCRIPTOR;
    begin
      PSecurityDescriptor := AllocMem(SECURITY_DESCRIPTOR_MIN_LENGTH);
      InitializeSecurityDescriptor(PSecurityDescriptor,
        SECURITY_DESCRIPTOR_REVISION);
      SetSecurityDescriptorDacl(PSecurityDescriptor, True, nil, False);
      LSecurityAttributes.nLength := SizeOf(LSecurityAttributes);
      LSecurityAttributes.lpSecurityDescriptor := PSecurityDescriptor;
      LSecurityAttributes.bInheritHandle := True;
      mEvent.Create(@LSecurityAttributes,false,false,'MOI_Incoming_Data');  
      ...
      FreeMem(PSecurityDescriptor);
    "It's more fun to compute !"

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Bon en fait c'est tou simplement autre chose :

    ce n,est pas mEvent.Create qu'il faut utiliser mais :

    CreateEvent()......la, ca ne plante plus que l'on mette nil ou qq chose d'instancie, plus aucun probleme d'ecriture....

    mais pour l'instant je n'arrive pas a faire mon programme vu que quand je fait un waitforsingleobject il va jusqu'a la fin du timeout, il n'a pas l'air de 'voir' l'event (SI l'event est bien lance)....

    Est-ce normal que delphi m'indique que la valeur retourne est un cardinal alors que le MSDN me dit que c'est un HANDLE ?

    Ils indiquent d'utiliser la fonction GetError juste apres pour voir si on a bien l'event en question.... mais ils donnent juste la valeur ERROR_ALREADY_EXISTS,
    comment je peux savoir quelle valeur c'est exactement puisque ca n'a pas l'air d'etre dans le MSDN ?

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    CreateEvent()......la, ca ne plante plus que l'on mette nil ou qq chose d'instancie, plus aucun probleme d'ecriture....
    Non. CreateEvent est similaire à TEvent.Create, s'il est manipulé correctement.

    mais pour l'instant je n'arrive pas a faire mon programme vu que quand je fait un waitforsingleobject il va jusqu'a la fin du timeout, il n'a pas l'air de 'voir' l'event (SI l'event est bien lance)....
    Un évènement doit-être signalé pour "casser" WaitForSingleObjet. Est-ce le cas ?

    Est-ce normal que delphi m'indique que la valeur retourne est un cardinal alors que le MSDN me dit que c'est un HANDLE ?
    Oui, les deux correspondent à un type 32 bits non signé.

    Ils indiquent d'utiliser la fonction GetError juste apres pour voir si on a bien l'event en question
    Après quel appel d'API ?
    "It's more fun to compute !"

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Un évènement doit-être signalé pour "casser" WaitForSingleObjet. Est-ce le cas ?
    J'avais bien mis un SI dans la phrase et apres quelques ajustements (Reset manuel) ca marche !

    GetError ils indiquent du l'utiliser apres un SetEvent ou PulseEvent...

    Merci beacoup Reisubar pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/03/2006, 09h49
  2. Connexion a une base SQL dont le nom " Local (Windows N
    Par Mahmoud RAMMAL dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/02/2006, 09h45
  3. [Nom domaine] windows XP pro
    Par hutchuck dans le forum Windows XP
    Réponses: 13
    Dernier message: 28/11/2005, 17h08
  4. Pb nom session windows et delphi 2005?
    Par korntex5 dans le forum Langage
    Réponses: 1
    Dernier message: 21/11/2005, 16h43
  5. window.event sur netscape
    Par edon47 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2005, 02h57

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