Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1213 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  (VC++/Win32) [resolu] récupérer le texte d'un tooltip grace à son hwnd

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

(VC++/Win32) [resolu] récupérer le texte d'un tooltip grace à son hwnd

n°1248896
ChristianS​_
Posté le 19-11-2005 à 11:48:19  profilanswer
 

Hello,  
 
comment récupérer le texte contenu dans un tooltip quand on a que le hwnd du tooltip ( le hwnd qui correspond a la petite fenetre du tooltip ) ?
J'ai essayé avec GetWindowText() mais ça ne marche pas, j'ai une chaine vide... pourtant Spy++ arrive bien a le récupérer  ( affiché dans la case "window title" de spy++ )
ll doit falloir récupérer un control particulier dans cette fenetre, mais je ne vois pas comment...
 
 
Merci.


Message édité par ChristianS_ le 23-11-2005 à 21:05:31
mood
Publicité
Posté le 19-11-2005 à 11:48:19  profilanswer
 

n°1248930
olivthill
Posté le 19-11-2005 à 13:41:05  profilanswer
 

:hello:  
La récupération du texte d'une tooltip est réalisé par

SendMessage(tooltip_hwnd, TTM_GETTEXT, (WPARAM)0, (LPARAM) (LPTOOLINFO) lpti);

