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

C++ Discussion :

GetWindowText [API Win32]


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 37
    Par défaut GetWindowText [API Win32]
    Bonsoir,

    j'ai un soucis avec l'utilisation de GetWindowText avec l'api Win32, sa ne m'affiche pas le titre.

    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
            TCHAR NomProcess[1024];
            TCHAR NomFenetre[1024];
            DWORD lpdwProcessId;
            HANDLE PID;
     
            HWND Handle = GetForegroundWindow(); // on recupere le handle de la fenetre qui a le focus
     
            NomProcess[0]= '\n';//on met en premiere caractere un retour chariot pour qu'il y est bien retour a la ligne avaant d'ecrire la nouvelle ligne
            NomFenetre[0]= '\0';//pour s'assurer de ne pas ecrire autre chose..
     
            GetWindowThreadProcessId(Handle, &lpdwProcessId);//on recupere l'id du thread d'apres son handle
            PID = OpenProcess(PROCESS_ALL_ACCESS,false, lpdwProcessId);//on recupere le PID du processus auquel apartient le thread ci-dessus
     
            if(PID!=NULL)
            {
               GetModuleBaseName(PID, NULL, NomProcess, sizeof(NomProcess));//on recupere le nom du processus d'apres son PID
            }
     
            GetWindowText(Handle, NomFenetre, sizeof(NomFenetre));//ici on recupere le nom de la fenetre
            qDebug() << NomFenetre;

    Merci d'avance.

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Salut,

    as tu testé la valeur de retour de GetWindowText() ?? et si elle te répond 0, as tu appelé GetLastError() ?
    Notamment, GetWindowText() ne permet pas de récupérer le texte d'un contrôle d'une autre application.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 37
    Par défaut
    GetWindowText me renvoi parfaitement la taille du titre pour chaque fenêtre, mais quand j'affiche NomFenetre j'obtiens par exemple 0X28ccf6

  4. #4
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Ah d'accord. Je ne connais pas qDebug, mais visiblement ça affiche l'adresse de ton tableau plutôt que son contenu.
    Donc, si tu faisais plutôt un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::string str(NomFenetre);
    qDebug << str;
    à mon avis ça marcherait mieux, en espérant que qDebug supporte une chaine de caractères standard.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 37
    Par défaut
    string ne prend pas en paramétre de TCHAR

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    et avec un std::string str = NomFenetre; ou encore std::string str = NomFenetre.toString(); (ou une variante, regarde la spec)?

  7. #7
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    std::basic_string<TCHAR> prendra un TCHAR et aura les mêmes fonctions qu'un std::string (qui n'est qu'un typedef sur std::basic_string<char>)

    Citation Envoyé par leternel Voir le message
    std::string str = NomFenetre.toString(); (ou une variante, regarde la spec)?
    ne marchera pas car NomFenetre est un tableau de TCHAR...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 37
    Par défaut
    Escusez moi mais j'ai du mal,

    comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qDebug() << std::basic_string(NomFenetre);

  9. #9
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef std::basic_string<TCHAR> tstring;
    tstring strNomFenetre( NomFenetre );
    qDebug() << strNomFenetre;
    Pour la petite histoire, std::string n'accepte dans ton cas pas un TCHAR car tu compiles certainement en UNICODE. Si tu veux te passer de ce genre de problèmes, tu peux compiler en MBCS (dans les propriétés de ton projet, onglet général)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 37
    Par défaut
    Il m'est impossible d'afficher ceci dans un qDebug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main.cpp:46: erreur : no match for 'operator<<' in 'qDebug()() << strNomFenetre'

  11. #11
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    c'est parce qu'il n'y a pas de parenthèses dans qDebug << str;

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 37
    Par défaut
    Il est désormais impossible d'afficher un tstring avec qDebug..

  13. #13
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Quelles sont les fonctions disponibles dans qDebug ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 37

  15. #15
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Pour répondre bêtement à ta question, je dirais que tu dois construire un objet QString à partir de ton NomFenetre pour le passer ensuite à qDebug.
    Maintenant je me pose la question de la validité de ton code d'autant que comme dit phi1981, GetWindowText ne te permettra probablement pas de récupérer le texte d'une fenêtre d'un autre application (cf. MSDN).
    Donc au final, que cherches-tu à faire ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 37
    Par défaut
    Je peut seulement récupérer le nom de l'application qui as le focus ? ou juste l'application ?

Discussions similaires

  1. [Débutant]Quelques questions de principe sur l'API win32
    Par silver_dragoon dans le forum Windows
    Réponses: 4
    Dernier message: 19/03/2004, 18h38
  2. [API WIN32] Pb avec SHGetSpecialFolderLocation
    Par Invité dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 21h19
  3. [API Win32] WriteFile()
    Par tut dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2004, 16h13
  4. API Win32
    Par benoit70 dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 19h11
  5. [API win32] Récupérer le répertoire d'un profile
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h38

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