Delphi-PRAXiS
Seite 3 von 6     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verhindern eine Anwendung mehrfach zu starten (https://www.delphipraxis.net/113334-verhindern-eine-anwendung-mehrfach-zu-starten.html)

SaFu 6. Mai 2008 14:13

Re: Verhindern eine Anwendung mehrfach zu starten
 
also ich habe es bei mir mit gemacht habe es nie anders versucht habe auch mit dem Code nie Probleme gehabt

Da kommt man ja mit dem schreiben garnet hinterher

BOH 6. Mai 2008 14:14

Re: Verhindern eine Anwendung mehrfach zu starten
 
Noch'n Tipp: Max Components: TmxOneInstance (Freeware)

Moony 6. Mai 2008 14:17

Re: Verhindern eine Anwendung mehrfach zu starten
 
@Klaus:
Die Exception kommt auch, wenn ich keinerlei Überprüfungen in die Applikation einbinde.

Und wo bekomme ich diese GUI-ID her?

Sharky 6. Mai 2008 14:18

Re: Verhindern eine Anwendung mehrfach zu starten
 
Zitat:

Zitat von Moony
...Und wo bekomme ich diese GUI-ID her?

Einfach im Editor [STRG]-[Umschalten]-G drücken.

himitsu 6. Mai 2008 14:20

Re: Verhindern eine Anwendung mehrfach zu starten
 
PS: MD5 und GUID sind gleich groß ... also falls sich mal jemand eine GUID live berechnen will :angel:


Also wenn man möchte, daß eine bestimmte Datei (und nur die eine Dateiversion) nur einmal gestartet werden darf > MD5 aus sich selbst (eigene EXE) berechnen

Moony 6. Mai 2008 14:23

Re: Verhindern eine Anwendung mehrfach zu starten
 
So, habe das folgendermaßen gemacht:

Delphi-Quellcode:
unit Unit1;

interface

implementation

uses windows,Dialogs,sysutils;

var mHandle: THandle;   // Mutexhandle

Initialization
  mHandle := CreateMutex(nil,True,'{7A366489-37B0-4E63-81A0-F0BBC281614D}');
  // 'xxxxx' Der Anwendungsname ist hier einzutragen
  if GetLastError = ERROR_ALREADY_EXISTS then begin  
    // Anwendung läuft bereits
    {showMessage('Anwendung läuft bereits!!!!!');}   
    // Wenn du deine Meldung willst, mach die Klammern weg
    Halt;
  end;

finalization  // ... und Schluß
  if mHandle <> 0 then
    CloseHandle(mHandle)
end. {Dieter Hirt}
In der *.dpr selbst steht nichts drin, was eine vorherige Überprüfung durchführt. Weiterhin bekomme ich beim zwieten Start eine Exception. Blöd, dass man so etwas nicht debuggen kann...

FAlter 6. Mai 2008 14:27

Re: Verhindern eine Anwendung mehrfach zu starten
 
Hi,

Zitat:

Zitat von Moony
Blöd, dass man so etwas nicht debuggen kann...

doch, kann man. Notfalls mit zweimal Delphi offen, aber es sollte reichen, das Programm das zweite Mal zu debuggen und das erste Mal ohne Debugger zu starten.

Mfg
FAlter

Moony 6. Mai 2008 14:40

Re: Verhindern eine Anwendung mehrfach zu starten
 
Also:
  • 1.
    Wenn man in den tausend anderen Units auch tausend andere Initialisierungen hat, dann MUSS man die Überprüfungsunit auch als aller erste Unit in der *.dpr in die uses aufnehmen. Dann funktioniert auch die Überprüfung ohne weitere Exceptions.

    2. Wenn die Anwendung bereits geöffnet ist, dann soll diese auch in den Vordergrund geholt werden. Ich habe das so versucht, aber ohne Erfolg:
    Delphi-Quellcode:
      mHandle := CreateMutex(nil,True,'{7A366489-37B0-4E63-81A0-F0BBC281614D}');
      if GetLastError = ERROR_ALREADY_EXISTS then
      begin
         if IsIconic(mHandle) then
          ShowWindow(mHandle, SW_RESTORE)
        else SetForegroundWindow(mHandle);
        Halt;
      end;

hoika 6. Mai 2008 14:41

Re: Verhindern eine Anwendung mehrfach zu starten
 
Hallo,

benenne die Unit mal um.
Unit1 ist denkbar schlecht.

Und dann binde sie als erste unit in der dpr ein.


zu langsam ;(


schau dir mal das "In den Vordergrundbringen" hier an
1


Beitrag #14


Heiko

Moony 6. Mai 2008 15:14

Re: Verhindern eine Anwendung mehrfach zu starten
 
Klar, dass die Unit umbenannt wird. Wurde nur vorerst zum Test angelegt und gespeichert.

Habe mir die Funktion "EnsureSingleInstance" angeschaut. Theoretisch muß ich nicht die ganzen Überprüfungen machen. Was das eigentliche in dieser Funktion betrifft, führe ich ja bei mir aus. Sprich:
Delphi-Quellcode:
mHandle := CreateMutex(nil,True,'{7A366489-37B0-4E63-81A0-F0BBC281614D}');
...
SetForegroundWindow(mHandle);
BringWindowToTop(mHandle);
Aber leider wird das Programm immer noch nciht in den Vordergrund gesetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.
Seite 3 von 6     123 45     Letzte »    

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