![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
взять текст из RichEdit
ink © (2005-07-30 12:01:00)Здраствуйте!
Нашёл хэндл RichEdit из чужой программы, как мне вытащить оттуда текст? Будучи благодарен!
ink (2005-08-02 00:24:00) [1]//XProger ©
Ты гений! :)
Всё работает!
Благодарю всех!
begin...end (2005-07-31 08:56:00) [2]> XProger © (31.07.05 7:50) [9]
> GetMem(buf, 65535)
Гениально. Вначале узнать, какова же длина получаемого текста (WM_GETTEXTLENGTH или GetWindowTextLength)-- это, конечно, некошерно. Вместо этого нужно сразу выделить кучу памяти. 64 КБ для однострочного edit'а -- неплохо.
> XProger © (31.07.05 7:52) [10]
Как видите, КТО тут извращенец -- это большой вопрос.
XProger (2005-07-31 07:52:00) [3]P.S.
А вы те ещё извращенцы ;)
XProger (2005-07-31 07:50:00) [4]
var
h : DWORD;
buf : PChar;
ch : LongInt;
begin
// Edit1.Text - класс окна
// Edit2.Text - класс компонента в этом окне
// Memo1.Text - результат
h := FindWindowEx(FindWindow(PChar(Edit1.Text),nil), 0, PChar(Edit2.Text), nil);
if h = 0 then
ShowMessage('Нет такого компонента.')
else
begin
GetMem(buf, 65535);
SendMessage(h, WM_GETTEXT, 65535, integer(buf));
Memo1.Text := buf;
FreeMem(buf);
end;
end;
Leonid Troyanovsky (2005-07-30 19:45:00) [5]
> GuAV © (30.07.05 19:40) [7]
> И кстати, мне кажется лучше не внедрять dll, а обойтись
> вызовами VirtualAllocEx и ReadProcessMemory.
Почему бы ее не внедрить? Возьмет выделенное и снимется.
А VirtualAllocEx в 9х нет.
--
Regards, LVT.
GuAV (2005-07-30 19:40:00) [6]
> Для использования оного нужно внедрятся в чужой
> процесс.
Оно понятно, я просто указал на возможную проблему - ограничение 64К...
И кстати, мне кажется лучше не внедрять dll, а обойтись вызовами VirtualAllocEx и ReadProcessMemory.
Leonid Troyanovsky (2005-07-30 19:18:00) [7]
> GuAV © (30.07.05 19:05) [5]
> Rich Edit: If the text to be copied exceeds 64K, use either
> the EM_STREAMOUT or EM_GETSELTEXT message.
Для использования оного нужно внедрятся в чужой процесс.
Например, http://rsdn.ru/Forum/?mid=471943
--
Regards, LVT.
GuAV (2005-07-30 19:05:00) [8]Rich Edit: If the text to be copied exceeds 64K, use either the EM_STREAMOUT or EM_GETSELTEXT message.
begin...end (2005-07-30 18:58:00) [9]Возможно также, что не выделена память под буфер, предназначенный для получения текста.
Leonid Troyanovsky (2005-07-30 15:42:00) [10]
> ink (30.07.05 15:37) [2]
> Не работает :(
Уверен, что RichEdit? Что за приложение?
Уверен, что правильный хендл?
Уверен, что WM_GETTEXT?
Тогда, код в студию.
--
Regards, LVT.
ink (2005-07-30 15:37:00) [11]Не работает :(
Leonid Troyanovsky (2005-07-30 12:29:00) [12]
> ink (30.07.05 12:01)
> Нашёл хэндл RichEdit из чужой программы, как мне вытащить
> оттуда текст? Будучи благодарен!
Попробуй SendMessage WM_GETTEXT.
--
Regards, LVT.