Delphi-PRAXiS

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)

BUG 25. Jun 2014 21:32

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

Zitat von Dejan Vu (Beitrag 1263488)
Jupp. Wieso nicht?

Vielleicht weil weder in der Unit noch im Post eine Lizenz angegeben ist :gruebel:
Bei kleinen Codeschnipsel würde ich mir auch keine Gedanken machen, aber bei einer Unit wäre es schön, die Lizenz zu kennen.

Dejan Vu 26. Jun 2014 03:55

AW: Prüfen ob mein Programm bereits läuft
 
Na ja. So groß ist das ja nu nich, ne. Desweiteren wäre mir neu, das bei Fehlen einer Einschränkung nicht von einer freien Nutzung ausgegangen werden kann.

Der schöne Günther 26. Jun 2014 07:17

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

Du gewährst Delphi-PRAXiS das zeitlich und räumlich unbeschränkte, nicht-ausschließliche unwiderrufliche, vergütungsfreie Recht, die von Dir auf der Internetpräsenz Delphi-PRAXiS in den Foren oder im Chat eingestellten Inhalte zu nutzen und kommerziell zu verwerten. Insbesondere gewährst Du Delphi-PRAXiS das Recht, die Inhalte zu vervielfältigen, sie in Verkehr zu bringen und zu verbreiten, die Inhalte zu ändern, zu bearbeiten oder zu übersetzen und die Änderungen, Bearbeitungen oder Übersetzungen zu veröffentlichen sowie die Inhalte mittels Draht oder drahtlos auch im interaktiven Bereich zu übertragen und sie an Dritte zu vermieten und/oder in anderer Weise Unterlizenzen an ihnen zu erteilen.
Code-Lib:
Zitat:

Unsere Code-Library ist eine Sammlung an fertigen, getesteten und allgemein verwendbaren Code-Anschnitten, die dafür sorgen, dass ein Entwickler das Rad nicht stets neu erfinden muss, wenn bereits andere die Arbeit geleistet haben und dankenswerter Weise bereit waren, ihre Ergebnisse zu Verfügung zu stellen.


PS: Lasst den armen Kerl sich doch eine Komponente auf das Formular ziehen wenn er will. Unter "Komponente -> Komponente installieren" die .pas-Datei hinzufügen und gut ist ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.

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