Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi URLs aus Firefox-Instanzen auslesen (https://www.delphipraxis.net/40651-urls-aus-firefox-instanzen-auslesen.html)

Wannabe 18. Feb 2005 22:14


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:
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;
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. :(

Weiß jemand Rat ?

Wannabe 21. Feb 2005 21:58

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:
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;
Aufrufen kann man dann ganz einfach über

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  GetIEWindows(ListBox1);
end;
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
:( :( :(

Luckie 21. Feb 2005 22:00

Re: URLs aus Firefox-Instanzen auslesen
 
Zitat:

Zitat von Wannabe
Allerdings funktioniert das Ganze wieder nur für den IE

Ist ja auch irgendwie logisch. Du benutzt ja auch das ActiveX bzw. die Typbibliothek des IE.

Aber ich meine, wir hatten das schon mal mit dem Firefox. Benutzt mal die Forensuche.

Wannabe 23. Feb 2005 16:44

Re: URLs aus Firefox-Instanzen auslesen
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Wannabe
Allerdings funktioniert das Ganze wieder nur für den IE

Ist ja auch irgendwie logisch. Du benutzt ja auch das ActiveX bzw. die Typbibliothek des IE.

Aber ich meine, wir hatten das schon mal mit dem Firefox. Benutzt mal die Forensuche.

Hi Luckie,

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 ?

toms 23. Feb 2005 16:48

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;

Wannabe 6. Mär 2005 19:28

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 :(

sniper_w 6. Mär 2005 20:50

Re: URLs aus Firefox-Instanzen auslesen
 
Welche Units muss man einbinden, damit es auch mit dem Kompilieren klappt. :roll:

Wannabe 6. Mär 2005 21:18

Re: URLs aus Firefox-Instanzen auslesen
 
Zitat:

Zitat von sniper_w
Welche Units muss man einbinden, damit es auch mit dem Kompilieren klappt. :roll:

Die "ddeman"-Unit.

sniper_w 6. Mär 2005 21:20

Re: URLs aus Firefox-Instanzen auslesen
 
Danke.

Tubos 6. Mär 2005 21:23

Re: URLs aus Firefox-Instanzen auslesen
 
Zitat:

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.
Ich würde das mit einem Proxy machen, der zwischen Router und LAN steht. Kostet wenig (irgendein alter Rechner, Linux + Squid drauf, fertig)und bietet eine hohe Sicherheit. Bei Bedarf kannst du so auch Seiten sperren und div. andere Spielereien machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Seite 1 von 3  1 23   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz