Einzelnen Beitrag anzeigen

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