2011-08-25 140 views
0

我试图通过Chrome插件从Internet Explorer 8访问IWebBrowser2对象。我可以在chrome插件没有安装的情况下访问它,但由于类名等不同,它不起作用。用于Internet Explorer的IWebBrowser2和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间谍++中,你可以看到窗口heirarachy是完全不同的)。

我可以访问我之后的“Tab”实例,但最终我需要用新URL(我将使用IWebBrowser2.Navigate来完成)“刷新”该选项卡。

我已经尝试导入Chrome的类型库,但是我找不到任何帮助的任何内容。所以我很乐意利用我需要的任何东西,以刷新我有办法处理的选项卡。

感谢

回答

2

如果您需要使用Chrome Frame的我已经在这里包了ActiveX控件: http://www.progdigy.com/?p=116

不过,我会建议你使用Delphi铬嵌入式相反,你将有更多的可能性。 http://code.google.com/p/delphichromiumembedded/

+0

当然,问题是关于IE浏览器托管的浏览器,而不是托管在Delphi应用程序中。 –

+0

谢谢,但大卫是正确的。我需要在IE中使用Chrome,而不是在Delphi应用程序/表单中。我查看了嵌入式版本,看它是否有任何代码可能有帮助,但可惜它没有。 – Jason

+0

我道歉,我读得太快了 –