Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как получить IWebbrowser2 Interface зная handle, окна обозревателя IE? 
:(
    Опции темы
Smailik
  Дата 10.5.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 8.5.2006

Репутация: нет
Всего: нет



Задача следующая - с помощью скрипта открывается окно IE без панели навигации, строки состояния и с заблоченой правой кнопкой мыши. Приведенная ниже процедура отлавливает все окна IE а это ловить не хочет smile

Код

procedure TForm1.Button2Click(Sender: TObject);
var 
  Hx: THandle;
  P: array[0..256] of Char;
  Item: TListItem;
begin
  ListView1.Items.Clear;
  Hx := FindWindow(nil, nil);
  GetClassName(Hx, P, SizeOf(P));
  if string(P) = 'IEFrame' then begin
    Item := ListView1.Items.Add;
    Item.SubItems.Add(IntToStr(Hx));
    Item.Caption := GetText(Hx);
  end;
  while Hx <> 0 do begin
    Hx := GetWindow(Hx, GW_HWNDNEXT);
    GetClassName(Hx, P, SizeOf(P));
    if string(P) = 'IEFrame' then begin
      Item := ListView1.Items.Add;
      Item.SubItems.Add(IntToStr(Hx));
      Item.Caption := GetText(Hx);
    end;
  end;
end;


Если меняю 
  Hx := FindWindow(nil, nil);
на
  Hx := FindWindow(nil, 'Amadeus Vista');
то оно его ловит...
однако  в дальнейшем в процедуре
Код

var
  IE : IWebBrowser2;
  Sw: IShellWindows;
  x: Integer;
  iDoc : IHTMLDocument2;
  y: Integer;
  Item: TListItem;
  W : OleVariant; //IHTMLWindow2;
  tmp : OleVariant;
begin
  y :=0;
  ListView2.Clear;
  sw := CoShellWindows.Create;
  if ListView1.Selected <> nil then begin
    for x := SW.Count - 1 downto 0 do
      if (Sw.Item(x) as IWebbrowser2).hwnd = StrToInt(ListView1.Selected.SubItems[0]) then begin
        RichEdit1.Text := variant(Sw.Item(x)).Document.body.innerText;
        (Sw.Item(x) as IWebbrowser2).Document.QueryInterface(IID_IHTMLDocument2,iDoc);
        if iDoc.parentWindow.frames.length > 0 then
          for y := iDoc.parentWindow.frames.length-1 downto 0 do begin
            Item := ListView2.Items.Add;
            Item.SubItems.Add(IntToStr(y));
            tmp := y;
            w := iDoc.parentWindow.frames.item(tmp);
            if w.name <> '' then Item.Caption := w.name
            else Item.Caption := '###' + IntToStr(y);
          end
        else begin
            Item := ListView2.Items.Add;
            Item.SubItems.Add(IntToStr(y));
            Item.Caption := '####';
        end;
        break;
      end;
  end;
end;

текст из окна не выводжится - пусто. хотя он там есть и фрэймов не находит smile

кто-нибудь уже работал с системами бронирвания компании Amadeus? как они маскирую окна терминалов? скачать ява скрипт который открывает такое окно не получается. помогите плиз где грабли? 
PM MAIL   Вверх
Smailik
Дата 11.5.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 8.5.2006

Репутация: нет
Всего: нет



нашел вот такой вариант решения - не пашет ни с какими окнами smile где грабли? подскажите плиииииз!!!  smile  
Код

uses
  ActiveX, Shdocvw_tlb, MSHTML_TLB;

type
  TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; wParam: wParam;
    out pObject): HRESULT; 
  stdcall;

function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
  hInst: HWND;
  lRes: Cardinal;
  Msg: Integer;
  pDoc: IHTMLDocument2;
  ObjectFromLresult: TObjectFromLresult;
begin
  hInst := LoadLibrary('Oleacc.dll'); @ObjectFromLresult :=
    GetProcAddress(hInst, 'ObjectFromLresult');
  if @ObjectFromLresult <> nil then 
  begin
    try
      Msg := RegisterWindowMessage('WM_HTML_GETOBJECT');
      SendMessageTimeOut(WHandle, Msg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
      Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
      if Result = S_OK then
        (pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp,
          IWebbrowser2, IE);
    finally
      FreeLibrary(hInst);
    end;
  end;
end;

 
PM MAIL   Вверх
Smailik
Дата 12.5.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 8.5.2006

Репутация: нет
Всего: нет



 smile как выяснилось класс окна -> #32770
такой же класс как и у Rambler-ICQ

 smile SOS! подскажите как из него выдрать интерфейс IE и как вообще узнать если там такой интерфейс? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.