AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nur 1 Instanz des Programmes

Offene Frage von "Skullschildi"
Ein Thema von blackdrake · begonnen am 1. Feb 2007 · letzter Beitrag vom 23. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

Nur 1 Instanz des Programmes

  Alt 1. Feb 2007, 09:25
Hallo.

Ich möchte folgendes Realisieren:

Wenn ich mein Programm starte (über eine Dateierweiterung) und es ist bereits eine Instanz des Programmes offen, dann soll sich die Datei in dieser Instanz öffnen.

Ist das Programm gerade beschäftigt (Abfrage könnte in der Instanz erfolgen), dann soll sich ein neues Fenster öffnen.

Weiß jemand, wie ich so etwas realisieren kann?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#2

Re: Nur 1 Instanz des Programmes

  Alt 1. Feb 2007, 09:29
HAI

Mutex
ist das was du suchst ...

Delphi-Quellcode:
unit Haupt_Form;
interface
uses
  Windows,....
type
  THauptForm = class(TForm)
...
  end;
var
  HauptForm: THauptForm;
implementation
...
initialization
  // prüfen ob Programm schon läuft
  mHandle := CreateMutex(nil, True, 'XYZ');
  // Anwendung läuft bereits
  if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      ShowMessage(' NewGen-Programm läuft bereits ! ');
      Halt(haltALREADY_RUNS);
    end;
finalization
  // ... und Schluß
  if mHandle <> 0
    then CloseHandle(mHandle)
end.
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#3

Re: Nur 1 Instanz des Programmes

  Alt 1. Feb 2007, 09:37
...oder nach Semaphor, siehe dazu dieses Beispiel (Der Part um die Instanz zu checken):
Delphi-Quellcode:
procedure InstanceCheck;
var
 Sem: THandle;

begin
 Sem := CreateSemaphore(nil, 0, 1, 'Programtitle');
 If ((Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then
 begin
  CloseHandle(Sem);
  Application.MessageBox('Program wird bereits ausgeführt!', 'Wird ausgeführt', 16);
  Application.Terminate;
 end;
end;
Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Nur 1 Instanz des Programmes

  Alt 1. Feb 2007, 10:12
Hi,

ich verwende diese Unit. Anleitung innenliegend. Damit kannst Du dann auch noch die laufende Instanz benachrichtigen und sogar die Parameter rüberreichen.

Gruss
Angehängte Dateien
Dateityp: pas instmgr_166.pas (2,9 KB, 163x aufgerufen)
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#5

Re: Nur 1 Instanz des Programmes

  Alt 1. Feb 2007, 11:15
Hallo,

diese Diskussionen gab es schon häufig. Verschiedene Hier im Forum suchenSuchen nach "Programm einmal starten Run" liefern unter anderem Das Programm einmal Starten. Beispiel mit mehreren Erläuterungen und Verfahren.

Gruß Jürgen

PS. Die Suchfunktion liefert unübersichtliche Ergebnisse. Bei Hier im Forum suchenProgramm einmal starten bekomme ich das Ergebnis nicht. Warum nicht?
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Nur 1 Instanz des Programmes

  Alt 1. Feb 2007, 11:49
Hallo.

Zitat von thkerkmann:
Hi,

ich verwende diese Unit. Anleitung innenliegend. Damit kannst Du dann auch noch die laufende Instanz benachrichtigen und sogar die Parameter rüberreichen.

Gruss
Vielen Dank für den Hinweis. Ich werde die Unit später gleich mal ausprobieren!

Mutex, wie es auch in den anderen Themen erklärt wurde, kannte ich bereits, aber der Schwerpunkt des von mir geschilderten Problemes lag ja bei der Nachrichtenübermittlung und nicht bei dem Blocken einer zweiten Instanz.

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#7

Re: Nur 1 Instanz des Programmes

  Alt 1. Feb 2007, 11:51
http://assarbad.net/de/stuff/!import/nico.old/ -> oneinst.zip! Uralt und noch immer gut zur Veranschaulichung.
  Mit Zitat antworten Zitat
Skullschildi

Registriert seit: 7. Jan 2006
94 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Nur 1 Instanz des Programmes

  Alt 8. Feb 2007, 13:47
@ Olli: ich hab mir mal die oneisnt runtergeladen, aber ganz durchsteigen tu ich da nicht. bei mir öffnet sich zwar eine instanz, abr die seh ich nicht und wenn ich dann mehrmals die exe ausführe seh ich die anderen auch nicht, sie werden aber als prozesse angezeigt. demzufolge sin mehrere instanzen dieser anwendung da. könntest vll die oneinst.pas so verändern, dass zu jedem befehl genau dabeisteht was der macht? das wäre äußerst nett von dir.
Ehe man über den Berg kommt, soll man nicht Juchhe schreien.
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Nur 1 Instanz des Programmes

  Alt 8. Feb 2007, 13:57
Hallo.

Das ist merkwürdig.

Normalerweise müsste, sofern eine Mutex mit gleichem Namen vorhanden ist, die Nachricht WM_COPY an deine Erstinstanz geschickt werden und anschließend deine Zweitinstanz (die du nicht siehst, weil OneInst.pas zwischen noch vor Application.Run, also vor MainForm.Show ausgeführt wird) per Halt() beendet werden. Schau mal mit dem Debugger, wie sich das Programm verhält, wenn bereits eine Instanz offen ist.

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Skullschildi

Registriert seit: 7. Jan 2006
94 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Nur 1 Instanz des Programmes

  Alt 8. Feb 2007, 14:52
Also ich hab meinen rechner neu gestartet, die project1.exe ausgeführt. Die seh ich auch, dann hab ich ne verknüpfung zur projekt1.exe erstellt und in dieser parameter angegeben. die Projekt1.exen werden gestartet, übergeben aber NICHT ihre parameter an die bereits laufende, sichtbare instanz ihrer selbst. Sie sindselbst nicht zu sehen, werden aber als prozess im Taskmanager angezeigt. wenn ich nun alle 5 projekt1 prozesse im tskmgr beende und die Projekt1.exe wieder starte, dann kann ich die nicht sehen, sie läuft aber.
Ehe man über den Berg kommt, soll man nicht Juchhe schreien.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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