![]() |
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 ![]() ![]() 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 |
Re: Programm nur einmal starten bei "send to tray"
Moin mobed,
mit welcher Methode verhinderst Du denn den Mehrfachstart der Anwendung? |
Re: Programm nur einmal starten bei "send to tray"
Tag,
ich habe folgenden Code aus ![]()
Delphi-Quellcode:
Mit dem hat es auch funktioniert, solange ich die Anwendung nicht in die Tray gelegt habe (da wo auch die Uhr ist).
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. Mfg mobed |
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; |
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:
Dann bekomme ich Fehlermeldungen vom Compiler:
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. 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 |
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 |
Re: Programm nur einmal starten bei "send to tray"
Zitat:
|
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