If you need to automate IE8, popup windows, then read this article
Window structure go like this:
Frame Tab,
TabWindowClass,
Shell DocObject View,
Internet Explorer_Server.
So, code would go something like this:
var Wnd: HWND; WndChild: HWND; IE: iwebbrowser2; begin webBrowser.Quit; try Wnd := FindWindow('IEFrame', nil); if Wnd = 0 then //No running instance of Internet Explorer so stop! begin showmessage('No Running instance of Internet Explorer'); exit; end; WndChild := FindWindowEX(Wnd , 0, 'Frame Tab', nil); Wnd := FindWindowEX(WndChild, 0, 'TabWindowClass', nil); Wnd := FindWindowEX(Wnd, 0, 'Shell DocObject View', nil); Wnd := FindWindowEX(Wnd, 0, 'Internet Explorer_Server', nil); if Wnd <> 0 then begin GetIEFromHWnd(Wnd, IE); //Get Iwebbrowser2 from Handle Result := IE; end; except on e: Exception do ShowMessage('GetIE' + e.Message); end; end 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;
I was using myCatch, to get windows structure.
This code which I left here is just to give you idea, I hope that soon I will upload example of automation IE6, IE7 and IE8...