Récupérer texte icône bureau

larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005 - 13 mai 2004 à 04:23
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005 - 20 mai 2004 à 14:03
Bonjour,

Je n'arrive pas à récupérer le texte associé aux icônes du bureaux.
Pouvez vous m'aider ?

HWND hWndSysListView;
hWndSysListView = GetWindow(GetWindow(FindWindowEx(NULL, NULL, "Progman", "Program Manager"), GW_CHILD), GW_CHILD);
char Texte[50];
int i=0;
ListView_GetItemText( hWndSysListView, i, 0, Texte, 50);
ListBox1->Items->Add(Texte);

7 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 mai 2004 à 11:50
le problème c'est que la fenêtre de la listView n'appartient pas au processus de ton programme appelant. Hors 2 processus différents possèdent leurs propre espace d'adressage. Comme la fonction GetItemText attens un pointeur sur une chaîne, celui-ci doit être valide dans le processus de la listview et non pas celui de ton prog.

tu trouvera une astuce (non triviale) pour contourner cette barière dans :
http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip

Part IV, chapter 22, Injecting a Dll using Windows Hook, programme DIPS (Desktop Item Position Saver).
0
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005
13 mai 2004 à 13:12
Merci mille fois. Je pense que je n'aurais pas trouvé la provenance du problème. En tout cas pas dans l'immédiat.
Si j'ai bien compris, il faut que j'execute ma commande à l'exterieur de mon programme (dans une dll par exemple).
La Dll envoie un message à mon programme
que je récupère par l'intermédiaire d'un hook local (au programme).

En gros, c'est cela ?
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 mai 2004 à 15:49
c'est ça. ton programme principale crée un hook (contenu dans une Dll obligatoirement) sur les message de la listview du bureau ce qui a pour conséquence de mapper la dll dans l'espace d'adresse de la listview. Ensuite, tu communique avec ta dll par les messages spécifique au transfert de donnée entre processus (WM_COPYDATA). Quand tu as fini, ru supprime le hook et la dll est demapper du processus cible.
0
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005
13 mai 2004 à 17:51
Merci encore pour le coup de main.
Il ne me reste plus qu'a me plonger dans la gestion des Hooks et les Dlls.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
19 mai 2004 à 12:11
Je viens de poster une source qui peut t'interreser :

"Savegarde/Restauration de la position des icones sur le bureau"
http://www.cppfrance.com/code.aspx?ID=22940
0
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005
19 mai 2004 à 12:28
Merci bien. Je vais étudier cela de près.
0
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005
20 mai 2004 à 14:03
Ah. Oui. Quand même.
Aprés avoir lu le code (plusieurs fois je doit dire) pour comprendre le principe,
J'ai fait un copier/coller de la récupération du texte des icônes dans mon programme.
Et cela a fonctionné du premier coup.
Et tout cela sans Dll.
Ca force le respect.
Un grand merci pour ce code (j'ai mis 10/10). :)
0
Rejoignez-nous