Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
[Win32] Спасибо - мало. Ты скажи - получилось? И как? 07.04.10 06:16 Число просмотров: 2949
Автор: Zef <Alloo Zef> Статус: Elderman
|
|
<programming>
|
[Win32] Как получить текст из чужого RichEdit'а? 05.04.10 07:20
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
Точнее TRichView / TInfuRichEdit. На всех окнах и кнопках работает функция GetWindowText или WM_GETTEXT, а здесь не хочет. Пробовал ещё извращаться с WM_GETSEL, EM_FINDTEXT и некоторыми другими. Результат 0. В поиске нашёл пару топиков с подобным вопросом, но решения нигде не было...
|
|
[win32] есть мнение, что нужно аллоцировать память в чужом процессе, и слать em_gettextex. 05.04.10 11:33
Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 05.04.10 11:37 Количество правок: 2
|
VirtualAllocEx, внутри чужого процесса заполняем структуру GETTEXTEX, делаем PostMessage с соотв. указателями на GETTEXTEX и буфер, куда вернётся текст.
Потом ReadProcessMemory() и вуаля ;)
А вообще, сперва попробуй эти же пляски с VirtualAllocEx, но пошли простой WM_GETTEXT.
Если не получится, то пляски по полной программе.
|
| |
[Win32] Спасибо! 06.04.10 09:05
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
|
| | |
[Win32] Спасибо - мало. Ты скажи - получилось? И как? 07.04.10 06:16
Автор: Zef <Alloo Zef> Статус: Elderman
|
|
| | | |
В общем написал вот такой код. Ошибок винда не возвращает,... 08.04.10 14:18
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
В общем написал вот такой код. Ошибок винда не возвращает, все дескрипторы корректные, но в 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)". Оно правильное?
|
| | | | |
1.) if (byteswriten != sizeof(gettextex)) return; оставляет... 14.04.10 14:54
Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 14.04.10 14:56 Количество правок: 1
|
1.) if (BytesWriten != sizeof(GETTEXTEX)) return; оставляет процесс не закрытым — поправь.
2.) на чём, собственно обломы идут-то? Что под клоподавом видно?
|
| | | | |
А хендл окна точно тот? Тыркни в окно RichEdit'a определялкой Spy++, мож там ещё есть вложенное окно? 09.04.10 22:21
Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 09.04.10 22:21 Количество правок: 1
|
|
| | | | | |
SPY++ мигает именно на том окне (речь о QIP Infinum) идёт, т.е. хендл точно правильный. Вложенных окон нет. 10.04.10 14:32
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
|
|
|