![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Клик по объекту в WebBrowser'е [D6, Win2k]
Сережа550 © (2004-04-19 13:01:00)Уважаемые знатоки, помогите, пожалуйста разобраться с такой ситуацией:
Есть WebBrowser. В событии OnDocumentComplete идет поиск объектов загруженной страницы. Привожу код:
procedure TBrowser.WebBrowserDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
I:Integer;
iDoc :IHtmlDocument2;
iDisp: IDispatch;
iElement:IHTMLElement;
iObjectElement:HTMLObjectElement;
begin
iDoc:=(pDisp as IWebBrowser2).Document as IHtmlDocument2;
for I := 1 to iDoc.All.Length do
begin
iDisp:=iDoc.All.Item(Pred(I),0);
iDisp.QueryInterface(IHTMLElement, iElement);
if (iElement.TagName = 'OBJECT') then
begin
iElement.QueryInterface(iHtmlObjectElement,iObjectElement);
If iObjectElement.classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' then //В данном случае ищутся Flash-баннеры
begin
{!!!!!!}
end;
end;
end;
end;
Возможно ли у iHTMLObjectElement'а взять его дескриптор и программно кликнуть по объекту?
Что-то вроде:
var
CurObj: THandle;
iObjElement:iHTMLElement;
begin
CurObj:=iObjElement.Handle;
PostMessage(CurObj, WM_LBUTTONDOWN, 0, MAKELPARAM(0,0));
PostMessage(CurObj, WM_LBUTTONUP, 0, MAKELPARAM(0,0));
end;
Естественно, вышеприведенный код не работает, потому что хендла, вроде, у объекта нет...
Вообщем, возможно ли каким-то образом кликнуть левой кнопкой мышки по найденному объекту (желательно с заданными координатами относительно этого объекта)?
Сережа550 (2004-04-20 10:53:00) [1]Спасибо. Мысль хорошая... Перебрать окна и послать им комманды еще можно, но как через EnumChildWindows получить хендлы дочерних окон и положить их в массив? Я в этом не особо разбираюсь... Сейчас отдельным вопросом спрошу насчет этого.
nikkie (2004-04-19 19:35:00) [2]вообще-то про IHTMLElement::click написано
Simulates a click by causing the onclick event to fire.
то есть если прицеплен скрипт в onclick, то он сработает.
мне кажется флеши лучше перебрать просто как детей эксплореровского окна с помощью EnumWindows, проверяя их WndClass. только потом аккуратно проверить на разных версиях IE, мне помнится, что окошки IE имеют немного отличную иерархию на разных версиях.
Сережа550 (2004-04-19 14:08:00) [3]Пробовал, процедура Click почему-то не работает на flash-объектах. Я так понял, она работает только на кнопках...
nikkie (2004-04-19 13:25:00) [4](... as IHTMLElement).click;