下面就是一个例子展示如何从打开的Internet Explorer中取得其网页元素的HTML源代码:
const RSPSIMPLESERVICE = 1; RSPUNREGISTERSERVICE = 0;
type TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam; out pObject): HRESULT; stdcall;
function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT; 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); if Result = S_OK then (pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE); finally FreeLibrary(hInst); end; end; end;
procedure TForm1.Button1Click(Sender: TObject); var All: IHtmlElementCollection; HtmlElement: IHtmlElement; I: Integer; Document: IHtmlDocument2; IE: IWebBrowser2; Wnd: HWND; WndChild: HWND; begin Wnd := FindWindow('IEFrame', nil); if Wnd = 0 then begin MessageDlg('No Running instance of Internet Explorer!', mtError, [mbOK], 0); end; // walk Shell DocObject View->Internet Explorer_Server WndChild := FindWindowEX(Wnd, 0, 'Shell DocObject View', nil); if WndChild <> 0 then begin WndChild := FindWindowEX(WndChild, 0, 'Internet Explorer_Server', nil); if WndChild <> 0 then begin GetIEFromHWnd(WndChild, IE); //Get Iwebbrowser2 from Handle Document := IE.Document as IHtmlDocument2; if Assigned(Document) then begin All := Document.All; for I := 0 to All.Length - 1 do begin HtmlElement := All.item(i, 0) as IhtmlElement; SourceView.Lines.Add(IntToStr(i) + ' ' + HTmlElement.innerHTML); end; end; end; end; end;
|
请发表评论