Здравствуйте, Андрей Мельник, Вы писали:
АМ>Здравствуйте, Oxygenium, Вы писали:
O>>Спасибо за ответы.
O>>Да, действительно замена на ListView_GetItemText(wnd,5,0,ItemText,1024) непомогла, жертва все равно падает.
O>>А вот как сделать "покруче" я незнаю, если можно расскажите поподробнее, линки на статьи тоже непомешают.
АМ>Тут набор стандартый GetWindowThreadProcessId, OpenProcess, VirtualAllocEx, ReadProcessMemory. Пример
АМ>http://rsdn.ru/Forum/?mid=11702
Сделал как написано. Да действительно приложение жертва уже не вылетает, но и результат — всегда пустая строка:
HWND wnd = FindWindow(0, "Processes");
wnd = ::GetWindow(wnd, GW_CHILD);
wnd = ::GetWindow(wnd, GW_HWNDNEXT);
wnd = ::GetWindow(wnd, GW_HWNDNEXT);
wnd = ::GetWindow(wnd, GW_HWNDNEXT);
wnd = ::GetWindow(wnd, GW_HWNDNEXT);
wnd = ::GetWindow(wnd, GW_HWNDNEXT);
wnd = ::GetWindow(wnd, GW_HWNDNEXT);
DWORD dwProcessId;
GetWindowThreadProcessId(wnd, &dwProcessId);
HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, dwProcessId);
LPSTR lpsz = (LPSTR) VirtualAllocEx(hProcess, NULL, 1024, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
ListView_GetItemText(wnd,0,0,lpsz,1024);
char ItemText[1024];
BOOL r = ReadProcessMemory(hProcess, lpsz, ItemText, 1024, NULL); // После выполнения в ItemText - пустая строка
VirtualFreeEx(hProcess, lpsz, 0, MEM_RELEASE);
Кто знает в чем теперь проблема?