2
在Internet Explorer中,我可以使用IHtmlDocument2來獲取html文檔。如何在Chrome瀏覽器中獲取IHtmlDocument2?
function GetCurrentBrowserDOM: WideString;
var
hr: HRESULT;
CurrentIE: IWebbrowser2;
Wnd: HWND;
WndChild:HWND;
document: IDispatch;
RootNode: IHTMLDocument2;
innerHtml: WideString;
begin
Result := '';
Wnd := GetForegroundWindow;
WndChild := FindWindowEx(Wnd, 0,'Frame Tab', nil);
WndChild := FindWindowEx(WndChild, 0,'TabWindowClass', nil);
WndChild := FindWindowEX(WndChild, 0, 'Shell DocObject View', nil);
WndChild := FindWindowEX(WndChild, 0, 'Internet Explorer_Server', nil);//find Internet
CoInitialize(nil);
try
hr := GetIEFromHWND(WndChild, CurrentIE);
if hr = S_OK then
begin
document := CurrentIE.Document;
document.QueryInterface(IID_IHTMLDocument2, RootNode);
innerHtml := RootNode.body.innerHTML;
end;
finally
CoUninitialize;
end;
end;
function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
type
TObjectFromLResult = function(LRESULT: LRESULT; const IID: TGUID; wParam: WPARAM; out PObject): HRESULT; stdcall;
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);
Result := GetLastError;
if Result = S_OK then
(pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
finally
FreeLibrary(hInst);
end;
end;
我用spy ++來查找鉻框架句柄,我發現它們。
Wnd := GetForegroundWindow;
WndChild := FindWindowEx(Wnd, 0, 'Chrome_WidgetWin_0', nil);
WndChild := FindWindowEx(WndChild, 0, 'Chrome_RenderWidgetHostHWND', nil);
WndChild := FindWindowEx(WndChild, 0, 'CompositorHostWindowClass', nil);
但它無法捕捉到名爲ObjectFromLresult的函數中的結果。
ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
錯誤代碼我得到的是127
這是否意味着Chrome瀏覽器不支持這種方式來獲取其html文件?
如果答案是肯定的,是否有另一種方法來捕捉它?
非常感謝。
PS:我曾嘗試使用MSAA樹,但它沒有工作過(只能取標題)