Mit dem folgenden Code kann der Ordner ermittelt werden in dem sich die Systemdateien von Windows befinden:
1 function GetWindowsDir: string;
2 var
3 Required : Cardinal;
4 I : Integer;
5 begin
6 Result := '';
7 // zuerst die Gesamtlänge ermitteln
8 Required := GetWindowsDirectory(nil, 0);
9 if Required <> 0 then begin
10 SetLength(Result, Required);
11 // gesamten String, einschliesslich des schliessenden NULL bytes holen
12 GetWindowsDirectory(PChar(Result), Required);
13 // in einen "echten" Pascal String umwandeln
14 for I := 0 to Length(Result) - 1 do
15 if Result[I + 1] = #0 then begin
16 SetLength(Result, I);
17 Exit;
18 end;
19 end;
20 end;
Windows-Ordner für temporäre Dateien ermitteln
Mit dem folgenden Code kann der Ordner ermittelt werden in dem Windows temporäre Dateien ablegt:
1 function GetWindowsTempFolder: string;
2 var
3 Required : Cardinal;
4 I : Integer;
5 begin
6 Result := '';
7 // zuerst die Gesamtlänge ermitteln
8 Required := GetTempPath(0, nil);
9 if Required <> 0 then begin
10 SetLength(Result, Required);
11 // gesamten String, einschliesslich des schliessenden NULL bytes holen
12 GetTempPath(Required, PChar(Result));
13 // in einen "echten" Pascal String umwandeln
14 for I := 0 to Length(Result) - 1 do
15 if Result[I + 1] = #0 then begin
16 SetLength(Result, I);
17 Exit;
18 end;
19 end;
20 end;
Das System herunterfahren oder neu starten
Wenn Sie Ihren Rechner programmgesteuert herunterfahren oder neu starten wollen, können Sie den folgenden Code dazu verwenden. Bitte beachten Sie, dass dies unter Windows Vista mit aktivierter UAC nur funktioniert wenn das Programm mit Administratorrechten gestartet wurde!
1 function WindowsDowner(flag: word): Boolean;
2 var
3 VInfo : TOSVersionInfo;
4 hToken : THandle;
5 tp : TTokenPrivileges;
6 dw : DWord;
7 begin
8 //
9 // Mögliche Werte für die Variable "flag":
10 // EWX_LOGOFF - Benutzer abmelden
11 // EWX_SHUTDOWN - Rechner sicher herunterfahren
12 // EWX_REBOOT - Rechner neu starten
13 // EWX_FORCE - Auswahl erzwingen (mit anderen "flag" Werten per OR kombinieren)
14 // EWX_POWEROFF - Rechner herunterfahren
15 //
16 Result := false;
17 VInfo.dwOSVersionInfoSize := SizeOf(VInfo);
18 GetVersionEx(VInfo);
19 if VInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then begin {NT}
20 OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken);
21 LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].Luid);
22 tp.PrivilegeCount := 1;
23 tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
24 dw := 0;
25 AdjustTokenPrivileges(hToken, false, tp, 0, PTokenPrivileges(nil)^, dw);
26 CloseHandle(hToken);
27 Result := ExitWindowsEx(flag, 0);
28 end else begin // Win95/98
29 Result := ExitWindowsEx(flag, 0);
30 end;
31 end;
aktualisiert: 11.11.2009