Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Programm nur einmal starten bei "send to tray" (https://www.delphipraxis.net/99168-programm-nur-einmal-starten-bei-send-tray.html)

mobed 7. Sep 2007 22:34


Programm nur einmal starten bei "send to tray"
 
Tag zusammen,

ich habe eine Frage/Problem.

Vor weg: Ich habe die Suchfunktionbenutzt, aber keine wirklich funktionierende Lösung gefunden.

Ich habe in meine Anwendung das "send to tray" aus diesem Thread . Im ersten Beitrag ist ein Link auf eine "TNA-Demo" Link.
Die habe ich eingebaut und alles funktioniert prima.

Wenn ich nun mit den hier bekannten Methoden meine Andwendung dazubringen möchte, dass sie nur 1 mal startet, funktioniert das nur solange, bis ich die Anwendung in die Tray schicke.

Welche Lösung gibt es um die Anwedung nur 1 mal zu starten, auch wenn sie in der Tray liegt?

Ich muß gestehen, ich bin nicht der erfahrenste Programmierer, aber ich lerne gerne dazu.

Mfg
mobed

Christian Seehase 7. Sep 2007 22:44

Re: Programm nur einmal starten bei "send to tray"
 
Moin mobed,

mit welcher Methode verhinderst Du denn den Mehrfachstart der Anwendung?

mobed 7. Sep 2007 22:50

Re: Programm nur einmal starten bei "send to tray"
 
Tag,

ich habe folgenden Code aus diesem Thread (vorletzter auf der 1. Seite) benutzt

Delphi-Quellcode:
unit Only_one;

interface

implementation
uses forms, windows;
var mutex : THandle;
    h    : HWnd;


initialization
  Mutex := CreateMutex(nil, true, 'NetRadio_v3');
  if GetLastError = ERROR_ALREADY_EXISTS then
    begin
     h := 0;
     repeat
       h := FindWindowEx(0, h, 'TApplication', PChar(Application.Title))
     until h <> application.handle;
      if h <> 0 then
        begin
         Windows.ShowWindow(h, SW_ShowNormal);
         windows.SetForegroundWindow(h);
       end;
     halt;
  end;
finalization
  ReleaseMutex(mutex);
end.
Mit dem hat es auch funktioniert, solange ich die Anwendung nicht in die Tray gelegt habe (da wo auch die Uhr ist).

Mfg
mobed

Christian Seehase 7. Sep 2007 23:10

Re: Programm nur einmal starten bei "send to tray"
 
Moin mobed,

diese Prüfung sollte man möglichst in der Projektdatei durchführen.
Probier's mal so (das muss im Projektquelltext ergänzt werden, um die Application.xxx-Zeilen herum):

Delphi-Quellcode:
uses
  windows;

var
  dwMutex : DWORD;

begin
  // eine GUID sollte eindeutig sein, deshalb besser geeignet, als ein "normaler" string
  // Wenn man die GUID für jedes Programm wo man es braucht neu erzeugt, läuft man auch
  // nicht Gefahr u.U. das man den String in verschiedenen Programmen doppelt verwendet
  dwMutex := CreateMutex(nil,true,'{1E43985D-925A-4733-B556-1BF25A069E3C}');
  try
    if ((dwMutex <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then exit;
      Application.Initialize;
      Application.CreateForm(.....);
      Application.Run;
    end;
  finally
    if dwMutex <> 0 then CloseHandle(dwMutex);
  end;
end;

mobed 8. Sep 2007 09:34

Re: Programm nur einmal starten bei "send to tray"
 
Hi,

danke für die schnelle Hilfe.

Ich habe den Code wie folgt in den Projektcode eingefügt:
Delphi-Quellcode:
program dummy4butler;

uses
  Forms,
  butler_dummy in 'butler_dummy.pas' {Form1};
  windows;

{$R *.res}
var
  dwMutex : DWORD;

begin
  dwMutex := CreateMutex(nil,true,'{1E43985D-925A-4733-B556-1BF25A069E3C}');
  try
    if ((dwMutex <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then exit;
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
      end;
  finally
    if dwMutex <> 0 then CloseHandle(dwMutex);
  end;
end.
Dann bekomme ich Fehlermeldungen vom Compiler:
z.B. (die ersten beiden)
[Error] dummy4butler.dpr(6): Declaration expected but identifier 'windows' found
[Error] dummy4butler.dpr(10): Undeclared identifier: 'DWORD'

usw.

Habe ich es an der falschen Stelle eingefügt?

Mfg
mobed

mobed 8. Sep 2007 10:26

Re: Programm nur einmal starten bei "send to tray"
 
Halli Hallo,

manchmal sollte man(n) einfach genauer hin gucken und die Tipps richtig anwenden.

Ich habe meinen Fehler gefunden und behoben.

Jetzt funktioniert's wunder bar!!!! :lol: :lol: :lol:

Vielen Dank für prompte und gute Hilfe.

Mfg
mobed

axelf98 8. Sep 2007 10:28

Re: Programm nur einmal starten bei "send to tray"
 
Zitat:

Zitat von mobed
uses
Forms,
butler_dummy in 'butler_dummy.pas' {Form1};
windows;

Ersetze einmal das Semikolon hinter {Form1} durch ein Komma :)

mobed 8. Sep 2007 11:11

Re: Programm nur einmal starten bei "send to tray"
 
Hallo axelf98,

danke.

Ich hab's geändert und zapp zarapp funktionierts. :lol: :shock:

Mfg
mobed


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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-2025 by Thomas Breitkreuz