![]() |
URLs aus Firefox-Instanzen auslesen
Hallo,
ich arbeite zur Zeit an einem Programm dass letztendlich einmal eine Art von persönlichem, zentralem "Internetcenter" darstellen soll, sprich mit eigenem Browser und maximaler Konfigurierbarkeit, erweiterten Möglichkeiten zur Verwaltung von Favoriten, Verlauf etc. Im Moment sitze ich gerade daran einen zentralen Verlauf zu programmieren der so funktionieren soll dass er mitliest welche URLs aufgerufen werden und diese nach Bedarf - je nach Einstellung - abspeichert, verschiebt oder auch erst konfiguriert und dann abspeichert. Für den IE habe ich zum Auslesen der URLs aller Instanzen folgende Methode benutzt:
Code:
Das Ganze funktioniert auch reibungslos, jedoch leider nur für den IE. Da aber ebenso der Firefox weitverbreitet ist möchte ich das selbe für diesen Browser implementieren, finde dazu jedoch keinen Ansatz. :(
uses shdocvw;
procedure TForm1.Button2Click(Sender: TObject); var x: Integer; Sw: IShellWindows; begin sw := CoShellWindows.Create; for x := 0 to SW.Count - 1 do Listbox1.Items.Add((Sw.Item(x) as IWebbrowser2).LocationUrl); end; Weiß jemand Rat ? |
Re: URLs aus Firefox-Instanzen auslesen
Hat denn niemand eine Idee :(
Ich habe zum Auslesen von URLs des Internet Explorer noch folgenden Quellcode gefunden:
Delphi-Quellcode:
Aufrufen kann man dann ganz einfach über
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 IE<>nil then lb.Items.Add(IE.LocationURL); end; end; end; end; begin lb.Clear; EnumWindows(@EnumWindowsProc, integer(lb)); end;
Delphi-Quellcode:
Allerdings funktioniert das Ganze wieder nur für den IE :( Würde es vielleicht funktionieren wenn man das 'Internet Explorer_Server' durch den Namen des Firefox ersetzen würde ? 'Firefox' und 'Mozilla Firefox' haben jedenfalls nicht geklappt
procedure TForm1.Button1Click(Sender: TObject);
begin GetIEWindows(ListBox1); end; :( :( :( |
Re: URLs aus Firefox-Instanzen auslesen
Zitat:
Aber ich meine, wir hatten das schon mal mit dem Firefox. Benutzt mal die Forensuche. |
Re: URLs aus Firefox-Instanzen auslesen
Zitat:
ich habe die Forensuche mit "Firefox AND URL" gefüttert, allerdings in den Ergebnissen nicht wirklich etwas passendes gefunden. :( Bist du sicher dass es schon einmal etwas in der Richtung in diesem Forum gab ? |
Re: URLs aus Firefox-Instanzen auslesen
Hi,
Probiere mal diese Funktion:
Delphi-Quellcode:
procedure GetCurrentURL(out URL, Title: string);
var DDEClient : TDDEClientConv; p, q: PChar; i: Integer; begin DDEClient := TDDEClientConv.Create(nil); try with DDEClient do if SetLink('IExplore', 'WWW_GetWindowInfo') or SetLink('Netscape', 'WWW_GetWindowInfo') or SetLink('Mosaic', 'WWW_GetWindowInfo') or SetLink('Netscp6', 'WWW_GetWindowInfo') or SetLink('Mozilla', 'WWW_GetWindowInfo') or SetLink('Firefox', 'WWW_GetWindowInfo') then p := RequestData('0xFFFFFFFF') else raise Exception.Create('Could not establish browser DDE link'); if Assigned(p) then try q := p; Assert(q^ = '"'); SetLength(URL, StrLen(q)); Inc(q); i := 0; while q^ <> '"' do begin if (q^ = '\') and (q[1] = '"') then Inc(q); Inc(i); URL[i] := q^; Inc(q); end; SetLength(URL, i); SetLength(Title, StrLen(q)); i := 0; Inc(q, 3); while q^ <> '"' do begin if (q^ = '\') and (q[1] = '"') then Inc(q); Inc(i); Title[i] := q^; Inc(q); end; SetLength(Title, i); finally StrDispose(p); end else raise Exception.Create('Could not fetch browser data'); finally DDEClient.Free; end; end; |
Re: URLs aus Firefox-Instanzen auslesen
Hi,
super, die Procedure funktioniert :dp: Habe sie nur etwas umgeändert damit das Programm nicht beendet wird wenn kein Browser offen ist. Nun versuche ich gerade die Prozedur so umzustellen, dass alle Instanzen ausgelesen werden. Klappt aber noch nicht so wirklich :( |
Re: URLs aus Firefox-Instanzen auslesen
Welche Units muss man einbinden, damit es auch mit dem Kompilieren klappt. :roll:
|
Re: URLs aus Firefox-Instanzen auslesen
Zitat:
|
Re: URLs aus Firefox-Instanzen auslesen
Danke.
|
Re: URLs aus Firefox-Instanzen auslesen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz