[WINDOWS] Ccomment recuperer le nom des menus de toutes les fenetres ?

Résolu
ZaRMaS Messages postés 17 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 30 octobre 2006 - 3 mai 2006 à 19:02
ZaRMaS Messages postés 17 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 30 octobre 2006 - 4 mai 2006 à 16:29
Bonjour,



Je cherche a recuperer le nom des menus de toutes les fenetres ouvertes
de windows, mais j'ai quelques problemes avec tous les Handle.



voila ce que je fais :



void GetMenuName()

{

HWND hwnd = NULL;

int nProcessId;
char nameBuffer[WINBUFF_SIZE];

int nbr_menu = 0;

int nbr_submenu = 0;

HMENU menu = NULL;

HMENU submenu = NULL;

char menu_name[100];

long subcount = 0;



hwnd = GetTopWindow(hwnd);

while(hwnd)

{

GetWindowText(hwnd, nameBuffer, WINBUFF_SIZE);

nProcessId = GetWindowThreadProcessId(hwnd, NULL);

if (strcmp(nameBuffer, "")
&& IsWindow(hwnd) && IsWindowVisible(hwnd) &&
IsWindowEnabled(hwnd))

{
printf("%5d %s\n", nProcessId, nameBuffer);

menu = GetMenu(hwnd);

submenu = GetSubMenu(menu, 0);

subcount = GetMenuItemID(submenu, 0);

int nbr = GetMenuString(submenu, subcount, menu_name, 100, 1);

printf("%s\n", menu_name);

}

hwnd = GetNextWindow(hwnd, GW_HWNDNEXT);

}

free(nameBuffer);

}

Je recupere bien le nom de toutes mes fenetres mais impossible d'avoir le nombre et les noms des menus correspondant.

Avez vous une idee, voir une solution.

Merci a vous



Thib

6 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
3 mai 2006 à 19:38
Voila, si j'ai bien compris ce que tu voulais faire

#include <windows.h>
#include <stdio.h>

int main()
{
HWND hwnd = NULL;
int nProcessId;
char nameBuffer[1024];
int nbr_menu = 0;
int nbr_submenu = 0;
HMENU menu = NULL;
HMENU submenu = NULL;
char menu_name[100];
long subcount = 0;

hwnd = GetTopWindow(hwnd);
while(hwnd)
{
GetWindowText(hwnd, nameBuffer, 1024);
nProcessId = GetWindowThreadProcessId(hwnd, NULL);
if (strcmp(nameBuffer, "") && IsWindow(hwnd) && IsWindowVisible(hwnd) && IsWindowEnabled(hwnd))
{
printf("%5d %s\n", nProcessId, nameBuffer);
menu = GetMenu(hwnd);
if(menu)
{
int count = GetMenuItemCount(menu);
printf("Il y a %d items dans le menu\n", count);
for(int i = 0; i < count; i++)
{
int nbr = GetMenuString(menu, i, menu_name, 100, MF_BYPOSITION);
printf("%d-%s\n", i, menu_name);
}
}
else printf("Pas de menu\n");
}
hwnd = GetNextWindow(hwnd, GW_HWNDNEXT);
}
}

Attention, le free que tu as mis à la fin n'est vraiment pas beau...
3
ZaRMaS Messages postés 17 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 30 octobre 2006
4 mai 2006 à 14:29
Merci pour le code est ce que ca marche sur toutes les fenetres chez toi ?

Parce que moi il me donne la liste des menus uniquement sur une application ( Eclipse ) autrement pour toutes mes autres

fenetres il n'y a rien.

Saurais tu pourquoi ?



Merci



Thibal
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 mai 2006 à 14:43
Certaines fenêtres n'ont pas de menu, c'est tout
0
ZaRMaS Messages postés 17 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 30 octobre 2006
4 mai 2006 à 15:10
bah par exemple je n'ai pas les menus de firefox, visual, explorateur windows...

Est il possible que ce ne soit pas les memes types de menus?

Si oui quel types de menus il peut y avoir ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 mai 2006 à 15:13
explorateur windows par exemple, regarde avec Spy++ ce n'est pas un vrai menu, c'est en fait une toolbar
Firefox ce ne sont pas non plus des trucs standards. Ils ont créé leur menus eux même, tu n'a donc en général aucun moyen de savoir ce qu'ils contiennent
0
ZaRMaS Messages postés 17 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 30 octobre 2006
4 mai 2006 à 16:29
Ah ok je te remerci pour toute les infos
0
Rejoignez-nous