Récupérer le titre d'une fenêtre [Résolu]

Signaler
Messages postés
13
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
31 janvier 2006
-
Messages postés
13
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
31 janvier 2006
-
Bonjour!!





Je vous écris car je me trouve devant un problème que je n'arrive pas à résoudre...





En fait je veux récupérer le titre d'une fenêtre quand je passe ma souris dessus.


Il y a la méthode qui consiste à faire :


HWND hwnd = GetForegroundWindow();


char * caption = new char[255];


int length = GetWindowText(hwnd,caption,254);



et qui marche très bien.


Seulement, avec mon programme je ne veux pas récupérer le titre de la
fenêtre au premier plan mais n'importe quelle fenêtre sur laquelle je
me trouve avec ma souris!


Alors je fais :



GetCursorPos(&pos);


HWND hWndUnder = WindowFromPoint(pos);


LPTSTR p = sText.GetBuffer(MAX_PATH);


GetWindowText(hWndUnder, p, MAX_PATH);



seulement voilà, ça ne retourne pas toujours le titre!!!
Ca donne le titre si je passe sur la barre bleue suppérieure mais si
par exemple on passe sur une fenêtre avec une barre d'outils, ça donne
le nom de la barre d'outil...


Et moi je veux récupérer le titre quelque soit l'endroit où je me trouve sur la fenêtre!


Je pense que WindowFromPoint ne me renvoie pas le bon handle mais j'arrive pas à m'en sortir....


Est-ce que quelqu'un a une idée???





Merci d'avance!!!

7 réponses

Messages postés
13
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
31 janvier 2006

C'est bon j'ai trouvé comment faire, je met le code, si jamais ça intéresse quelqu'un :




<li>hWndUnder = WindowFromPoint(pos);
</li><li>HWND temp;
</li><li>HWND desktop=GetDesktopWindow();
</li><li>


</li><li>while(1)
</li><li>{
</li><li>temp = GetParent(hWndUnder)
</li><li>if(temp!= 0 && temp!=desktop) hWndUnder = temp;
</li><li>else break;
</li><li>}</li>

Voilà!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
HWND hWndUnder = WindowFromPoint(pos);
hWndUnder = GetLastActivePopup(hWndUnder);
....

ciao...
BruNews, MVP VC++
Messages postés
13
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
31 janvier 2006

Salut!

Je viens de tester ton truc, ça ne marche pas... :'(

En fait, j'ai remarqué que la méthode GetForegroundWindow retournait un
hwnd correspondant directement à celui de la barre bleue supérieure. Il
faudrait que j'arrive au même résultat... J'ai essayé avec un GetAncestor mais ça ne marche pas....
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
exact, j'y ai repensé trop tard après avoir posté...
Faudrait tester si ton handle correspond à une barre d'outils ou un menu (GetClassName par exemple) et en ce cas faire:
hWndUnder = GetParent(hWndUnder);
A explorer

ciao...
BruNews, MVP VC++
Messages postés
13
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
31 janvier 2006

D'accord, mais GetClassName retourne quoi? Je veux dire, on peut connaître le nom de classe de la barre de titre par exemple?

D'après ce que j'ai compris, un parent d'une fenêtre est une sorte de
fenêtre qui contient la fenêtre courante. C'est bien quelque chose du
genre?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Si c'est un menu, GetParent() donne handle de la fenetre qui contient ce menu.

ciao...
BruNews, MVP VC++
Messages postés
13
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
31 janvier 2006

Argh!!!! Je m'en sors pas!!! J'arrive pas à récupérer le handle de la fenêtre (le même fourni par GetForegroundWindow)....