Текущий архив: 2005.09.25;
Скачать: 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 вся ветка
Текущий архив: 2005.09.25;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.038 c