(avec lpti  pointeur vers une structure TOOLINFOVoir doc http://msdn.microsoft.com/library/ [...] ettext.asp  :)


Message édité par olivthill le 19-11-2005 à 13:41:32
n°1248984
ChristianS​_
Posté le 19-11-2005 à 16:21:09  profilanswer
 

Merci de la réponse,
 
j'y arrive pas, ça plante... je ne doit pas passer les bons paramètres   :??:  
 

Code :
  1. TCHAR titre[300];
  2. strcpy(titre,"" );
  3. TOOLINFO info;
  4. ZeroMemory(&info,sizeof(TOOLINFO));
  5. info.cbSize=sizeof(TOOLINFO);
  6. info.uFlags=TTF_IDISHWND;
  7. info.hwnd=hwnd;
  8. info.uId=(UINT_PTR)hwnd;
  9. info.lpszText=titre;
  10. ::SendMessage(hwnd,TTM_GETTEXT,(WPARAM)0,(LPARAM)(LPTOOLINFO)(&info));
  11. CString title=info.lpszText;
  12. MessageBox(title);


 
où hwnd est le handle du tooltip ( récupéré grace à Spy++ )
Il faut dire aussi de ce tooltip est un tooltip qui affiche le titre des fenetres quand on met le curseur sur un bouton de la barre des taches...( appartient à windows donc. )
ça fait planter explorer.Exe lors du SendMessage.
 
Je ne maitrise pas trop le TTM_GETTEXT et TOOLINFO.

n°1248988
slash33
Posté le 19-11-2005 à 16:39:27  profilanswer
 

Code :
  1. info.uId=(UINT_PTR)hwnd;


Tu es sûr de ça ?
 
De plus CString c'est en MFC alors c'est bien du Win32 ton histoire ?


Message édité par slash33 le 19-11-2005 à 16:41:48
n°1249127
ChristianS​_
Posté le 19-11-2005 à 22:36:26  profilanswer
 

oui je pense, d'apres la doc....  je ne connais que le handle alors je lui spécifie que l'id est le handle du tooltip au lieu de son ID  ( info.uFlags=TTF_IDISHWND; )   :??:  
 
J'ai utilisé un CString pour afficher le resultat dans ma messagebox.
Je test dans un projet MFC, mais ça ne change rien au probleme de recupération du texte du tooltip qui peut etre codé en win32  ( ::SendMessage... )

n°1251877
ChristianS​_
Posté le 23-11-2005 à 21:04:33  profilanswer
 

OK, ça fonctionne avec le message TTM_GETTEXT, mais il semblerait qu'il faille passer une zone memoire non protégée par mon thead, pour que le tooltip puisse ecrire les infos dedans.
J'ai adapté un code VB trouvé sur un forum...
C'est bien la premiere fois que j'utilise les VirtualAllocEx et autre OpenProcess... en tout cas ça marche...
 
 

Code :
  1. // hwnd = hwnd du tooltip
  2. HWND parent=GetParent(hwnd);
  3. CString title;                   
  4. char texte[300];
  5. SIZE_T tailleEcritLu=0;
  6. TOOLINFO info;
  7. memset(&info, 0, sizeof(TOOLINFO));
  8. info.cbSize=sizeof(TOOLINFO);
  9.  
  10. DWORD pid=0;
  11. DWORD id=GetWindowThreadProcessId(hwnd,&pid);
  12. HANDLE  hProcess = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, pid);
  13. LPVOID  sharedINFO = VirtualAllocEx(hProcess,NULL,sizeof(TOOLINFO), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
  14. LPVOID  sharedTEXT = VirtualAllocEx(hProcess,NULL,sizeof(texte), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
  15. WriteProcessMemory(hProcess, sharedINFO, &info, sizeof(TOOLINFO), &tailleEcritLu);
  16. SendMessage(hwnd, TTM_GETCURRENTTOOL, 0,  (LPARAM)sharedINFO);
  17. ReadProcessMemory(hProcess,  sharedINFO, &info, sizeof(TOOLINFO), &tailleEcritLu);
  18. info.lpszText=(LPSTR)sharedTEXT;
  19. WriteProcessMemory(hProcess, sharedINFO, &info, sizeof(TOOLINFO), &tailleEcritLu);
  20. SendMessage(hwnd, TTM_GETTEXT, 0,  (LPARAM)sharedINFO);
  21. ReadProcessMemory(hProcess,  sharedINFO, &info, sizeof(TOOLINFO), &tailleEcritLu);
  22. ReadProcessMemory(hProcess,  info.lpszText, texte, sizeof(texte), &tailleEcritLu);
  23. title=texte;
  24. VirtualFreeEx(hProcess,  sharedTEXT, sizeof(texte), MEM_RELEASE);
  25. VirtualFreeEx(hProcess,  sharedINFO, sizeof(TOOLINFO), MEM_RELEASE);
  26. CloseHandle(hProcess);
  27. MessageBox(NULL,title,"titre",0);


Message édité par ChristianS_ le 23-11-2005 à 21:06:09
n°1262973
ChristianS​_
Posté le 09-12-2005 à 18:49:17  profilanswer
 

Voilà, c'était pour faire ça mon histoire de tooltip :
 
http://chsalmon.club.fr
 
 

n°1264326
haazheel
Posté le 12-12-2005 à 11:00:06  profilanswer
 

Je viens de tester, c'est excellent comme soft!

n°1264328
chrisbk
-
Posté le 12-12-2005 à 11:17:14  profilanswer
 

jpense c'est logique, TTM_GETTEXT ecrit dans l'espace mémoire du process detenant le tooltip. Vu que toi t'es hors de son process, faut gruger.

n°1264332
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 12-12-2005 à 11:27:00  profilanswer
 

ben ouais


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 12-12-2005 à 11:27:00  profilanswer
 

n°1264336
chrisbk
-
Posté le 12-12-2005 à 11:28:06  profilanswer
 

par contre tu es cordialement invité ici :
 
http://forum.hardware.fr/hardwaref [...] m#t1264317
 
 
[:el g] tu nous fait un court sur les images dans un tooltip ?

n°1264340
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 12-12-2005 à 11:30:50  profilanswer
 

bah, ça doit pas etre bien dur ! un tooltip possède un hWnd, donc un HDC. à partir de là, tu fais ce que tu veux avec :spamafote:


---------------
J'ai un string dans l'array (Paris Hilton)
n°1264341
chrisbk
-
Posté le 12-12-2005 à 11:32:05  profilanswer
 

bin fo le subclasser quoi [:petrus75] j'imagine qu'ya des message pour la taille et tout

n°1264424
ChristianS​_
Posté le 12-12-2005 à 13:24:04  profilanswer
 

ouais , j'suis pas un pro de C++ non plus.
vas s'y, montre nous ton subclass du tooltip et ton trafic de HDC !
aller, j'vous met bientot la version 1.1...
 
 :hello:

n°1267163
ChristianS​_
Posté le 15-12-2005 à 12:48:35  profilanswer
 

Voilà, y'a la 1.1 pour ceux que ça interesse...
 
http://chsalmon.club.fr


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  (VC++/Win32) [resolu] récupérer le texte d'un tooltip grace à son hwnd

 

Sujets relatifs
RESOLU insertion de l'année N-1 à concaténer avec un motPb résolu: Empécher la superposition des commonbuttons
[Javascript] position X et Y d'une balise HTML [Résolu]init de la classe mère [résolu]
Récupérer une info dans un finier ini[Qt/X11/Win32] Window handle
[AS] Dupliquer dynamiquement un champ texte.pb résolu: créer un lien hypertext
Coller du texte dans un JEditorPane ajoute une nouvelle ligne[Résolu] [Excel] Régression pas à pas
Plus de sujets relatifs à : (VC++/Win32) [resolu] récupérer le texte d'un tooltip grace à son hwnd


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR