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 :

Lister le nom des fenêtres à l'écran


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut Lister le nom des fenêtres à l'écran
    Bonjour,
    je rencontre un petit problème de compilation pour un programme que j'écris et qui à ce stade cherche à lister le nom de toutes les fenêtres ouvertes.

    Le code est le suivant :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <QtCore/QCoreApplication>
    #include <iostream>
     
    #include <windows.h>
    #include <psapi.h>
     
    BOOL CALLBACK EnumWindowsProcCallBack(HWND hWnd, LPARAM lParam) {
        char MyTxt[255];
     
        if (!hWnd)
                return TRUE;		// Not a window
        if (!::IsWindowVisible(hWnd))
                return TRUE;		// Not visible
        if (!SendMessage(hWnd, WM_GETTEXT, sizeof(MyTxt), (LPARAM)MyTxt))
                return TRUE;		// No window title
     
        std::cout << "Found a window" << std::endl;
     
        GetWindowText(hWnd, MyTxt, 255);
        std::cout << MyTxt << std::endl;
     
        return TRUE;
    }
     
     
     
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        std::cout << "Main is running" << std::endl;
     
        EnumWindows(EnumWindowsProcCallBack, NULL);
        return a.exec();
    }
    Le compilateur affiche l'erreur suivante :
    cannot convert 'char *' to 'WCHAR *' for argument '2' to 'int GetWindowTextW(HWND__*, WCHAR *, int)'
    Donc j'ai bien compris que le type de MyTxt n'était pas le bon mais je vois pas en quoi le changer ?

    Merci d'avance de votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Le compilateur te le dit : ce n'est pas un char, c'est un WCHAR
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Le compilateur te le dit : ce n'est pas un char, c'est un WCHAR
    Certes, mais lorsque je déclare MyTxt comme WCHAR, le compilateur m'indique que ce type n'est pas connu... Idem bien évidemment si je caste lors du passage de MyTxt dans la fonction GetWindowText :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GetWindowText(hWnd, (WCHAR)MyTxt, 255);
    J'ai beau Google ou autre je n'arrive pas à avoir une idée claire sur le type WCHAR, j'ai bien compris que c'était rattaché à l'API windows...

    EDIT : et le pire : http://msdn.microsoft.com/en-us/libr...exchg.10).aspx

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    TU peux résoudre le problème autrement :

    #include <tchar.h>

    et utiliser _T("chaine") pour encapsuler tes chaines litterales, TCHAR pour stocker des caractères (TCHAR* ou TCHAR x[n] pour des chaines), etc.

    cf. http://msdn.microsoft.com/fr-fr/library/c426s321.aspx
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    Je continue de creuser ce probleme. J'ai tenté d'utiliser TCHAR mais j'ai le même type d'erreur :
    ..\sample1\main.cpp:22: error: cannot convert 'TCHAR*' to 'WCHAR*' for argument '2' to 'int GetWindowTextW(HWND__*, WCHAR*, int)'
    J'ai juste rajouté #include <tchar.h> et modifié le code de ma fonction EnumWindowsProcCallBack en conséquence en rajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TCHAR WndTitle[255];
    GetWindowText(hWnd, WndTitle, 200);
    std::cout << WndTitle << std::endl;
    Ca à l'air vraiment stupide comme problème, mais je tourne en rond...

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Vérifie que _UNICODE ou _MBCS sont définis quelque part dans les options de compilation du projet. TCHAR n'est pas un type, c'est un #define. Que le compilateur te le sorte comme ça montre qu'il y a un problème quelque part.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/04/2007, 11h48
  2. lister le nom des champs d'une table
    Par creale10 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/11/2006, 11h07
  3. [C++] Récupérer les noms des fenêtres.
    Par The Lord of Nesquik dans le forum Windows
    Réponses: 8
    Dernier message: 21/06/2006, 17h47
  4. duppliquer une BD+lister les noms des BD existantes
    Par da_latifa dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/03/2006, 08h58
  5. MDI Application et nom des fenêtres dans le menu
    Par Captain_JS dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/08/2005, 08h26

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