Я пытаюсь получить доступ к объекту 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, но я не могу найти там ничего, что могло бы помочь. Поэтому я рад использовать все, что мне нужно, чтобы обновить вкладку, к которой у меня есть дескриптор.
Спасибо