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

[Résolu]
Signaler
Messages postés
17
Date d'inscription
samedi 13 septembre 2003
Statut
Membre
Dernière intervention
30 octobre 2006
-
Messages postés
17
Date d'inscription
samedi 13 septembre 2003
Statut
Membre
Dernière intervention
30 octobre 2006
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
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...
Messages postés
17
Date d'inscription
samedi 13 septembre 2003
Statut
Membre
Dernière intervention
30 octobre 2006

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Certaines fenêtres n'ont pas de menu, c'est tout
Messages postés
17
Date d'inscription
samedi 13 septembre 2003
Statut
Membre
Dernière intervention
30 octobre 2006

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 ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
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
Messages postés
17
Date d'inscription
samedi 13 septembre 2003
Statut
Membre
Dernière intervention
30 octobre 2006

Ah ok je te remerci pour toute les infos