Oj, problem tu opisany nie jest wcale łatwy dla początkującego.
Zwyczajne SendMessage zazwyczaj wywali tamten program, bo LVITEM będzie w Twoim zakresie pamięci co może być kodem w tamtym programie (adres struktury)
- Process musisz otworzyć z prawem PROCESS_VM_OPERATION.
- Zaalokuj troszkę pamięci w obcym programie dla LVITEM + miejsce na stringi - VirtualAllocEx, otrzymany pointer podaj w SendMessage jako LVITEM*, potem odczytaj to co tamten program tam wpisał (ReadProcessMemory).
Pamiętaj o pointerach dla stringów: nie podawaj adresów buforów które należą do Twojego programu, tylko wolne miejsce w zaalokowanej virtualnej pamięci
// extra memory w obcym procesiel 4096 - standardowy rozmiar strony pamięci
LVITEM *premote = VirtualAllocEx(hProcess,0,4096,MEM_COMMIT,PAGE_READWRITE);
// standardowa struct, inicjowana tu, wpisana do procesu
LVITEM local;
local.mask = LVIF_TEXT;
local.iItem = ??;
local.iSubItem = ??;
local.pszText = premote + sizeof(LVITEM); // uwaga!
local.cchTextMax = 4096 - sizeof(LVITEM);
WriteProcessMemory(hProcess, premote, &local, sizeof(LVITEM), 0); // null zamiast zero, forum bug
SendMessage(hListView, LVM_GETITEM, 0, premote);
teraz możesz odczytać string z adresu premote + sizeof(LVITEM)
char blah[256];
ReadProcessMemory(hProcess, premote + sizeof(LVITEM), &blah, 255, 0);
blah[255] = 0;
Nie zapomnij też o VirtualFreeEx(hProcess,remote,4096,MEM_RELEASE);