AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Programm nur einmal starten bei "send to tray"
Thema durchsuchen
Ansicht
Themen-Optionen

Programm nur einmal starten bei "send to tray"

Ein Thema von mobed · begonnen am 7. Sep 2007 · letzter Beitrag vom 8. Sep 2007
Antwort Antwort
mobed

Registriert seit: 3. Jun 2007
11 Beiträge
 
Delphi 7 Personal
 
#1

Programm nur einmal starten bei "send to tray"

  Alt 7. Sep 2007, 22:34
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 7. Sep 2007, 22:44
Moin mobed,

mit welcher Methode verhinderst Du denn den Mehrfachstart der Anwendung?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
mobed

Registriert seit: 3. Jun 2007
11 Beiträge
 
Delphi 7 Personal
 
#3

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

  Alt 7. Sep 2007, 22:50
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 7. Sep 2007, 23:10
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
mobed

Registriert seit: 3. Jun 2007
11 Beiträge
 
Delphi 7 Personal
 
#5

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

  Alt 8. Sep 2007, 09:34
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
  Mit Zitat antworten Zitat
mobed

Registriert seit: 3. Jun 2007
11 Beiträge
 
Delphi 7 Personal
 
#6

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

  Alt 8. Sep 2007, 10:26
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!!!!

Vielen Dank für prompte und gute Hilfe.

Mfg
mobed
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#7

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

  Alt 8. Sep 2007, 10:28
Zitat von mobed:
uses
Forms,
butler_dummy in 'butler_dummy.pas' {Form1};
windows;
Ersetze einmal das Semikolon hinter {Form1} durch ein Komma
  Mit Zitat antworten Zitat
mobed

Registriert seit: 3. Jun 2007
11 Beiträge
 
Delphi 7 Personal
 
#8

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

  Alt 8. Sep 2007, 11:11
Hallo axelf98,

danke.

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

Mfg
mobed
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:40 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