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

Windows Discussion :

Comment retrouver le handle d'une application console?


Sujet :

Windows

  1. #1
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut Comment retrouver le handle d'une application console?
    Salut,
    la fonction GetConsoleWindow n'étant pas implémentée avant Xp , j'essaie de récupérer ce handle de fenêtre en passant par le processus pére.

    1- Comment puis-je retrouver le processus pére en partant de l'information retrouvé par l'appel de GetCurrentThreadID ?

    2- puis je retrouver le handle de fenêtre d'une application console via EnumThreadWindows ?

    (J'utilise Delphi)

    Merci

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    désolé je ne fais pas de delphi... mais j'ai ca à vous proposer en C pour retrouver le PID

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SetConsoleTitle(szNewTitle);
    SleepEx(40, 0); // Attente de l'update (sinon parfois ca coince)
    hConsoleWnd = FindWindow(NULL, szNewTitle);
    ThreadId = GetWindowThreadProcessId(hConsoleWnd, &pid);
    GetWindowThreadProcessId retourne à la fois le ProcessID et le ThreadID.

    sinon à partir du ThreadID :

    OpenProcess (qui ne nécessite que le ThreadID et qui retourne un handle sur le process)

    ensuite: GetProcessID (obtention du PID)

    Pourquoi ne pas faire un simple GetCurrentProcessID dans votre code ?

    Cordialement, Neitsa.

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    1/ http://support.microsoft.com/kb/124103/en-us
    2/ Je ne pense pas, car la console, sous NT du moins, n'est pas créée par un thread à toi mais par csrss, un processus système.

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Merci,
    Citation Envoyé par Neitsa
    Pourquoi ne pas faire un simple GetCurrentProcessID dans votre code ?
    J'ai fait qq essais sans résultat, je vais creuser ça...

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Cela fonctionne
    Une derniére chose, j'aimerais pouvoir générer un nom de titre unique et de maniére aléatoire, je pensais utiliser la routine de génération de nom de fichier temporaire de Windows (GetTempFileName), existe-t-il une autre routine qu serait susceptible de faire la même chose ?

    L'objectif étant de créer une commande console permettant de cacher ou d'afficher la console
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @echo off
     rem Modification de password
    HideConsole OFF 
    
     Changepassword xxx
     Cls
    
    HideConsole ON
    
    Echo Modification effectuée.
    pause

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Ben dans l'exemple c'est ce qu'il fait : le nom est construit à partir du PID et de GetTickCount(), ça me parraît assez fiable...

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Merci

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/03/2008, 11h20
  2. Réponses: 4
    Dernier message: 30/10/2007, 21h03
  3. Réponses: 8
    Dernier message: 20/06/2007, 13h19
  4. Réponses: 1
    Dernier message: 05/10/2006, 17h21

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