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 :

handle des composants ATL


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut handle des composants ATL
    Bonsoir,

    Tous d'abord, désoler si je ne suis pas dans la bonne section.
    Voici mon soucis qui me donne des cheveux blanc à mon âge

    -J'ai une fenêtre d'une application extérieur (C++)dont je récupère son handle avec findwindows et le nom de barre de titre. (je code avec delphi 6)
    -Dans cette fenêtre, il y'as des composants dont je souhaite aussi récuperer leurs handle via le Class Name.
    -Gros soucis, les Class name, ce sont tous des composants ATL, et pour certains, il ont le même class Name.
    Je ne comprend pas (sais pas) comment récuperer les handles de ces composants ATL qui se trouve dans la FORM.
    ce sont des boutons, memo, richedit, etc...
    Une petite aide m'éviterais d'être chauve à vie, surtout à 26 ans
    merci beaucoup à l'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    je vous poste mon petit morceau de code pour plus de comphrension:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
       var
         monhandle : integer;
     
    Begin
     
      monhandle := FindWindow(Nil,'Le Titre De Ma Fenêtre'); // Me permet de récuperer le handle de la fenêtre
       Label1.Caption := IntToHex(monhandle, 8); // Me permet de vérifier le résultat
     
     
    end;
    Voilà, à l'interieure de cette fenêtre, il y'as des boutons ainsi que des "composants" qui me permet d'injecter du texte, mais je ne sais pas comment m'y prendre pour recuperer un handle précis de ces "composants".
    sachant que dans un même temps, les class sont des ATL.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0002048E -  (ATL:00B63780)
    Entre les parenthèse, c'est la class, et juste avant, le handle.
    Toutes les class de l'application externe se présente sous cette forme.
    Merci à ceux qui pourrons m'éclairer

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 763
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 763
    Points : 13 381
    Points
    13 381
    Par défaut
    Maintenant que tu as le handle de la fenêtre principale, essaye de le passer dans FindWindowEx pour rechercher ces "enfants".

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Maintenant que tu as le handle de la fenêtre principale, essaye de le passer dans FindWindowEx pour rechercher ces "enfants".
    Bonsoir,

    Merci pour cette réponse.
    En effet, j'arrive à obtenir le handle de certains composants suplémantaires, mais pas tous étrangement.
    peut-être je m'y prend mal.
    Voici mon bout de code, mais je vous prie, ne m'incendiez pas, je debute ok !

    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
    procedure TForm1.Button1Click(Sender: TObject);
       var
         monhandle : integer;
         child : integer;
         rechild : integer;
         handle : integer;
     
    Begin
     
      monhandle := FindWindow(Nil,'Titre De Ma Fenêtre');
       Label1.Caption := IntToHex(monhandle, 8);
     
         child := FindWindowEX(monhandle, 0,'ATL:00B66010', 0);
          Label2.Caption := IntTohex(child, 8);
     
           rechild :=  FindWindowEX(child, 0,'ATL:00B66010', 0);
            Label5.Caption :=  IntTohex(rechild, 8);
     
              handle :=  FindWindowEX(rechild, 0,'ATL:00B64EC8', 0);
                 Label7.Caption :=  IntTohex(handle, 8);
     
    end;
    Voilà, grâce à ce code répétitif, j'arrive à descendre et atteindre certains composants de la fenêtre, MAIS pas tous.
    Pourtant, j'ai l'impression que la classe est bien attacher à celle ci-dessus.
    Autre chose, beaucoup de class ATL porte la même reference(même nom), peut-être est-ce dû à cela qu'il ne me renvoie pas de handle lorsque je les recherche ?
    Merci beaucoup, j'ai dejà bien avancée, pourrais-je avoir plus d'information, merci.

    Réedit,

    Voilà, j'ai trouver autre chose pour parcourir les handles les un en dessous des autres en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    next :=  GetWindow(handle, GW_HWNDNEXT);
                 Label9.Caption :=  IntTohex(next, 8);
    Voilà, ça fonctionne, mais à votre avis, est-ce une bonne solution de obtenir tous les handles des composants de la fenêtre en utilisant cette methode de getwindow ?
    Ensuite, si c'est une bonne methode (merci ma logique ), ne puis-je pas par exemple sauter les handles par 2 ou par 3.
    Quelque chose comme GW_HWNDNEXT +3 , vous me suivez ?
    Merci pour vos precieux conseil.

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 763
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 763
    Points : 13 381
    Points
    13 381
    Par défaut
    Tes controls sont certainement inclus dans d'autres controls.

    Tu dois faire une procédure récursive.
    Depuis la fenêtre principale, tu énumères ses enfants qui à leur tour énumèrent leurs enfants et ainsi de suite.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    Ok, merci, celà fonctionne.
    a++ et sujet résolue

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

Discussions similaires

  1. [MFC] acces a des composants
    Par abignon dans le forum MFC
    Réponses: 7
    Dernier message: 26/03/2004, 11h58
  2. Les composants : ATL, DLL, COM, OCX, ...
    Par Pucpood dans le forum Windows
    Réponses: 3
    Dernier message: 04/07/2003, 10h03
  3. [Kylix] Trouver des composants pour Kylix 3
    Par busy999 dans le forum EDI
    Réponses: 2
    Dernier message: 17/02/2003, 14h01
  4. Réponses: 1
    Dernier message: 26/01/2003, 15h13
  5. Réponses: 1
    Dernier message: 02/01/2003, 12h45

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