![]() |
Programm ohne externe Anwendung neu starten!
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:
Als nächstes setzen wir ein TApplicationEvents auf unser Hauptformular und tragen in das Ereignis "OnMessage" folgendes ein:
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='restart' then 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.
Delphi-Quellcode:
So das wichtigste haben wir geschafft, und wie sich jetzt wohl jeder denken kann, können wir unsere Anwendung folgendermaßen neu starten:
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;
Delphi-Quellcode:
So... das wars, ich hoffe das jemand den artikel gebrauchen kann, und das man ihn einigermaßen versteht.
// uses shellApi
shellexecute(HANDLE,'open',PChar(application.exename),'restart',nil,SW_SHOW); 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 |
AW: Programm ohne externe Anwendung neu starten!
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
Delphi-Quellcode:
geht er nicht in die Bedingung hinein.
if hWnd <> 0 then
|
AW: Programm ohne externe Anwendung neu starten!
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 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