Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.22;
Скачать: CL | DM;

Вниз

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

 
Plast   (2011-12-28 15:27) [0]

Вкратце есть интерфейс 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, еще поддерживает?


 
Сергей М. ©   (2011-12-28 15:33) [1]

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


 
Dimka Maslov ©   (2011-12-28 15:42) [2]

Все, конечно же, нельзя. Но можно составить список интерфейсов, которые предположительно поддерживаются, и через QueryInterface проверить каждый из них.


 
Юрий Зотов ©   (2011-12-28 15:42) [3]

IAccessible документирован в MSDN - там все и узнать.


 
Plast   (2011-12-28 15:44) [4]

Я просто не очень понимаю всей системы но вот, таким способом

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 выдает что интерфейс не поддерживается. Вот либо я что-то не то делаю, либо так сделать невозможно?


 
Юрий Зотов ©   (2011-12-28 15:48) [5]

> можно вытянуть текст с Internet Explorera

Не только с Internet Explorera. Так можно вытянуть текст с любого оконного контрола, который поддерживает IAccessible. Например, из EDIT.

> насколько мне хватает понимания, текс тянется из какогото htmlElementa

Исходя из предыдущего, HTML тут ни при чем.


 
Plast   (2011-12-28 15:53) [6]

Так вот мне нужно именно из IE тянуть, я бы конечно мог вытянуть через сам IE,
ну там Document.all.tags("bla bla").innertext да токо вот беда, если в страницу подгружен фрейм с другого домена, то есть URL отличается от основной страницы, из-за Cross Domain Policy (так кажется она называется) експлорер блокирует такие попытки.


 
Dimka Maslov ©   (2011-12-28 16:01) [7]

У IHtmlDocument2 есть свойство Frames, через которое и надо работать.


 
Plast   (2011-12-29 18:59) [8]


> Dimka Maslov


Спасибо за второй ответ!



Страницы: 1 вся ветка

Текущий архив: 2012.04.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
2-1324569664
brother
2011-12-22 20:01
2012.04.22
Закрытие файла...


2-1325185725
Plast
2011-12-29 23:08
2012.04.22
Конвертировать String в GUID?


2-1325168892
Gu
2011-12-29 18:28
2012.04.22
Pointer


15-1324067402
Юрий
2011-12-17 00:30
2012.04.22
С днем рождения ! 17 декабря 2011 суббота


2-1325060038
ply
2011-12-28 12:13
2012.04.22
Присвоить массив