Сейчас на форуме: tyns777, zombi-vadim (+4 невидимых) |
eXeL@B —› Программирование —› RichEdit в чужой проге |
Посл.ответ | Сообщение |
|
Создано: 07 ноября 2007 14:39 · Поправил: Alexus2006 · Личное сообщение · #1 |
|
Создано: 07 ноября 2007 19:37 · Личное сообщение · #2 |
|
Создано: 08 ноября 2007 01:53 · Личное сообщение · #3 |
|
Создано: 08 ноября 2007 08:43 · Личное сообщение · #4 |
|
Создано: 08 ноября 2007 09:28 · Личное сообщение · #5 |
|
Создано: 08 ноября 2007 16:51 · Личное сообщение · #6 HANDLE MainWindowHandle, RichEditWHandle, ProcessHandle; DWORD dwProcessId, ProcessID ; //Cardinal ProcessID ; GETTEXTLENGTHEX StructTextLength; GETTEXTEX StructTextEx; Pointer PStructTextLength, PStructTextEx, PTextBuffer; DWORD BytesWriten, RichEditTextLength; char TextBuffer; // Хандлы верные ws32.exe подсмотрел... MainWindowHandle = (void *)0x00040198; RichEditWHandle = (void *)0x0005047C; GetWindowThreadProcessId(MainWindowHandle, &ProcessID); // Открываем процесс ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, True, ProcessID); PStructTextLength = VirtualAllocEx(ProcessHandle, NULL, sizeof(GETTEXTLENGTHEX), MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE); // Подготавливаем структуру... StructTextLength.flags = GTL_NUMBYTES | GTL_USECRLF; StructTextLength.codepage = 1200; // ...и пишем ее в память процесса WriteProcessMemory(ProcessHandle, PStructTextLength, &StructTextLength, sizeof(GETTEXTLENGTHEX), &BytesWriten); if (BytesWriten != sizeof(GETTEXTLENGTHEX)) RaiseLastOSError(); // Отправляем сообщение удаленному RichEdit, // чтобы узнать необходимый размер буффера RichEditTextLength = SendMessage(RichEditWHandle, EM_GETTEXTLENGTHEX, (WPARAM)PStructTextLength, (LPARAM)0); //RichEditTextLength - равно 0 ... где ошибка? |
|
Создано: 08 ноября 2007 20:40 · Личное сообщение · #7 |
|
Создано: 09 ноября 2007 08:39 · Личное сообщение · #8 |
|
Создано: 09 ноября 2007 08:53 · Поправил: Grom_ · Личное сообщение · #9 |
|
Создано: 09 ноября 2007 08:57 · Личное сообщение · #10 Для получения длины текста и самого текста из RichEdit-а внедрятся в удаленное адресное пространство не нужно. Достаточно обычных вызовов по аналогии с EDIT. (Внедрение нужно если есть желание воспользоваться расширенными возможностями данного класса, к пример выделить часть текста другим цветом). Отправь контролу обычный WM_GETTEXT. Если не вернет данных - значит кастом... |
|
Создано: 09 ноября 2007 09:42 · Личное сообщение · #11 Дело в том что компонент не просто RichEdit, a NotesRichText ... точно даже не известно дочерний ли это класс от простого RichEdit... посылка WM_GETTEXT результатов тоже не даёт... Хендлы точно верные... я их в проге функцией WindowFromPoint(CrPos) нахожу... для точности ws32.exe проверял... там же смотрел окно нормально получает сообщения, только в ответ нечего не получаю... |
|
Создано: 09 ноября 2007 09:43 · Личное сообщение · #12 |
|
Создано: 12 ноября 2007 09:44 · Личное сообщение · #13 |
|
Создано: 13 ноября 2007 09:53 · Личное сообщение · #14 |
|
Создано: 13 ноября 2007 11:07 · Личное сообщение · #15 |
|
Создано: 13 ноября 2007 14:01 · Поправил: Grom_ · Личное сообщение · #16 Alexus2006 пишет: Что за сообщения WM_USER+0x4 и WM_USER+0x7 ? это собственные сообщения, возможно на них есть нужная функциональность.... К ней прибегают когда нужно что то сделать через МЕссаги, но не стандартное. Как правело такие месаги сами посылают и сами обрабатывают, они не стандартны мало кто их поймет вообще по идее , если КустомЕдит поддерживает выделение и копирование, можно месагами выдернуть текст. Если нет то нуно смотреть организацию Кустом Едита и отлавливать строчку(и) в памяти. Хотя это только предположение... |
|
Создано: 15 ноября 2007 14:21 · Поправил: Alexus2006 · Личное сообщение · #17 |
|
Создано: 15 ноября 2007 19:44 · Личное сообщение · #18 |
eXeL@B —› Программирование —› RichEdit в чужой проге |