c ++ - ListView\_GetItem () macro & LV\_GETITEMTEXT returnerer tom STRING, mens du får endnu en APP listview elementer

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er helt klar over, om jeg forsøger at få buffer af en anden app listview elementer, som jeg har brug for at løse hukommelsesrum grænse så hvad jeg laver er hooking som returnerer godt, ingen fejl, succes derefter


enter code here
LVITEM lvi;
lvi.cchTextMax = 552;
lvi.mask = LVIF\_TEXT;

\_tfreopen(path,\_T("w"),stdout);

for (int nItem = 0; nItem < nMaxItems; nItem++) {

    // Get the name and position of a ListView item.
    lvi.iSubItem = 0;
    lvi.iItem = nItem;
    lvi.pszText = szName;

    ListView\_GetItem(hWndLV, &lvi);
    wprintf(L"\%s, ", szName);
    wprintf(L"\%s, ", lvi.pszText);
    for ( int subitem = 0; subitem < columns; subitem++)
    {

        lvi.iSubItem = subitem;
        lvi.iItem = nItem;
        lvi.pszText = szName;

        ListView\_GetItem(hWndLV, &lvi);

        wprintf(L"\%s, ", szName);
        wprintf(L"\%s, ", lvi.pszText);

    }  
    wprintf(L"\%s", "
");

}

wprintf(L"\%s", GetLastError());
fclose (stdout);


Ingen fejl med getlasterror, og dette virker perfekt på enhver anden listevisning jeg prøvede før undtagen denne app, er det muligt at stadig få elementet på en eller anden måde?

Bedste reference


Måske er det et ejertegnede listevisning (LVS\_OWNERDRAWFIXED)? Hvis dette er tilfældet, vil det ikke være muligt at få teksten uden privat viden om den app, der ejer den.

Andre referencer 1


Du behøver ikke bruge hooking for at komme over procesgrænsen. Du kan bruge WriteProcessMemory/ReadProcessMemory som beskrevet i følgende kode Projektartikel: http://www.codeproject.com/KB/threads/int64\_memsteal.aspx[2]


Hvad du skal passe på er at krydse en 32/64 bit grænse. Jeg ved nu, at det er muligt.