GETITEMDATA

Résolu
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013 - 8 janv. 2005 à 01:51
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013 - 10 janv. 2005 à 21:07
Salut,
alors voila j'utilises LB_GETITEMDATA poure récuperer une valeure
que j'utilises ensuite dans ReadMemoryProcess pour lire ce que contient
la listbox d'une autre application car GETITEMTEXT ne marche pas..
Je dois faire la meme chose avec une listeview mais LVM_GETITEMDATA
n'existe pas :/

Comment puis je faire ?

Merci

NeoUmbrella Corp.

30 réponses

NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
9 janv. 2005 à 01:53
Salut, toutes les autres valeure sont bonnes, la valeure est negative car je
ne l'ai pas initialisée en fait.
A mon avis c'est l'handle que je donne comme parametre dans
SendMessage () qui n'est pas bon.
Par contre si j'envoit le message int iSelect=SendMessage(syslistview,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
ca me renvoit la bonne valeure donc c'est bizar...

Ptite question, t'es chez aol ?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 janv. 2005 à 02:18
Salut,
et les GetLastError() ?
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
9 janv. 2005 à 02:28
Heu j'ai pas trop pigé comment ca marchais
(jsuis nul en anglais )

Jverrais ca demain c ptet la fatigue, mais jsuis content j'ai bien avancé
grace a toi

NeoUmbrella Corp.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 janv. 2005 à 02:32
Salut,
Quand tu as une erreur, genre SendMessage qui retourne 0, tu appeles GetLastError() qui te retourne un numéro qui correspond a l'erreur.
0

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

Posez votre question
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
9 janv. 2005 à 02:41
Salut, GetLastError me renvoit 0 en faisant ca :if(SendMessage(syslistview,LVM_GETITEM,0,(LPARAM)&LvItem) 0) test GetLastError();
cout << "Errreure : " << test << endl;
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
9 janv. 2005 à 14:29
Salut aardman j'ai reussie a faire ce que je voulais comme ceci :
GetWindowThreadProcessId(syslistview, &pid);
cout << pid << '\n';



hProc = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, pid);
cout << (long)hProc << '\n';


DWORD dwSize = sizeof(LVITEM) + 256*sizeof(TCHAR);
LPVOID lpData = NULL;



lpData = VirtualAllocEx(hProc, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE);

LPVOID lpPosition = lpData;
LPVOID lpItem = ((LPBYTE) lpData) + sizeof(POINT);
LPVOID lpText = ((LPBYTE) lpData) + sizeof(POINT) + sizeof(LVITEM);



int nItemCount = SendMessage(syslistview, LVM_GETITEMCOUNT, 0, 0);
TCHAR szCount[32];


for(int i = 0; i < nItemCount; i++)
{
// init structure LVITEM dans une variable locale et recopie dans la zone de
// mémoire allouée
LVITEM lvi;
ZeroMemory(&lvi, sizeof(LVITEM));
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = (LPTSTR) lpText;
lvi.cchTextMax = 256;
WriteProcessMemory(hProc, lpItem, &lvi, sizeof(LVITEM), NULL);


// récupération nom et position
SendMessage(syslistview, LVM_GETITEMTEXT, i, (LPARAM) lpItem);


// recopie dans variables locales
TCHAR szText[256];
ReadProcessMemory(hProc, lpText, szText, 256*sizeof(TCHAR), NULL);


// ajout de la position et du nom
cout << szText << endl;


}

Petit probleme, la listview dont je recupere le texte est en type affichage details
donc je recupere que le nom de l'item de la premiere colonne.
Comment puis je y remédier ?

Merci
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
9 janv. 2005 à 17:37
Yes, t'es le meilleur aardman!
Ca marche impec, je vais utiliser le mm procédé pour une treeview.
Un grand merci a toi

NeoUmbrella Corp.
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
10 janv. 2005 à 19:07
Salut, c'est remoi ^^
Avec une treeview a la place de la listview, je dois utiliser HTREEITEM comme
structure a la place LVITEM ?

NeoUmbrella Corp.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 janv. 2005 à 19:16
Salut,
Pas du tout, HTREEITEM est le handle d'un item.
L'equivalent de LVITEM et LVM_GETITEM pour un treeview serait:
TVITEM pour la structure, et TVM_GETITEM pour le message.
Je te suggere quand meme de lire toute la page msdn consacrée aux treeview, c'est assez different des listview.
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
10 janv. 2005 à 21:07
Ok jvais lire msdn, en attendant j'avais commencer comme ceci :

GetWindowThreadProcessId(aoltreectrl, &pid);
hProc = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, pid);
DWORD dwSize = sizeof(TV_ITEM) + 256*sizeof(TCHAR);
LPVOID lpData = NULL;


int nItemCount = SendMessage(aoltreectrl, TVM_GETCOUNT, 0, 0);
cout << nItemCount << endl;

HTREEITEM Selected=(HTREEITEM)SendMessage(aoltreectrl,TVM_GETNEXTITEM,TVGN_CARET,0);
LPVOID lpItem = ((LPBYTE) lpData) + sizeof(POINT);
LPVOID lpText = ((LPBYTE) lpData) + sizeof(POINT) + sizeof(LVITEM);



TVITEM tvi;
ZeroMemory(&tvi, sizeof(TVITEM));

char Text[MAX_PATH]="";
tvi.mask=TVIF_TEXT;
tvi.pszText=Text;
tvi.cchTextMax=MAX_PATH;
tvi.hItem=Selected;
WriteProcessMemory(hProc, lpItem, &tvi, sizeof(TVITEM), NULL);

// récupération nom et position
SendMessage(aoltreectrl, TVM_GETITEM, 1, (LPARAM) lpItem);


// recopie dans variables locales
TCHAR szText[256];
ReadProcessMemory(hProc, lpText, szText, 256*sizeof(TCHAR), NULL);
cout << szText << endl;

Mais marche pas : /
0
Rejoignez-nous