Entwickler-Ecke

Sonstiges (Delphi) - eigenes Programm als Standardprogramm unter Windows


mtm - Mo 06.07.15 16:54
Titel: eigenes Programm als Standardprogramm unter Windows
Hallo zusammen !

Die Überschrift habe ich eigentlich schon erledigt. Ich habe einen kleinen MP3-Player geschrieben und habe es auch hingekriegt, den als Standardprogramm für MP3's zu starten.
Das Problem liegt jetzt daran, daß, wenn ich mehrere MP3's im Explorer markiere und dann auf 'Öffnen' clicke, für jede Datei das Programm in einer Extra-Instanz gestartet wird. Ich hätte es aber gerne so, daß es bei mehreren Dateien nur einmal geöffnet wird und eine Playlist erstellt.

Im Augenblick habe ich noch keine Idee, wie ich das hinkriegen soll. Vielleicht kennt ja jemand die Lösung.

Danke im Voraus
mtm


GuaAck - Mo 06.07.15 18:44

Hallo,
genau das problem hatte ich auch und habe es folgendermaßen gelöst:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
INITIALIZATION
  { Bei einer Mehrfachauswahl startete Windows für jede Anwahl die Application. }
  { Das ist unpraktisch. Deshalb wird nur die erste gestartete Imstanz am Leben }
  { gehalten und muss die Arbeit machen. Die weiteren Instanzen tragen nur den  }
  { Filnemane aus der Paramaterliste in ein shared Memory ein und beendet sich  }
  { dann. }
  sollabbrechen := false;
  IF paramcount > 0 THEN
    BEGIN
      SharedDateiliste := TSharedDateiliste.Create;
      akt_filename := paramstr(1);
      quelle := shared;
      akt_filelen := get_Dateilaenge(akt_filename);
      SharedDateiliste.puteintrag(akt_filename, akt_filelen);
      IF NOT SharedDateiliste.selbst_kreiert THEN
        BEGIN
          SharedDateiliste.Free;
          sollabbrechen := true;
        END
    END;

FINALIZATION

END.


Einen schöneren Weg habe ich nicht gefunden. Lücke: Die erste Instanz ist fertig, bevor Windows alle Instanzen getartet hat. Evtl. Nach einem delay erneut nachsehen, ob was in der Liste steht.

Die SharedDateiListe habe ich Dir in den Anhang gepackt.

Viel Erfolg,
GuaAck.


mtm - Di 07.07.15 21:09

@GuaAck :
Danke für Deine Antwort. Ich habe aber doch schon einen andere Lösung gefunden. Ich benutze die Komponente TOneinstance. Habe ich auf torry.net gefunden. Funktioniert ziemlich gut.

Grüße
mtm


Delete - Di 07.07.15 22:45

Danke für den Hinweis. Die Komponente TOneInstance stammt von der Loonies Software Group [http://www.loonies.narod.ru/t-one-instance.htm] und unterstützt lediglich folgende IDEs:



GuaAck - Mi 08.07.15 23:43

Hallo mtm,

ich habe mir nur den Code der Komponente angesehen, aber nicht installiert. Das Prinzip ist ähnlich dem meinen: "Dem ersten Aufruf die Arbeit übergegeben...". Mir scheint, der Übergabemechanismus ist anders, aber den habe ich auch nicht durchgearbeitet.

Interessant finde ich aber die geringe Resonanz auf Deine Frage! Ich erwartete auf meinen Beitrag durchaus Kritik, wie ich so einen Pfusch machen könne.(Eine Antwort darauf hätte ich parat.)

Gruß Guaack