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

Вниз

Помогите узнать, куда ведет Flash Banner (iHTMLObjectElement)   Найти похожие ветки 

 
Googler2007   (2006-12-19 13:45) [0]

Вопрос не самый тривиальный. Нужно найти на странице все flash-объекты и узнать, на какую страницу они ссылаются.

Упрощенно дела обстоят так:

1) На форме лежит TWebBrowser, в который при старте программы загружается, допустим, http://lenta.ru
2) После загрузки сайта выполняется код поиска на странице всех объектов (iHTMLObjectElement), у которых classid = clsid:d27cdb6e-ae6d-11cf-96b8-444553540000 (т.е. всех flash-баннеров)
3) Далее мне необходимо понять, куда ведут эти flash-баннеры. Поскольку для того, чтобы это понять, по нему нужно кликнуть, мне необходимо узнать Handle этого flash-баннера.
4) Я знаю, что flash-баннер (да и любой flash-объект на странице) имеет класс - MacromediaFlashPlayerActiveX. Казалось бы все просто - нужно сделать что-то вроде этого:

var
 HandleList:TStringList;

function ReturnWindow(H:HWND;l:LPARAM):boolean; stdcall;
var
 Buff: array [0..255] of Char;
begin
 GetClassName(H, Buff, SizeOf(Buff));
 If AnsiLowerCase(String(Buff))="macromediaflashplayeractivex" then
 HandleList.Add(IntToStr(H));
 result:=true;
end;

function GetFlashInWebBrowserHandle(Web1 : TEmbeddedWB; FlashNum:Integer):HWND;
var
 I:Integer;
begin
 HandleList:=TStringList.Create;
 try
   EnumChildWindows(Web1.handle, @ReturnWindow, 0);
   if FlashNum>HandleList.Count-1 then
     begin
       Result:=0;
       Exit;
     end;
   Result:=StrToInt(HandleList[FlashNum]);
 finally
   HandleList.Free;
 end;
end;

5) Но есть 1 огромная проблема: порядок нахождения окон с классом "macromediaflashplayeractivex" через EnumChildWindows не соответствует порядку нахождения баннеров через iHTMLDocument2.all. Т.е. в коллекции iHTMLDocument.all элементы object (сейчас я говорю только о flash, с clsid:d27cdb6e-ae6d-11cf-96b8-444553540000) идут в другом порядке, нежели через поиск окон.

Не имел ли дела кто-нибудь с подобной проблемой? Как при нахождении iHTMLObjectElement (flash) в коллекции iHTMLDocument.all узнать, на какую страницу он ссылается?

P.S. Вариант Source flash-объекта (его-то узнать как раз не проблема) загружать в отдельный WebBrowser, искать в этом отдельном WebBrowser"е его хэндл (так как он там один) и посылать сообщения WM_LBUTTONDOWN, WM_LBUTTONUP - не годится и вот по какой причине:
Обычно у очень многих flash-объектов сорс динамический и прямой ссылки к файлу узнать нельзя. Т.е. сорс баннера может быть например такой:
http://testsite.ru/ad/showad/ad.php
И заново загрузив flash баннер по этой ссылке я могу уже получить совершенно другой баннер.

Понимаю - проблема очень сложная, но все-таки не теряю надежды, что ее можно как-то решить.


 
Вася   (2006-12-20 16:03) [1]

> Как при нахождении iHTMLObjectElement (flash) в коллекции
> iHTMLDocument.all узнать, на какую страницу он ссылается?

Попробуй изучить свойства объекта flash, например вызвав функцию View_Properts и передав ей параметром ID объекта

function View_Properts(obj)
{
   var t = "<br>";
   for (var i in obj) { t += i+" = "+obj[i]+"\n<br>"; }
   document.write(t);
}

может чего и накопаешь



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

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

Наверх




Память: 0.47 MB
Время: 0.021 c
15-1182793452
oxffff
2007-06-25 21:44
2007.07.22
Codegear to drop winforms designer!!!


2-1182500300
First
2007-06-22 12:18
2007.07.22
Анимация


15-1182417644
Juice
2007-06-21 13:20
2007.07.22
Упавшая вижуал студия 2005.


2-1183037115
Nikfel
2007-06-28 17:25
2007.07.22
Как вывести текст по центру на canvas.


15-1181914889
sergeii
2007-06-15 17:41
2007.07.22
Запуск Програмы из под Делфи