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

API, COM et SDKs Delphi Discussion :

Récupérer tous les handles d'une application choisie


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Récupérer tous les handles d'une application choisie
    Bonjour à tous,

    Je liste tous les processus actifs dans une liste (de la même manière que le gestionnaire des taches).

    Ensuite, à partir du ProcessID de l'application choisie, j'aimerais récuperer tous les handles de ce processus (un handle correspond à un composant de l'application choisie, je me trompe ?), pour me permettre de sélectionner un champs texte de cette application et faire un coller.
    Je le fait de cette manière:
    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
    tabHandles: array [0..100] of integer; // Un HWND est un integer...
    procedure TfrmMain.ListerHandles(pid: Cardinal);
    var
      handles: TList;
      i: Integer;
      findWindowsStruct: TFindWindowsStruct;
    begin
      handles:= TList.Create;
      Try
        findWindowsStruct.ProcessID:= pid; // GetCurrentProcessID
        findWindowsStruct.HandleList:= handles;
        EnumWindows(@EnumWindowsProc, Integer(@findWindowsStruct));
        cbThreads.Clear;
        for i:= 0 to handles.Count - 1 do begin
          cbThreads.Items.Add('Handle: '+IntToStr(Integer(handles[i])));
          tabHandles[i] := Integer(handles[i]);
        end;
        cbThreads.ItemIndex := 0;
      Finally
        handles.Free;
      end;
    end;
    Mais quand je teste les handles reçus avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostMessage(tabHandles[cbThreads.ItemIndex]),WM_PASTE,0,0); // Simulation du coller
    Rien ne se passe.

    Par exemple, Si je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myHandle := GetTopwindow(GetforegroundWindow); // Ca marche mais que pour notePad 
    PostMessage(myHandle,WM_PASTE,0,0);
    Et que le focus est sur le notepad par exemple, handle est égal à 263014.

    Mais si j'utilise la méthode de listage pour le notepad, il ne me retourne qu'un enregistrement qui est différent de celui de la solution ci-dessus (459614).

    Comment faire ?

  2. #2
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    Déjà, l'énumération des Windows utilise une fonction par call-back... tu devrait attendre que tt les call back ai été effectuer avant de commencer ton traitement . pour ce faire, utilise un mutex ou une sémaphore au bonne endroit

    Pour les Handle, ce ne serait pas EnumChildWindows qui te permet de récupéré la liste des Windows contenue dans la fenêtre ?

    Vérifie dans le SDK Win 32

    PS; une handle et un THandle Même si c'est bien un Integer, un DWord ou un Cardinal c'est pas parce qu'il fait 32bit qu'il faut utilise n’importe quoi

  3. #3
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770

  4. #4
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour /dev/null et edam,

    Pour edam: Ton lien doit être éronné (depuis la restructuration du site) car il envoie vers un thread SOAP qui n'est pas résolu. De plus, j'ai usé le bouton rechercher depuis 1 mois et tout ce qui traite du sujet ne me fait pas avancer.

    Pour /dev/null: Ok pour le type HWND mais les fonction qui retournent des handles les retournent dans un tableau de strings... Comment transtyper ?

    De plus, qu'est ce qu'un mutex ou une sémaphore ???

    Je veux juste lister les programmes qui tournent sur mon PC dans une comboBox et lister tous les handles du programme choisi dans la première comboBox dans une deuxième... J'y suis presque mais des choses m'echappent.

    Merci d'avance.

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Il faudrait que la procédure soit récursive pour trouver TOUS les handle d'une forme.
    Je m'explique : suposons une forme avec 2 panels contenant chacun 2 edit, soit au total 1+2+4 = 7 "Windows". Les edit seront les "fils" des panels et pour les retrouver, il faut non seulement lister les composants de la forme (c.a.d les 2 panels), mais aussi lister par le même méchanisme les composants de chaque panel.

  6. #6
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour Graffito,

    Déjà que ça marche avec la première hiérarchie de composants... On verra pour la récursivité après !

  7. #7
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    salut,

    J'avais fait un prog qui te donnait tous les handles des fenêtres / contrôles avec des possibilités sympas "d'édition" mais je n'ai plus le code en tête ^^

    Par contre je te conseille très fortement de regarder l'outil Spy++ inclus dans VC++.

    J'essayerais de retrouver mon prog si tu ne trouve pas + d'infos

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour basnifo,

    Aie, je ne suis pas du tout familiarisé avec vc++.

    Par contre, si tu remets le nez sur ton prog, je suis prenneur !

  9. #9
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    Spy++ est juste un utilitaire inclus dans VC++. Il est très pratique pour espionner tes fenêtres

    Je vais tacher de trouver le code de mon prog ...

    voila une version de l'appli :
    http://pagesperso.laposte.net/holyvi...s/winx_1.3.rar

  10. #10
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Houaou !!!

    C'est super puissant ton truc, c'est génial !
    C'est exactement ce que je cherche.

    Si tu as les sources, je ne vais pas cracher dessus.

  11. #11
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    WinSight livré avec delphi
    nom de fichier WS32.exe

    @+ Phil

  12. #12
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    WinSight est clairement moins puissant et moins pratique que Spy++ (dans ma version)
    Mais il reste également intéressant

  13. #13
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    hop hop hop
    voila la dernière version que j'avais fait ...
    Fichiers attachés Fichiers attachés

  14. #14
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Extra, je te remercie !

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

Discussions similaires

  1. BDC récupérer tous les items d'une application depuis le code
    Par tigrou2405 dans le forum Développement Sharepoint
    Réponses: 1
    Dernier message: 20/01/2011, 15h37
  2. Récupérer tous les objets d'une application
    Par Chacha35 dans le forum Windows Forms
    Réponses: 25
    Dernier message: 02/11/2009, 13h14
  3. [RegEx] Récupérer tous les liens d'une page
    Par micatmidog dans le forum Langage
    Réponses: 13
    Dernier message: 03/11/2006, 01h37
  4. [RegEx] récupérer tous les liens d'une page
    Par italiasky dans le forum Langage
    Réponses: 15
    Dernier message: 08/04/2006, 18h55
  5. Réponses: 7
    Dernier message: 08/01/2005, 13h24

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