Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

взять текст из 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо