![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
RichEdit20A. Как взять текст?
DmitrichJ © (2007-05-21 02:18:00)Привет, мастера. Собственно и весь вопрос. Как взять текст данного класса из чужого окна? Хэндлы окна и объекта имеются.
Спасибо.
Leonid Troyanovsky (2007-05-22 23:41:00) [1]
> DmitrichJ (22.05.07 22:04) [30]
> Где у меня? Я пример Rouse_ не использую.
У уважаемого Rouse_ © с этим, как раз, нормально.
--
Regards, LVT.
DmitrichJ (2007-05-22 22:04:00) [2]?
Где у меня? Я пример Rouse_ не использую.
Leonid Troyanovsky (2007-05-22 19:59:00) [3]
> DmitrichJ (22.05.07 19:42) [28]
> Кнопку индентифицировал, но отследить нажатие не получается
У тебя ошибка в 17 строке.
--
Regards, LVT.
DmitrichJ (2007-05-22 19:42:00) [4]Кнопку индентифицировал, но отследить нажатие не получается =(
Leonid Troyanovsky (2007-05-22 18:06:00) [5]
> DmitrichJ (22.05.07 15:49) [26]
> Последний вопрос. в чужом окне есть кнопка 'Button'. Можно
> ли отследить её надатие в хуке?
Окна класса 'BUTTON' получают сообщения BM_*, например, BM_CLICK. Идентифицировать кнопку можно, например, GetDlgCtrlId.
--
Regards, LVT.
DmitrichJ (2007-05-22 15:49:00) [6]Последний вопрос. в чужом окне есть кнопка 'Button'. Можно ли отследить её надатие в хуке?
Leonid Troyanovsky (2007-05-22 15:41:00) [7]
> DmitrichJ (22.05.07 15:29) [24]
> А как по координатам? Или вообще как узнать
> какие классы есть в чужом окне.
EnumChildWindows, GetClassName, GetWindowRect
--
Regards, LVT.
DmitrichJ (2007-05-22 15:29:00) [8]64К, мне за уши. А как по координатам? Или вообще как узнать какие классы есть в чужом окне. Штудирую инет в доль и поперёк, но как-то всё не то.
Leonid Troyanovsky (2007-05-22 14:51:00) [9]
> DmitrichJ (22.05.07 12:59) [20]
> А если в чужоп окне 2 RichEdit20A? По каким параметрам можно
> найти нужное?
Например, по z-order. Или по координатам.
--
Regards, LVT.
Leonid Troyanovsky (2007-05-22 14:49:00) [10]
> DmitrichJ (22.05.07 12:53) [19]
> надеюсь, можно больше 255 символов?
Хоть 64К.
Ну, а если больше, то подход такой, как в [1]
для EM_GETSELEXT, EM_STREAMOUT.
--
Regards, LVT.
Rouse_ (2007-05-22 13:24:00) [11]
> А то в начале пример, столько писанины, а толку?
Первый пример делает тоже самое, только через EM_
DmitrichJ (2007-05-22 12:59:00) [12]А если в чужоп окне 2 RichEdit20A? По каким параметрам можно найти нужное?
DmitrichJ (2007-05-22 12:53:00) [13]Хм... действительно работает.... круть.... А то в начале пример, столько писанины, а толку? Толька я не провверил, надеюсь, можно больше 255 символов?
Leonid Troyanovsky (2007-05-21 15:37:00) [14]
> Rouse_ © (21.05.07 13:51) [17]
> Кстати мне почему-то казалось, что для RICHEDIT система
> не делает проецируемый файл. Разве под 3.1 он уже существовал?
Она делает для WM_GETTEXT. А для, скажем, EM_ - уже не будет.
Вот например, для Wordpad (w2k3):
var
buf: array [0..255] of Char;
h : HWND;
begin
h := FindWindow('WordpadClass', nil);
h := FindWindowEx(h, 0, 'RICHEDIT50W', nil);
ShowMessage(Format('%d %s', [SendMessage(h, WM_GETTEXT, SizeOf(buf), LParam(@buf)), buf]));
end;
все получается.
--
Regards, LVT.
Rouse_ (2007-05-21 13:51:00) [15]Кстати мне почему-то казалось, что для RICHEDIT система не делает проецируемый файл. Разве под 3.1 он уже существовал?
DmitrichJ (2007-05-21 13:32:00) [16]Не могу разобраться=(
Leonid Troyanovsky (2007-05-21 13:03:00) [17]
> DmitrichJ (21.05.07 12:45) [13]
> // Выделяем в нем память под структуру TGetTextLengthEx
А д.б.
{
var
buf: array [0..255] of Char;
}
ShowMessage(Format('%d %s', [SendMessage(h, WM_GETTEXT, SizeOf(buf), LParam(@buf)), buf]));
--
Regards, LVT.
Rouse_ (2007-05-21 12:56:00) [18]Если GetLastError возвращает ERROR_INVALID_HANDLE значит ProcessHandle кривой... Что-то ты видать там поправил.
DmitrichJ (2007-05-21 12:45:00) [19]Leonid Troyanovsky, здесь сейчас пользуюсь примером, но работать не хочет.
Вот в этом месте
// Выделяем в нем память под структуру TGetTextLengthEx
PStructTextLength := VirtualAllocEx(ProcessHandle, nil,
SizeOf(TGetTextLengthEx), MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
if PStructTextLength = nil then RaiseLastOSError;
DmitrichJ (2007-05-21 12:43:00) [20]Сейчас почему-то пишет A call to an OS function failed