Liste des fenêtres visibles [VC++]

Signaler
Messages postés
5
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
1 avril 2003
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,
voila je cherche a établir la liste des noms des fenêtres visibles ( c'est à dire la liste que l'on peut voir dans la barre des taches ou le getionnaire de tache/application).
G utilisé la fonction EnumWindows dans le code de telle manière :

EnumDesktopWindows(NULL,(WNDENUMPROC)EnumWindowsProc,(LPARAM)&tableau);

avec la fonction :

bool CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam);

bool CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam)
{
char truc[50];
GetWindowText(hwnd,truc,50);
return true;
}

Mais je n'arrive pas a faire un trie dans les informations que je récupere, je choppe pleins de noms divers et variées(des fenetres mais aussi autre chose), de blancs et je n'arrive pas a m'en dépatouillé.
Quelqu'un sait il comment trier les informations obtenues ? Merci d'avance.

3 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Salut,
quel critere de tri ?
Que faire des titres de fenetres obtenus ?
Donne un cahier des charges précis et alors je te fournirai ce qui te manque.
Tu peux voir un exemple enumwindows dans mon source PROG EGOISTE mais le callback est en asm pour les performances.
ciao...
Messages postés
5
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
1 avril 2003

Merci de ta réponse ! C t bien cool.
Avec la fonction IsWindowVisible et GetClassName (que j'ai vu dans tes sources :-) je peux faire à peu pres le trie.
Mon critère de trie etait l'axe-Z.

Par contre j'aurrais aimé stocker les noms des fenetres ainsi que les hwnd dans deux tableau un CStringArray et un CPtrArray.
Peut tu me dire comment faire avec le pointeur long LPARAM pour accomplir ce miracle ?
;) @plus
Jib
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Le LPARAM de EnumWindowsProc ???
Simple, c'est toi qui y mets ce que tu veux quand tu appelles EnumWindows(). Si tu passes un pointeur sur un tableau, le tour est joué.
typedef struct _MYENUM {
DWORD idx; // ++ chaque tour
HWND hwnds[NBR];
char *names[NBR];
} MYENUM, *LPMYENUM;

tu pourrais passer un pointeur sur un truc du genre. Fais gaffe aux alloc memoire correctes et free() correspondants. Je precise que ce n'est pas le modele le + performant mais grosso modo c'est ce que feront les CStringArray et autres bidules mfc.
Pour la F1 je te conseille:
NBR = 0;
1) 1er appel EnumWindows avec LPARAM sur DWORD *NBR.
Alloc 1 seule fois de memoire totale
hmem = malloc(NBR*52 + NBR*4 + 4);
NBR*52 pour les noms
NBR*4 pour hwnds
4 pour pour DWORD idx
ciao...