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

Récupérer le titre d'une fenêtre - C++ - Programmation

Marsh Posté le 10-06-2005 à 17:42:07    

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!!! Confused 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!!! Very Happy

Reply

Marsh Posté le 10-06-2005 à 17:42:07   

Reply

Marsh Posté le 12-06-2005 à 01:44:42    

Bonjour,
Il faudrait que tu récupères le nom de la fenetre principale de ton application => GetParent(hWndUnder) = 0
Il te faut donc faire une petite boucle pour vérifier que ce n'est pas un handle de fenêtre fille.

Reply

Marsh Posté le 12-06-2005 à 09:47:11    

La fenêtre principale a hwnd = 0???
Je suis désolé mais je viens à peine il y a quelque jours de commencer à programmer avec cette api et je pense pas avoir bien saisi la "philosophie" de cette api... Parent, enfant, je ne sais pas trop la différence... :S
Je dois faire une boucle pour vérifier que ce n'est pas un handle de fenêtre fille? La boucle doit se faire sur quoi? Désolé mais je suis un peu perdu...

Reply

Marsh Posté le 12-06-2005 à 10:22:33    

ce qu'il veut dire (enfin je crois) c'est de faire une boucle avec GetParent jusqu'a ce qu'elle retourne 0
Ainsi le dernier handle retourné sera celui de la fenêtre "globale".
Meme si c'est pas sur que ca marche car la fenetre principale peut avoir un parent.
Essayes de faire une boucle qui compare le resultat de GetParent à 0 et au handle retourné par GetDesktopWindow


Message édité par jan0 le 12-06-2005 à 10:22:57
Reply

Marsh Posté le 12-06-2005 à 10:27:58    

Ah mais moi je ne veux pas récupérer le handle de DesktopWindow mais le même que GetForegroundWindow... Et lui ce n'est pas 0 d'après ce que j'ai vu!

Reply

Marsh Posté le 12-06-2005 à 10:51:55    

oui mais non
ce qu'on te dis c'est que si ta souris est sur une fenetre fille genre un controle de la fenetre et bien il tester si elle a un parent et ainsi de suite

Code :
  1. hWndUnder = WindowFromPoint(pos);
  2. HWND temp;
  3. HWND desktop=GetDesktopWindow();
  4. while(1)
  5. {
  6. temp = GetParent(hWndUnder)
  7. if(temp!= 0 && temp!=desktop) hWndUnder = temp;
  8. else break;
  9. }


Message édité par jan0 le 12-06-2005 à 10:54:00
Reply

Marsh Posté le 12-06-2005 à 11:00:09    

OK!
Donc avec ce code je vais de parent en parent jusqu'à ce que je tombe sur soit DesktopWindow soit jusqu'à 0. Et après, à partir de ça, je peux récupérer le handle qui m'intéresse?

Reply

Marsh Posté le 12-06-2005 à 11:00:39    

Désolé je dois vraiment vous paraître être un boulet.... :S

Reply

Marsh Posté le 12-06-2005 à 15:04:59    

oui normalement le dernier handle doit être le bon mais on sait jamais

Reply

Marsh Posté le 12-06-2005 à 15:12:22    

MERCI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CA MARCHE!!!!!!!!!!!!!!!!!!
Je vous dois une fière chandelle!!!!!!!!!!
 
Au fait j'ai un autre problème, peut être pourrez-vous encore m'aider? :-)
En utilisant toujours mon WindowFromPoint, je voudrais savoir cette fois si je me trouve sur une icône du bureau. Vous savez si c'est possible?
Encore Merci!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed