В общем написал вот такой код. Ошибок винда не возвращает, все дескрипторы корректные, но в szBuf в результате исполнения кода остаётся пустая строка.
HWND hwndRich;
HANDLE hProcess;
DWORD dwProcessID ;
GETTEXTEX StructTextEx;
GETTEXTEX *PStructTextEx;
LPSTR PTextBuffer;
DWORD BytesWriten, BytesRed;
char szBuf[100];
hwndRich = (HWND) 0x50492;
GetWindowThreadProcessId(hwndRich, &dwProcessID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwProcessID);
PStructTextEx = (GETTEXTEX *) VirtualAllocEx(hProcess, NULL, sizeof(GETTEXTEX), MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE);
PTextBuffer = (LPSTR) VirtualAllocEx(hProcess, NULL, 20, MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE);
StructTextEx.flags = GTL_NUMBYTES | GTL_USECRLF;
StructTextEx.codepage = 1200;
StructTextEx.lpDefaultChar = NULL;
StructTextEx.lpUsedDefChar = NULL;
WriteProcessMemory(hProcess, PStructTextEx, &StructTextEx, sizeof(GETTEXTEX), &BytesWriten);
if (BytesWriten != sizeof(GETTEXTEX))
return;
SendMessage(hwndRich, EM_GETTEXTEX, (WPARAM) PStructTextEx, (LPARAM) PTextBuffer);
ReadProcessMemory(hProcess, PTextBuffer, szBuf, 100, &BytesRed);
VirtualFreeEx(m_hProcessHandle, PStructTextEx, sizeof(GETTEXTEX), MEM_DECOMMIT);
VirtualFreeEx(m_hProcessHandle, PTextBuffer, 20, MEM_DECOMMIT);
CloseHandle(hProcess);
---
PS. Может быть правда, что я константу EM_GETTEXTEX неправильно определил... У меня 6-ая студия стоит, а там в инклудах такой переменной нету. В сети нагуглил такое определение: "#define EM_GETTEXTEX (WM_USER + 94)". Оно правильное?
|