Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.031 c
14-1125973502
boalse
2005-09-06 06:25
2005.09.25
Как взламывают зашифрованные данные?


1-1125436052
SergProger
2005-08-31 01:07
2005.09.25
Перетаскивание формы


3-1123481684
tormoz
2005-08-08 10:14
2005.09.25
Вертикальный DBGrid


2-1124192413
Настя
2005-08-16 15:40
2005.09.25
Запуск консольной программы с параметрами.


4-1121990214
Flood_control
2005-07-22 03:56
2005.09.25
Закрытие приложений при запуске