URLs aus allen Browser-Fenstern ermitteln?

Hallo Wissende,
Ich kann keinerlei Delphi :frowning:
Hoffentlich könnt ihr mir helfen :smile:

  1. Kann hier jmd. den nachfolgenden Delphi-Code so umbauen, dass er aus ALLEN laufenden Browserfenstern (egal IE, Mozilla,Opera,Netscape) ALLE URLs ausliest und in eine Textdatei schreibt.

  2. Ich kann Delphi 4.0 bekommen, krieg man es damit auch als Völligunerfahrener hin, aus dem Code eine lauffähige EXE oder COM zu basteln?

Vielen Dank für die Aufmerkamkeit
Gruß
Reinhard
ps: Erst kommt der Delphi-Code, dann eine Erläuterung wozu ich das bräuchte.

Wie kann ich die 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;

Für ein selbstgeschriebenes Excel-VBA-Programm fehlt mir noch das I-Tüpfelchen, ich möchte die in Excel errechneten Werte direkt ins Internet , an ein geöffnetes Chatfenster, schicken, dazu habe ich mir eine html-Seite gebastelt, die ich mit Excel lokal starte und mit dem Excel-Befehl sendkeys die Daten schicke. Klappt auch wunderbar.
Nur muss ich dann immer einmalig beim Starten von Excel, aus der geöffneten Chat-Seite bzw. deren Quelltext eine SessionID (sess=xyz…) auslesen diese in die lokale html eintragen, dann läuft es.
Dies will ich nun automatisieren. Leider fand ich weder hier im Excel-ArchivForum noch bei direkten Anfragen an die hiesigen Excel-VBA Experten noch bei monatelanger Recherche im Internet einen passenden Excel-VBA-Code der dieses tut.
Per Zufall fand ich nun den vorstehenden Delphi-Code.