Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Firefox und Downloadmanager ? (https://www.delphipraxis.net/150020-firefox-und-downloadmanager.html)

Blamaster 5. Apr 2010 17:10


Firefox und Downloadmanager ?
 
Hi,

Ich versuche gerade rauzubekommen ob und wie es möglich ist einen eigenen Downloadmanager mit dem Firefox kompatibel zu machen. Der normale Downloaddialog des firefox (Datei auf Festplatte speichern ....) soll dabei den Link "einfach" an mein Downloadtool übergeben.

Mir fehlen allerdings gerade die Ansätze wie man den Firefox dazu bewegen könnte den Link zu übergeben.

Hat da jemand eine Idee wie man es bewerkstelligen könnte ?

Mfg Yannic

himitsu 5. Apr 2010 17:21

Re: Firefox und Downloadmanager ?
 
Ich denke mal am Einfachsten ist es, wenn du ein entsprechendes Firefox-Addon erstellst, welches die nötigen Ereignisse abfängt und an dein Programm weitergibt.

Eventuell kannst du dir bei den vorhandenen Download-Addons etwas abgucken.

daywalker9 5. Apr 2010 17:34

Re: Firefox und Downloadmanager ?
 
Hier ein paar Links für die Mozilla Developer Seiten:

Step für Step eine Anwendung schreiben
Developer Hilfe

Blamaster 5. Apr 2010 18:36

Re: Firefox und Downloadmanager ?
 
Hi,

Danke für die Links :)

Gibt es zufällig ein Delphi OpenSource Downloadplugin für den Firefox wo man etwas abschauen könnte ?

Mfg Yannic

himitsu 5. Apr 2010 18:45

Re: Firefox und Downloadmanager ?
 
Die sind alle quasi Open-Source.

Die XPI-Datei runterladen und entpacken.
(die .xpi sind einfach nur umbenannte .zip)

(und .jar kann man auch entpacken ... was 7zip nicht alles kann :angel2: )

BUG 5. Apr 2010 18:55

Re: Firefox und Downloadmanager ?
 
Zum Beispiel der Free Download Manager hat ein Addon dabei, aber viel besser (und öfter aktualisiert) ist das Flashgot-Addon. Eventuell wäre es ein Weg, dein Downloadmanager Flashgot-kompatibel zu machen bzw. den Autor um Unterstützung deines Downloadmanagers zu bitten (und die dafür benötigten Infos gleich mitzuliefern).

Blamaster 6. Apr 2010 17:17

Re: Firefox und Downloadmanager ?
 
Hi,

eine Flashgot kompatibelität hört sich gut an.

Flashgot übergibt ja nun die Links als Parameter an meinen Downloadmanager. Im OnCreate der Application kann ich den Url Parameter nun mit ParamStr(1) abrufen.

Nun hab ich allerdings folgende Probleme. Zum einen kann ich die Parameter so nur beim erstmaligen Programmstart abrufen und nicht während der Laufzeit. Zum anderen versucht sich das Programm bei jedem Downloadaufruf nun mehrmals zu öffnen, anstelle das bereits geöffnete Programm zu nutzen.

Eine idee wie ich das lösen kann ?

Mfg Yannic

Valle 6. Apr 2010 17:21

Re: Firefox und Downloadmanager ?
 
Das erste Problem verstehe ich nicht.

Zum zweiten kannst du dir das mal anschauen. :-)

Liebe Grüße,
Valle

Blamaster 6. Apr 2010 18:38

Re: Firefox und Downloadmanager ?
 
Hi,

die Unit löst mein Problem wie es aussieht.

Lässt sich allerdings "CmdLine : Enthält Anwendungspfad sowie Startparameter" noch so umcoden, dass ich nur den Startparameter übergeben bekomme und nicht den Anwendungspfand ? (Lässt sich besser mit arbeiten)

Mfg Yannic

Blamaster 7. Apr 2010 15:21

Re: Firefox und Downloadmanager ?
 
Mit

Delphi-Quellcode:
SetString(CmdLine, PChar(lpData), cbData div SizeOf(Char));
Wird ja CmdLine nun der Programmpfad und Parameter übergeben. Sprich beides müsste in lpData liegen.

Nur an welcher stelle kommt der Pfad in lpData ?

Hier mal der Code: (Auszug aus der OneInstance.pas)

Delphi-Quellcode:
function UtilWindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
  stdcall;
const
  Results: array[Boolean] of LRESULT = (INSTANCE_DENY, INSTANCE_ALLOW);
var
  ProcessId: Cardinal;
  CmdLine: string;
  Allow: Boolean;
begin
  if (Msg = WM_COPYDATA) and (wParam = 0) and (lParam <> 0) then
  begin
    Allow := False;
    with PCopyDataStruct(lParam)^ do
    begin
      ProcessId := hWnd;
      SetString(CmdLine, PChar(lpData), cbData div SizeOf(Char));
    end;
    frmMain.OnSecondInstance(ProcessId, CmdLine, Allow);
    Result := Results[Allow];
  end else
    Result := DefWindowProc(hWnd, Msg, wParam, lParam);
end;

function CreateUtilWnd: HWND;
var
  UtilWndClass: TWndClass;
begin
  FillChar(UtilWndClass, SizeOf(UtilWndClass), 0);
  UtilWndClass.hInstance := HInstance;
  UtilWndClass.lpfnWndProc := @UtilWindowProc;
  UtilWndClass.lpszClassName := PChar(UtilWndClassName);
  RegisterClass(UtilWndClass);
  Result := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWndClass.lpszClassName,
    '', WS_POPUP, 0, 0, 0, 0, 0, 0, HInstance, nil);
end;

procedure CheckInstance;
var
  hMain: HWND;
  CDS: TCopyDataStruct;
begin
  hMain := FindWindow(PChar(UtilWndClassName), nil);
  if hMain <> 0 then // Anwendungsinstanz vorhanden
  begin
    with CDS do
    begin
      dwData := GetCurrentProcessId;
      lpData := GetCommandLine;
      cbData := StrLen(lpData) * SizeOf(Char);
    end;
    if SendMessage(hMain, WM_COPYDATA, 0, LPARAM(@CDS)) = INSTANCE_DENY then
      Halt; // Anwendung abbrechen. Anmerkung: Finalization-Abschnitte für bereits
              // initialisierte Units werden noch abgearbeitet.
  end;
end;

initialization
  UtilWndClassName := 'OneInstUtilWnd:' + ParamStr(0);
  CheckInstance;
  hUtil := CreateUtilWnd;

finalization
  if hUtil <> 0 then DestroyWindow(hUtil);


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.
Seite 1 von 2  1 2      

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