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écuperer le handle depuis le nom d'un processus


Sujet :

API, COM et SDKs Delphi

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut Récuperer le handle depuis le nom d'un processus
    Bonjour à tous,

    Je récupère la liste des processus que je met dans une ComboBox depuis cette methode:
    http://www.developpez.com/delphi/faq...isterprocessus

    Et j'aimerais récuperer le HWND du processus sélectionné dans la liste.
    J'ai essayé ça (en choisissant le processus: notePad.exe) mais le handle est nul.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        myHandle := FindWindow(pchar(cbMain.Items.Strings[cbMain.ItemIndex]),nil);
        if myHandle = 0 then mmoMain.Lines.Add('Pas de bloc notes lancé !');
    Comment faire ?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 700
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 700
    Par défaut Re: Récuperer le handle depuis le nom d'un processus
    Citation Envoyé par dacid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        myHandle := FindWindow(pchar(cbMain.Items.Strings[cbMain.ItemIndex]),nil);
        if myHandle = 0 then mmoMain.Lines.Add('Pas de bloc notes lancé !');
    Avec FindWindows, tu récupère le handle d'une fenêtre (pas d'un processus).

    Regarde plutôt OpenProcess :
    Citation Envoyé par Aide Delphi
    The OpenProcess function returns a handle of an existing process object.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour Lung,

    Merci mais je me suis orienté vers une autre solution:
    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 HWND;
    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(IntToStr(Integer(handles[i])));
          tabHandles[i] := hwnd(handles[i]); // NE MARCHE PAS (évidement)
        end;
        cbThreads.ItemIndex := 0;
      Finally
        handles.Free;
      end;
    end;
    En fait, c'est une procédure qui liste les handle du processus en paramètre.
    C'est cool, ça marche mais il me les rends au format texte, or moi j'aimerais les mettre dans un tableau de hwnd.
    Je mettrais directement cette valeur dans mon PostMessage() ensuite.

    Commment transtyper du string en HWND ?
    En fait, quel est le vrai format d'un HWND ?

  4. #4
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut
    salut,
    Citation Envoyé par dacid
    Commment transtyper du string en HWND ?
    En fait, quel est le vrai format d'un HWND ?
    à part erreur de ma part, le HWND n'est autre chose qu'une variable de type Cardinal, ou Integer, tout comme le THandle, le HICON et autres. en fait dans l'api windows microsoft a préféré nommer ainsi ses types de variables pour plus de clarté.
    pour transtyper du string en HWND, il te suffit donc d'utiliser la fonction StrToInt

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour evarisnea,

    En fait, il y a un truc qui m'échappe... Si je fait:
    myHandle := GetTopwindow(GetforegroundWindow); // Ca marche mais que pour notePad
    Et que le focus est sur le notepad par exemple, handle est égal à 263014.

    Mais si j'utilise la méthode de listage des handles de la FAQ, il ne me retourne qu'un enregistrement qui est différent de celui de la première solution (459614).

    De plus, j'ai essayé:
    myHandle := OpenProcess(PROCESS_ALL_ACCESS,BOOL(0),tabProcessus[cbProcessus.ItemIndex]); // Ne marche pas
    Mais à chaque boucle, il me renvoie un myHandle différent ??? (de surcroit qui n'a rien à voir avec les deux premières méthodes)

    Soit j'ai mal assimilé le fonctionnement des processus., soit il y a une erreur...
    Mon désir est simple... Je veux récupérer tous les handles d'une application.

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Je vais créer un nouveau post car le sujet est vieux et le titre peu pertinent.

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/03/2006, 14h35
  2. comment récupere des element par le nom de la balise?
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/08/2005, 19h59
  3. Comment récuperer le handle d'un TPaintBox ?
    Par nicolos dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/11/2004, 08h58
  4. Comment récuperer le Handle du module courant ?
    Par gord's dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 28/06/2004, 15h26
  5. Comment récuperer une date depuis une chaine?
    Par shopoto dans le forum ASP
    Réponses: 4
    Dernier message: 12/05/2004, 16h17

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