![]() |
AW: Wie kann ich mich selbst neu starten?
Die 32 ist keine "Magic-Number" ... das ist ein offizieller Wert, wie man ihn auch im MSDN nachlesen kann.
Zitat:
Delphi-Quellcode:
... hier wäre ein unentzifferbare Magic-Number drin.
if ShellExecute(...) and not $1F <> 0 then
|
AW: Wie kann ich mich selbst neu starten?
Delphi-Quellcode:
:mrgreen:
const
MAX_SHELLEXECUTE_ERRORVALUE = 32; |
AW: Wie kann ich mich selbst neu starten?
Ich mache das meistens so, dass ich der Anwendung über ShellExecute einen Parameter "-delayed" mitschicke, woraufhin die Anwendung am Anfang etwas wartet
(und die derzeitig laufende Instanz etwas Zeit bekommt, sich zu beenden): Restart-Routine:
Delphi-Quellcode:
Und in der dpr des Programms habe ich dann folgenden Code, der wartet, bevor die Hauptform erzeugt wird und die Anwendung gestartet wird:
// Restart the Application
procedure ApplicationRestart(const Delayed: boolean = false); var AppName : PChar; FParams : PChar ; begin AppName := PChar(Application.ExeName) ; if Delayed then begin FParams := '-delayed' ; end; ShellExecute(Application.Handle,'open', AppName, FParams, nil, SW_SHOWNORMAL) ; Application.Terminate; end;
Delphi-Quellcode:
Hat bisher immer super geklappt. Sollte das aus irgendwelchen Gründen Mist sein, bitte melden! :-)begin Application.Initialize; Application.Title := 'Meine tolle Anwendung'; // delayed start of application if (ParamCount > 0) then begin if (ParamStr(1) = '-delayed') then begin sleep(3000) ; // Wartezeit natürlich variabel :-) end; end; Application.CreateForm(TMainForm, MainForm); Application.Run; end. Natürlich kann man das verbessern...dass z.B. nicht der erste Parameter das "-delayed" sein muss und die Wartezeit auch als zusätzlicher Parameter mitgeschickt wird etc. |
AW: Wie kann ich mich selbst neu starten?
Zitat:
![]() Zitat:
Zitat:
|
AW: Wie kann ich mich selbst neu starten?
Danke für eure Antworten, das ist jetzt genug Stoff um weiter zu machen.
Eric |
AW: Wie kann ich mich selbst neu starten?
Dann von mir noch einen
Delphi-Quellcode:
if Restart then
Result := ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW) else Result := Msg.wParam; Zitat:
gruss |
AW: Wie kann ich mich selbst neu starten?
Zitat:
|
AW: Wie kann ich mich selbst neu starten?
Zitat:
daher macht es keinen sinn das mit zu übergeben ;) gruss |
AW: Wie kann ich mich selbst neu starten?
Wichtig ist das Handle zur Positionierung des neuen Programms. Wenn man 0 angibt, wird z.B. beim Verb runas die UAC nicht direkt angezeigt, sondern blinkt nur in der Taskleiste.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 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 by Thomas Breitkreuz