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

WinDev Discussion :

Nom d'une application en connaissant son handle


Sujet :

WinDev

  1. #1
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut Nom d'une application en connaissant son handle
    Bonjour,

    J'arrive à récupérer le handle d'une fenêtre, mais je n'arrive pas à récupérer son nom (celui qui apparait dans le gestionnaire des tâches, onglet Applications).

    Quelqu'un peut m'aider?

    Merci d'avance.
    Xavier

  2. #2
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    Salut,

    Il faut utiliser l'API GetWindowThreadProcessId:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    lpProcessID est un entier système
    handle_fen est un entier systeme = ton_handle
    API ("USER32","GetWindowThreadProcessId",handle_fen,&lpProcessID)
    La variable lpProcessID retournera le PID de l'application contenant le handle spécifié.

    Ensuite tu utilises la fonction ExeListeProcessus et tu boucles sur les process en comparant leur PID avec lpProcessID.

    A+
    Vince

  3. #3
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Ok, merci

    et concrétement, comment on boucle avec la fonction ExeListeProcessus?
    Xavier

  4. #4
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    simplement en regardant l'aide pour connaitre la valeur de retour de la fonction.

    Puis en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    POUR TOUTE CHAINE <s> DE <CHAINE> SEPAREE PAR <Séparateur>
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  5. #5
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Désolé, mais je découvre le windev, je ne suis pas habitué, et je dois corriger un truc sur une appli existante. Donc j'essaye de me débrouiller, mais je ne sais pas trop où chercher.

    Donc, est-ce que je dois m'orienter vers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    lpProcessID est un entier système
    handle_fen est un entier systeme = ton_handle
    API ("USER32","GetWindowThreadProcessId",handle_fen,&lpProcessID)
     
    ListeAppli = ExeListeProcessus(IpProcessID, exeNomCourt)
     
    POUR TOUTE CHAINE lpProcessID DE ListeAppli  SEPAREE PAR RC
    ...
    la suite je ne sais pas
    Xavier

  6. #6
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    ok, j'ai réussi.

    Le problème est que ça me renvoie le nom du processus, or ce que je veux récupérer, c'est le nom de l'application (onglet Application) dans le gestionnaire de tâche)
    Xavier

  7. #7
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    Dans ce cas, utilises:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    buf est une chaîne fixe sur 255
    API ("USER32","GetWindowTextA",ton_handle,&buf,255)
    A+
    Vince

  8. #8
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    ok, ça me renvoie le nom de la fenêtre en cours, mais le nom de la tâche est différent...

    En fait:
    nom de la fenêtre: "Saisie commercial"
    nom du processus: "Cegid.exe"
    nom de la tâche: "100 - CL-COMMERCIAL"

    je veux donc récupérer la tâche.
    Xavier

  9. #9
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    Normalement c est bien le nom de la fenêtre;
    T'as pas une copie d'écran ?

  10. #10
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    je viens de capter un truc:

    la tâche "100 - CL-COMMERCIAL" correspond à la fenêtre principale;
    Le nom de la fenêtre: "Saisie commercial" est une fenêtre ouverte depuis la fenetre principale.

    Mais les 2 fenêtres ont le même idprocess...

    Donc ce que je veux, c'est le nom de la fenêtre principale.
    Xavier

  11. #11
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    Dans ce cas, il faut lister toutes les fenetres ouvertes et les comparer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Dans le code du projet par exemple
    lpProcessID est un entier système
    API ("USER32","GetWindowThreadProcessId",ton_handle_fenetre,&lpProcessID)
    API ("USER32","EnumWindows",&EnumWindowProc,lpProcessID)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // procedure globale
    PROCEDURE EnumWindowProc(hwnd,lParam)
    lpProcessID est un entier système
    API ("USER32","GetWindowThreadProcessId",hwnd,&lpProcessID)
    SI lpProcessID = lParam ALORS
    	buf est une chaîne fixe sur 255
    	API ("USER32","GetWindowTextA",hwnd,&buf,255)
    FIN
     
    RENVOYER Vrai
    Après a toi de voir si le 1er passage dans la condition donne bien la 1ere fenetre.

    A+
    Vince

Discussions similaires

  1. Ouvrir une Form en connaissant son nom
    Par DeveloppeurWeb dans le forum C#
    Réponses: 6
    Dernier message: 01/03/2012, 02h01
  2. Réponses: 4
    Dernier message: 30/10/2007, 21h03
  3. Fermer une fenetre en connaissant son nom dans la FAQ
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 04/09/2006, 10h41
  4. Appeler une procédure en connaissant son nom
    Par xenos dans le forum Langage
    Réponses: 19
    Dernier message: 08/05/2006, 23h41
  5. "Mettre le focus" à une application à partir de son Handle
    Par Tardiff Jean-François dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/07/2005, 08h54

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