Вниз
Скачать: CL | DM;

взять текст из RichEdit   Найти похожие ветки 

 
ink   (2005-07-30 12:01) [0]

Здраствуйте!
Нашёл хэндл RichEdit из чужой программы, как мне вытащить оттуда текст? Будучи благодарен!


 
Leonid Troyanovsky ©   (2005-07-30 12:29) [1]


> ink   (30.07.05 12:01)  
> Нашёл хэндл RichEdit из чужой программы, как мне вытащить
> оттуда текст? Будучи благодарен!


Попробуй SendMessage WM_GETTEXT.

--
Regards, LVT.


 
ink   (2005-07-30 15:37) [2]

Не работает :(


 
Leonid Troyanovsky ©   (2005-07-30 15:42) [3]


> ink   (30.07.05 15:37) [2]
> Не работает :(


Уверен, что RichEdit? Что за приложение?
Уверен, что правильный хендл?
Уверен, что WM_GETTEXT?

Тогда, код в студию.

--
Regards, LVT.


 
begin...end ©   (2005-07-30 18:58) [4]

Возможно также, что не выделена память под буфер, предназначенный для получения текста.


 
GuAV ©   (2005-07-30 19:05) [5]

Rich Edit: If the text to be copied exceeds 64K, use either the EM_STREAMOUT or EM_GETSELTEXT message.


 
Leonid Troyanovsky ©   (2005-07-30 19:18) [6]


> 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:40) [7]


> Для использования оного нужно внедрятся в чужой
> процесс.

Оно понятно, я просто указал на возможную проблему - ограничение 64К...

И кстати, мне кажется лучше не внедрять dll, а обойтись вызовами VirtualAllocEx и ReadProcessMemory.


 
Leonid Troyanovsky ©   (2005-07-30 19:45) [8]


> GuAV ©   (30.07.05 19:40) [7]

> И кстати, мне кажется лучше не внедрять dll, а обойтись
> вызовами VirtualAllocEx и ReadProcessMemory.


Почему бы ее не внедрить? Возьмет выделенное и снимется.
А VirtualAllocEx в 9х нет.

--
Regards, LVT.


 
XProger ©   (2005-07-31 07:50) [9]


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;


 
XProger ©   (2005-07-31 07:52) [10]

P.S.
А вы те ещё извращенцы ;)


 
begin...end ©   (2005-07-31 08:56) [11]

> XProger ©   (31.07.05 7:50) [9]

> GetMem(buf, 65535)

Гениально. Вначале узнать, какова же длина получаемого текста (WM_GETTEXTLENGTH или GetWindowTextLength)-- это, конечно, некошерно. Вместо этого нужно сразу выделить кучу памяти. 64 КБ для однострочного edit"а -- неплохо.

> XProger ©   (31.07.05 7:52) [10]

Как видите, КТО тут извращенец -- это большой вопрос.


 
ink   (2005-08-02 00:24) [12]

//XProger ©
Ты гений! :)
Всё работает!

Благодарю всех!



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
14-1125872684
KilkennyCat
2005-09-05 02:24
2005.09.25
5 сентября. С Днем Рождения!


3-1123828146
Rentgen
2005-08-12 10:29
2005.09.25
ADO. Как сделать отбор по нескольким записям Master-Slave?


3-1123592233
Shopot
2005-08-09 16:57
2005.09.25
ADO и база данных Access.


14-1125452640
Progamer
2005-08-31 05:44
2005.09.25
подозрительный сервак закачки музыки


14-1125580110
KilkennyCat
2005-09-01 17:08
2005.09.25
1 cентября. С Днем рождения!




   Наверх