Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Prüfen ob mein Programm bereits läuft (https://www.delphipraxis.net/180856-pruefen-ob-mein-programm-bereits-laeuft.html)

superjojo 24. Jun 2014 15:41

Prüfen ob mein Programm bereits läuft
 
Hallo

Ich Programmiere einen Mediaplayer. Wenn ich nun eine Audiodatei mit dem Programm öffne wird diese abgespielt.
Wenn ich jedoch parallel dazu eine weitere Datei öffne öffnet sich wieder eine neue Instanz meines Programms.

Ich hätte gerne, dass die neu geöffnete Datei automatisch in den schon laufenden Player geladen wird.

Falls das zu komplex ist würde es auch reichen wenn ich beim Starten des Programms prüfen könnte ob bereits eine Instanz läuft und diese alte Instanz dann beenden könnte.

mkinzler 24. Jun 2014 15:57

AW: Prüfen ob mein Programm bereits läuft
 
Singleton
http://www.delphipraxis.net/146936-%...ns-delphi.html

Dejan Vu 24. Jun 2014 16:14

AW: Prüfen ob mein Programm bereits läuft
 
Nee, also ein Singleton hat damit nichts zu tun. Eher ein Mutex. Wie man das genau macht, steht hier.

1. Die Applikation erzeugt ein globales Windows-Objekt: Ein Mutex mit Namen. Gibt es das schon? => Dann läuft die Anwendung ja auch schon. Wenn nicht, wird dieses Mutex erzeugt und die Anwendung startet.

2. Wenn schon eine Instanz existiert, muss man irgendwie an diese herankommen. Das geht z.B. mit dem Windows-Handle. Dann schickt man diesem Handle eine besondere Message und übergibt noch den Dateinamen. Fertig.

himitsu 24. Jun 2014 16:16

AW: Prüfen ob mein Programm bereits läuft
 
Du wirst es nicht glauben, aber wenn man die Suchfunktion verwendet, dann findet man massig Lösungen dafür und muß sich nur noch Eine raussuchen.

http://www.delphipraxis.net/73562-we...uebergabe.html



- Prüfen ob das Programm bereits läuft ist das Einfachste
- Wenn man das Programm gefunden hat, dann kann man nun über einen von vielen Wegen den Parameter des aktuellen Programms an die alte Instanz übergeben.

Dejan Vu 24. Jun 2014 16:25

AW: Prüfen ob mein Programm bereits läuft
 
Zitat:

Zitat von himitsu (Beitrag 1263401)
Du wirst es nicht glauben, aber wenn man die Suchfunktion verwendet,

Also ich glaub dir das :P

superjojo 25. Jun 2014 18:49

AW: Prüfen ob mein Programm bereits läuft
 
Zitat:

Zitat von himitsu (Beitrag 1263401)
Du wirst es nicht glauben, aber wenn man die Suchfunktion verwendet, dann findet man massig Lösungen dafür und muß sich nur noch Eine raussuchen.

http://www.delphipraxis.net/73562-we...uebergabe.html

danke erstmal für den tipp.
Teilweise ist es echt schwierig gerade die Suchwörter zu benutzen unter denen man nun genau das findet was man braucht.

Aber zu der OneInstance.pas - Darf ich dieese Unit verwenden und mein Programm dann später veröffentlichen?

Dejan Vu 25. Jun 2014 18:52

AW: Prüfen ob mein Programm bereits läuft
 
Zitat:

Zitat von superjojo (Beitrag 1263487)
Aber zu der OneInstance.pas - Darf ich dieese Unit verwenden und mein Programm dann später veröffentlichen?

Jupp. Wieso nicht?

superjojo 25. Jun 2014 19:14

AW: Prüfen ob mein Programm bereits läuft
 
Noch ne blöde frage zur InstanceCheck.pas :-D

Wie bekomme ich denn jetzt die Komponente in mein Projekt rein, sodass ich sie im Objektinstpektor bearbeiten kann? In der Leiste oben wird die ja nicht hinzugefügt.

juergen 25. Jun 2014 20:05

AW: Prüfen ob mein Programm bereits läuft
 
Hallo,
binde doch einfach die beiden Units in dein Projekt in uses mit ein.
Wenn du dann in deinem Code den Unitnamen eingibst und dahinter einen Punkt setzt -und ein paar Millisekunden wartest- siehst du doch alle Methoden. Muss man dafür eine Komponenten haben?

nuclearping 25. Jun 2014 20:47

AW: Prüfen ob mein Programm bereits läuft
 
Die OneInstance.pas nutzt du so:

In deiner DPR:
Delphi-Quellcode:
program ...;

uses
  ...,
  OneInstance.pas;

...

procedure NewInstance(ProcessId: Cardinal; CmdLine: String; var Allow: Boolean);
begin
  Allow := FALSE;
end;


begin
  NewInstProc := NewInstance;
  ...
end.
Steht aber auch in der Unit oben :P
Delphi-Quellcode:
//                 - Durch eine Zuweisung von OneInstance.NewInstProc kann eine Ereignis-
//                 prozedur definiert werden, welche beim Start einer neuen Anwendungsinstanz
//                 aufgerufen wird. Parameter:
//                   ProcessId: Die Prozess-ID der neuen Anwendungsinstanz
//                   CmdLine : Enthält Anwendungspfad sowie Startparameter
//                   Allow   : Gibt an ob die Instanz gestartet werden
//                              soll. (Rückgabeparameter, Standard: False)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 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