| 
      ...retrieve the URL of the foreground IE instance?
     | 
   
   
    | Autor: 
      Thomas Stutz     | 
   
  | [ Print tip 
] |   |   |   
 
 
 
uses 
  ActiveX, Shdocvw_tlb, MSHTML_TLB; 
 
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; 
 
function GetActiveIEURL: string; 
var 
  Document: IHtmlDocument2; 
  IE: IWebBrowser2; 
  Wnd: HWND; 
  WndChild: HWND; 
begin 
  Wnd := GetForeGroundWindow; 
  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 
      //Get Iwebbrowser2 from Handle 
      GetIEFromHWnd(WndChild, IE); 
      if IE <> nil then 
      begin 
        Result := IE.LocationURL; 
        // Document := IE.Document as IHtmlDocument2; 
      end; 
    end; 
  end; 
end; 
 
procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
  Caption := GetActiveIEURL; 
end; 
 
 
 
  
                       |