Nein, die "shutdown.exe" gibt´s bei mir unter Win98 nicht. Und der Pfad "windows/system
32" legt auch die Vermutung nahe, dass es ein NT-System (NT, 2000, XP) ist.
Wenn man stattdessen den Befehl
ExitWindowsEx benutzt (dazu findet man 100% was im Forum), dann muss man sich a) keine Gedanken wg. dieser "shutdown.exe" machen, b) es funktioniert unter allen Windows-Versionen,
aber mit der Einschränkung c) dass man sich unter NT-Systemen erst die passenden Rechte holt.
Der Aufruf
Quelltext
1: 2: 3: 4: 5: 6:
| ShellExecute(Application.Handle, 'open', PChar('shutdown'), nil, PChar('c:\windows\system32\shutdown.exe'), sw_ShowNormal); |
ist ohnehin Quark, weil die Parameter nicht übereinstimmen. Wenn schon, dann wäre wohl:
Quelltext
1: 2: 3: 4: 5: 6:
| ShellExecute(self.Handle, 'open', 'c:\windows\system32\shutdown.exe', // Programm '-s -t 00 -f', // Parameter nil, // Arbeitsverzeichnis SW_SHOWNORMAL); |
(inkl. der von Lennske am Anfang erwähnten Parameter) richtig. Aber wer sagt, dass
jeder Anwender sein Windows im Ordner "c:\windows" installiert hat? Auch dafür gibt es passende Funktionen, etwa
GetSystemDirectory (dann ist man auch gleich da, wo man in dem Fall hin will). Und dann sollte man bei diesem Versuch wie obigem Code mit
fileexists prüfen, ob das Programm überhaupt existiert.
Fazit:
ExitWindowsEx ist die weitaus elegantere Variante.