Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Програмно узнать все интерфейсы объекта.


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]

Никаким, если сам объект так или иначе не предоставляет соответсвующей функциональности.


Наверх

Титульная страница Поиск, карта сайта Написать письмо