Home » Tipps & Tricks » Netzwerk/Internet » Browser » URLs aus allen IE-Fenstern ermitteln
URLs aus allen IE-Fenstern ermitteln
Folgender Code ermittelt in der Funktion GetIEWindows zunächst alle geöffneten Internet Explorer-Fenster und dann den URL der darin angezeigten Webseite.Damit der Code funktioniert, müssen die beiden Units Shdocvw_tlb.pas und MSHTML_TLB.pas angelegt werden. Dazu in Delphi über das Menü Komponenten/ActiveX importieren erst ‚Microsoft HTML Object Library‘ auswählen und auf ‚Unit anlegen‘ klicken. Das gleiche mit „Microsoft Internet Control“ wiederholen.
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; procedure GetIEWindows(lb: TListBox); function EnumWindowsProc (Wnd: HWND; lb: TListBox): BOOL; stdcall; var theClassname: array [0..128] of Char; caption: Array [0..128] of Char; IE: IWebbrowser2; WndChild: HWND; begin Result := True; Windows.GetClassname( Wnd, theClassname, Sizeof( theclassname )); if theClassname='IEFrame' then begin 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 if GetIEFromHWND(WndChild, IE)=S_OK then if IEnil then lb.Items.Add(IE.LocationURL); end; end; end; end; begin lb.Clear; EnumWindows(@EnumWindowsProc, integer(lb)); end;
Beispiel-Aufruf, der die URLs in einer ListBox mit Namen ListBox1 ausgibt:
procedure TForm1.Button1Click(Sender: TObject); begin GetIEWindows(ListBox1); end;