gon33 Le 19/04/2011 à 14:59 Bonjour,
Je cherche un moyen de détecter quelles fenêtres sont des tooltip en fonction de leur HWND.
Des idées?
gon33 Le 19/04/2011 à 15:14 Je précise un peu le problème :
Sous windows vista, il y a un module qui propose de donner le focus à telle ou telle fenêtre quand on la survole avec la souris.
Je veux faire à peu près la même chose.
Mon code marche bien, sauf dans le cas où on ouvre deux fenêtres du même logiciel. Dans ce cas, si les onglets sont rassemblés dans la barre des taches et qu'on clique sur l'onglet qui représente les 2 fenêtres, ça marche encore. Mais quand on reste sur un des 2 onglets et que la tooltip apparait, la sélection des onglets se ferme...
En fait, mon code à trouvé une fenêtre qui ne soit ni le bureau, ni la barre des tâches, et sur laquelle la souris se trouve... Et c'est la tooltip qui ouvre cette fenêtre, mais je suis pas sur que ce soit la fenêtre de la tooltip
gon33 Le 19/04/2011 à 15:30 J'ai trouvé un hack. Le problème c'est que c'est la tooltip qui prend le focus (sans que je fasse rien elle ouvre 2 fenêtres prioritaires sur la barre des taches), et que la barre des taches ne supporte pas que je lui rende le focus.
Du coup, j'essaie de détecter la hauteur des fenêtres...
TOOLTIPS_CLASS -> super idée!
Mais je n'arrive pas à convertir le LPTSTR (whar_t*) en chaine classique afin de la traiter, j'y ai passé 2 heures hier -_-
En fait, la macro T2A ne marche pas puisque mon programme n'utilise pas ATL, et je peux pas inclure ATL parce que ça me donne des erreurs de compilation.
Il y a une façon particulière d'inclure ATL?
multibytetowidechar et widechartomultibyte; mbtowcs et wcstomb, aux majuscules près?
Qu'est-ce que tu entends par "chaîne classique" ? (parce qu'un LPTSTR, c'est pareil qu'un LPSTR si tu es en mode non-Unicode, et c'est un type "classique" en C/C++)

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turbo gon33 Le 19/04/2011 à 15:37 wcstomb plante, je n'arrive à voir la chaine qu'avec le débugguer.
Une chaine classique : char*, string, cstring, qstring...
Je crois que je suis en unicode vu que c'est du wchar en interne
Si tu utilises GetClassNameA() (le A est important, ça veut dire que c'est la version ANSI), le résultat sera un LPSTR, qui est équivalent à char * (pas wchar *).

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turbo gon33 Le 21/04/2011 à 09:19 Ouaip, je suis passé par les chaines Ansi, ça marche beaucoup mieux!
Mon programme marche, mais c'est difficile de faire quelque chose d'universel : par exemple, sous Windows, quand on clique sur un menu, c'est considéré comme une fenêtre. Si on active cette fenêtre elle se ferme, donc vaut mieux pouvoir les détecter. Or les classes diffèrent suivant les framework. Par exemple, sous Qt, c'est un QPopup qui s'ouvre, mais je suis sur qu'on peut afficher autre chose qu'un menu avec un QPopup.
Donc peut être qu'il faut détecter des propriétés particulières sur l'objet.
Mais pour le moment je suis satisfait du résultat, alors je ne vais pas plus en profondeur
Merci pour l'aide :-)