Liste des fenêtres visibles [VC++]

metalbibi Messages postés 5 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 1 avril 2003 - 10 févr. 2003 à 04:07
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 10 févr. 2003 à 13:19
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 févr. 2003 à 11:39
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...
0
metalbibi Messages postés 5 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 1 avril 2003
10 févr. 2003 à 12:53
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 févr. 2003 à 13:19
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...
0
Rejoignez-nous