Récupérer et modifier une liste

jnbrunet Messages postés 258 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 13 novembre 2012 - 10 déc. 2009 à 20:21
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 22 déc. 2009 à 09:39
Bonjour,

Il y a une application faite en cpp donc j'aimerais récupérer les données à l'intérieur d'une liste de données (multi colonne). La liste est créée par winforms.

Ma question est la suivante :

Croyez-vous qu'il est possible, à partir d'une librairie dynamique injectée dans l'application cible, de récupérer les données de la liste et de par la suite les modifier?

J'avais pensé à récupérer l'adresse mémoire de la liste winform et de créer une nouvelle variable liste winform. Par la suite récupérer ses infos à partir de cette nouvelle variable...

Qu'est-ce que vous en pensez? Si ce n'est pas clair, je vais reprendre mon explication sans aucun problème.

Merci
-Jn-

3 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
19 déc. 2009 à 20:53
Salut,

Heu... Ce genre de manip sur du code managé c'est de la folie furieuse. La liste est très certainement morcelée dans la mémoire. Elle est gérée par un garbage collector... Bref, c'est mort.

Si la liste est affichée, utilises plutôt une méthode à base de GetWindowText.
0
jnbrunet Messages postés 258 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 13 novembre 2012
21 déc. 2009 à 16:58
Salut,

Effectivement ça semble être pas mal complexe. Par contre j'ai trouvé ceci :

http://www.codeproject.com/KB/system/hooksys.aspx

Peut être que si je "hook" la fonction qui remplie la liste je pourrais avoir un bon contrôle sur la liste?

J'ai accès à l'exécutable mais je ne peux pas le modifier puisqu'il est sur un serveur à mon travail dont je n'ai pas l'accès. L'équipe de dev de l'outil que je veux modifier est terriblement lent et occupé sur d'autres trucs. Alors je veux faire mes modifs directement dans la mémoire. Cela me donnera une bonne pratique de ce genre de programmation en même temps.

Qu'en pensez-vous?

Merci ! -Jn-
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
22 déc. 2009 à 09:39
Ce type de technique ne fonctionne pas non plus sur du code managé. Elle est basée sur une exploitation de la structure des exécutables natifs.

Le code managé est compilé à l'exécution. Les mécanismes de compilation et donc la structure du code généré par la CLR (Machine virtuelle dotnet) ne sont pas documentés (Et dépendent de la machine virtuelle). Et pas grand monde ne s'y est intéressé, car la plupart de gens ayant le temps et les connaissances suffisantes pour étudier le fonctionnement de la CLR considère le dotnet comme une fumisterie.

Comme je le disais, tu devrais plutôt t'orienter vers une récupération en GUI, peut être en passant par LVM_GETITEM si une liste dotnet est bien une list view windows.

Pour la récupération du handle sur la listview, tu peux regarder ce code.
0
Rejoignez-nous