![]() |
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. |
AW: Prüfen ob mein Programm bereits läuft
|
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
![]() 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. |
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.
![]() - 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. |
AW: Prüfen ob mein Programm bereits läuft
Zitat:
|
AW: Prüfen ob mein Programm bereits läuft
Zitat:
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? |
AW: Prüfen ob mein Programm bereits läuft
Zitat:
|
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. |
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? |
AW: Prüfen ob mein Programm bereits läuft
Die OneInstance.pas nutzt du so:
In deiner DPR:
Delphi-Quellcode:
Steht aber auch in der Unit oben :P
program ...;
uses ..., OneInstance.pas; ... procedure NewInstance(ProcessId: Cardinal; CmdLine: String; var Allow: Boolean); begin Allow := FALSE; end; begin NewInstProc := NewInstance; ... end.
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 11:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz