Хобрук: Ваш путь к мастерству в программировании

IWebBrowser2 и плагин Chrome для Internet Explorer

Я пытаюсь получить доступ к объекту IWebBrowser2 из Internet Explorer 8 с помощью плагина Chrome. Я могу получить к нему доступ, когда плагин 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++, вы можете видеть, что иерархия окон совершенно другая).

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

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

Спасибо


Ответы:


1

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

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

25.08.2011
  • Конечно, речь идет о браузере, размещенном в IE, а не в приложении Delphi. 25.08.2011
  • Спасибо, но Дэвид прав. Мне нужно использовать Chrome в IE, а не в приложении/форме Delphi. Я просмотрел встроенную версию, чтобы узнать, есть ли в ней какой-либо код, который мог бы помочь, но, увы, этого не произошло. 26.08.2011
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..