IWebBrowser2 и плагин Chrome для Internet Explorer - PullRequest
0 голосов
/ 25 августа 2011

Я пытаюсь получить доступ к объекту IWebBrowser2 из Internet Explorer 8 с помощью подключаемого модуля Chrome. Я могу получить к нему доступ, когда плагин chrome не установлен, но он не работает из-за разных имен классов и т. Д.

Без хромированного плагина я могу использовать:

function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
  hInst: HWND;
  lRes: Cardinal;
  MSG: Integer;
  pDoc: IHTMLDocument2;
  ObjectFromLresult: TObjectFromLresult;
begin
  Result := 0;
  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;

Это не работает (я предполагаю), потому что нет интерфейса IHTMLDocument2 (используя MS Spy ++ вы можете видеть, что иерархия окон совершенно другая).

Я могу получить доступ к экземпляру «Tab», который мне нужен, но в конечном итоге мне нужно «обновить» эту вкладку новым URL-адресом (который я собирался использовать для выполнения IWebBrowser2.Navigate).

Я пытался импортировать библиотеку типов для Chrome, но я не могу найти там ничего, что могло бы помочь. Поэтому я рад использовать все, что мне нужно, чтобы обновить вкладку, к которой у меня есть дескриптор.

Спасибо

1 Ответ

2 голосов
/ 25 августа 2011

Если вам нужно использовать Chrome Frame, я поместил здесь элемент управления ActiveX: http://www.progdigy.com/?p=116

Но я бы посоветовал вам использовать Delphi Chromium Embedded Вместо этого у вас будет больше возможностей. http://code.google.com/p/delphichromiumembedded/

...