AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm ohne externe Anwendung neu starten!

Ein Thema von kingflo · begonnen am 25. Jan 2007 · letzter Beitrag vom 24. Aug 2012
Antwort Antwort
kingflo

Registriert seit: 21. Jun 2004
Ort: Hamburg
502 Beiträge
 
Delphi 7 Professional
 
#1

Programm ohne externe Anwendung neu starten!

  Alt 25. Jan 2007, 09:41
Da ich schon oft Artikel gefunden habe, wie man ein Programm am bessten neu startet, diese aber immer auf batch oder anderen Anwendungen bassieren, wollte ich jetzt mal kurz einen kleinen Artikel schreiben, wie man einen Neustart der eigenen Anwendung auch ohne externe Anwendung realisieren kann.

Zuerst erstellen wir eine neue Unit, die den zweiten Start unserer Anwendung abfangen kann z.B so:

Delphi-Quellcode:
unit mutex;

interface

implementation

uses windows,Dialogs,sysutils,forms,messages;

const
  TestTitle = 'StryykeclientTest';
  AppTitle = 'Stryyke Client';
var
  hWnd: THandle;
  param:String;
  paramInt:integer;
Initialization

  paramInt:=0;
  // einen anderen Titel setzen, so dass wir uns
  // nicht selbst finden
  Application.Title:= TestTitle;
  hWnd := FindWindow('TApplication', AppTitle);
  if hWnd <> 0 then
  begin
    param:=StringReplace(ParamStr(1),'/','',[rfReplaceAll]);
   
    // Parameter -----------------------------------------------------------
    if param='restartthen
    paramInt:=99;
    // ---------------------------------------------------------------------
    PostMessage(hWnd,WM_USER+4711, paramInt, 0);
    Application.ProcessMessages();

  end;

  // Wir sind die erste Instanz -> Titel setzen, so
  // dass weitere unsfinden
  Application.Title:= AppTitle;

finalization

end.
Als nächstes setzen wir ein TApplicationEvents auf unser Hauptformular und tragen in das Ereignis "OnMessage" folgendes ein:

Delphi-Quellcode:
procedure TLoginForm.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  // -----------------------------------------------------------------------
   if Msg.message = WM_USER+4711 then begin
      if msg.wParam = 99 then begin
       // close application
       close;
      end;
     //-----------------------------------------------------------------------
   end;
  ///////////////////////////////////////////////////////////////////////////
end;
So das wichtigste haben wir geschafft, und wie sich jetzt wohl jeder denken kann, können wir unsere Anwendung folgendermaßen neu starten:

Delphi-Quellcode:
// uses shellApi
shellexecute(HANDLE,'open',PChar(application.exename),'restart',nil,SW_SHOW);
So... das wars, ich hoffe das jemand den artikel gebrauchen kann, und das man ihn einigermaßen versteht.
Da es mein erster Artikel in der Libary ist, hoffe ich, das ich nicht so schlimme Kritik bekomme *g*. Aber da mir die Libary auch schon oft geholfen hat, wollte ich auch mal was sinnvolles reinschreiben.

mfg
Flo
Florian Gilde
  Mit Zitat antworten Zitat
Tod787

Registriert seit: 19. Mai 2008
99 Beiträge
 
#2

AW: Programm ohne externe Anwendung neu starten!

  Alt 24. Aug 2012, 14:10
Hab das mal versucht nur leider ohne Erfolg.

Muss ich die Unit mutex einfach nur in mein Projekt einbinden?

Irgendwie wird die Unit beim Programmstart zwar aufgerufen aber bei
if hWnd <> 0 then geht er nicht in die Bedingung hinein.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

AW: Programm ohne externe Anwendung neu starten!

  Alt 24. Aug 2012, 14:17
Da wird dann wohl der Fenstertitel nicht stimmen. Man könnte sich aber auch das eigene Fensterhandle als Parameter beim ShellExecute mitgeben, dann muss man das nicht erst suchen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 17:46 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