![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Програмно узнать все интерфейсы объекта.
Plast © (2011-12-28 15:27:00)Вкратце есть интерфейс IAccessible полученный вот таким способом:
procedure TForm1.tmrTimer(Sender: TObject);
var
lAcc: IAccessible;
lAccCh: OleVariant;
Par: idispatch;
lRes: Integer;
lName, lVal: WideString;
lAccChildCount: Integer;
begin
if Failed( AccessibleObjectFromPoint( Mouse.CursorPos, lAcc, lAccCh ) ) then
exit;
end;
Каким образом, можно узнать все интерфейсы, которые объект, скрывающийся за lAcc, еще поддерживает?
Plast (2011-12-29 18:59:00) [1]
> Dimka Maslov
Спасибо за второй ответ!
Dimka Maslov (2011-12-28 16:01:00) [2]У IHtmlDocument2 есть свойство Frames, через которое и надо работать.
Plast (2011-12-28 15:53:00) [3]Так вот мне нужно именно из IE тянуть, я бы конечно мог вытянуть через сам IE,
ну там Document.all.tags('bla bla').innertext да токо вот беда, если в страницу подгружен фрейм с другого домена, то есть URL отличается от основной страницы, из-за Cross Domain Policy (так кажется она называется) експлорер блокирует такие попытки.
Юрий Зотов (2011-12-28 15:48:00) [4]> можно вытянуть текст с Internet Explorera
Не только с Internet Explorera. Так можно вытянуть текст с любого оконного контрола, который поддерживает IAccessible. Например, из EDIT.
> насколько мне хватает понимания, текс тянется из какогото htmlElementa
Исходя из предыдущего, HTML тут ни при чем.
Plast (2011-12-28 15:44:00) [5]Я просто не очень понимаю всей системы но вот, таким способом
procedure TForm1.tmrTimer(Sender: TObject);
var
lAcc: IAccessible;
lAccCh: OleVariant;
Par: idispatch;
lRes: Integer;
lName, lVal: WideString;
lAccChildCount: Integer;
begin
if Failed( AccessibleObjectFromPoint( Mouse.CursorPos, lAcc, lAccCh ) ) then
exit;
lAcc.Get_accName( lAccCh, lName);
lAcc.Get_accSelection( lAccCh);
lAcc.Get_accName( lAccCh, lVal);
lAcc.Get_accValue( lAccCh, lVal);
mem.Text := lName+ sLineBreak + '***' + sLineBreak +lVal {+ sLineBreak + IntToStr( lAccChildCount )};
end;
можно вытянуть текст с Internet Explorera на сколько мне хватает понимания, текс тянется из какогото htmlElementa но если попробовать привести
HtmlElem:= lAcc as IHtmlElement; то при наведении на текст в IE выдает что интерфейс не поддерживается. Вот либо я что-то не то делаю, либо так сделать невозможно?
Dimka Maslov (2011-12-28 15:42:00) [6]Все, конечно же, нельзя. Но можно составить список интерфейсов, которые предположительно поддерживаются, и через QueryInterface проверить каждый из них.
Юрий Зотов (2011-12-28 15:42:00) [7]IAccessible документирован в MSDN - там все и узнать.
Сергей М. (2011-12-28 15:33:00) [8]Никаким, если сам объект так или иначе не предоставляет соответсвующей функциональности.