Delphi-PRAXiS
Seite 1 von 6  1 23     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)

Moony 6. Mai 2008 10:57


Verhindern eine Anwendung mehrfach zu starten
 
Hallo zusammen,

ich habe versucht mein Programm kein weiteres Mal aufrufen zu lassen, wenn es bereits einmal im System geöffnet ist. Das habe ich folgendermaßen probiert:

Delphi-Quellcode:
  doppelt := FindWindow('TApplication', PChar('meinProgramm'));
  if doppelt <> 0 then
  begin
     if IsIconic(doppelt) then
      ShowWindow(doppelt, SW_RESTORE)
    else SetForegroundWindow(doppelt);
  end
  else begin
    // Programmstart
  end;
aber leider funktioniert das bei der Anwendung nicht. Bei einer anderen schon. :gruebel:

Hoffe ihr könnt mir da weiterhelfen.

Gruß, Moony

Luckie 6. Mai 2008 11:02

Re: Verhindern eine Anwendung mehrfach zu starten
 
Na dann suchen wir doch einfach mal: Hier im Forum suchendoppelstart.

toms 6. Mai 2008 11:16

Re: Verhindern eine Anwendung mehrfach zu starten
 
Wird das Fenster gefunden, resp ist doppelt <> 0 ?

FAlter 6. Mai 2008 11:42

Re: Verhindern eine Anwendung mehrfach zu starten
 
Hi,

ich hoffe mal du hast nicht einfach ohne zu überlegen nen Quelltext per Copy&Paste übernommen?

Falls doch: Check mal, ob dein Application.Title wirklich 'meinProgramm' ist. Bei mir funktioniert der Code.

Mfg
FAlter

SaFu 6. Mai 2008 11:46

Re: Verhindern eine Anwendung mehrfach zu starten
 
Schaumal von Luckie

http://www.delphipraxis.net/internal_redirect.php?t=136

Moony 6. Mai 2008 13:02

Re: Verhindern eine Anwendung mehrfach zu starten
 
@ toms:
doppelt ist immer <> 0. Egal ob die Anwendung bereits geöffnet ist oder nicht.

@FAlter:
Natürlich NICHT. Da steht der Title statisch drin, wie er bei den Optionen unter Application.Title angegeben ist.

@fuknersascha:
schaue ich mir eben an und probiere das aus.

FAlter 6. Mai 2008 13:07

Re: Verhindern eine Anwendung mehrfach zu starten
 
Hi,

Zitat:

Zitat von Moony
@ toms:
doppelt ist immer <> 0. Egal ob die Anwendung bereits geöffnet ist oder nicht.

Also doch nicht nachgedacht. Er findet sich selbst. Du hast den Code an der falschen Stelle stehen ;) Es gehört nämlich in die DPR, und in den Else-Teil kommen die Application.XXX rein. Wobei das aus der Code-Lib sicherlich besser geeignet ist, denn der Code hier hat auch einige Schwachstellen.

Mfg
FAlter

Moony 6. Mai 2008 13:11

Re: Verhindern eine Anwendung mehrfach zu starten
 
Die Zeilen stehen in der *.dpr.

So, habe jetzt den Code con Luckie probiert und wenn ich die Anwendung zum zweiten Mal aufrufe, bekomme ich eine Exception. Ich habe jedoch diesen Code nicht als separate Unit angebunden, sondern meinen alten Source in der *.dpr ersetzt.

FAlter 6. Mai 2008 13:16

Re: Verhindern eine Anwendung mehrfach zu starten
 
Hi,

Zitat:

Zitat von Moony
Die Zeilen stehen in der *.dpr.

Entweder gibt es ein anderes Programm, vermutlich auch mit Delphi (oder evtl. C++-Builder) geschrieben, was den gleichen Titel hat, oder du hast es doch an der falschen Stelle (bzw. die Application.XXX stehen VOR dem Code).

Delphi-Quellcode:
program Project1;

uses
  Windows,
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}


var
  Doppelt: THandle;
begin
  //Sicherstellen, dass zweiter Parameter Application.Title entspricht!
  //Delphi ärgert bei Verwendung einer Konstante.
  doppelt := FindWindow('TApplication', 'Test');
  if doppelt <> 0 then
  begin
     if IsIconic(doppelt) then
      ShowWindow(doppelt, SW_RESTORE)
    else
      SetForegroundWindow(doppelt);
  end
  else
  begin
    Application.Initialize;
    Application.Title := 'Test';
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.
Ich persönlich würde die Komponente aus der CodeLib nehmen, da steht was von Parameterübergabe dabei ;)

Mfg
FAlter

Moony 6. Mai 2008 13:19

Re: Verhindern eine Anwendung mehrfach zu starten
 
Noch mal: JA, es steht an der richtigen Stelle!!!!


In meinem anderen Programm funktioniert das ja.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr.
Seite 1 von 6  1 23     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