wjiachun 在 01-3-17 21:58:29 提供了如下回答, 请您查阅和评估:
-----------------------------------------------------------------------------
来自:温柔一刀 时间:2000-6-20 18:41:11 ID:268738
procedure ExitWindowsNT(uFlags : integer);
var
hToken : THANDLE;
tkp, tkDumb : TTokenPrivileges;
DumbInt : integer;
begin
FillChar(tkp, sizeof(tkp), 0);
// Get a token for this process
if not (OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, hToken)) then
raise Exception.create('OpenProcessToken failed with code '
+ inttostr(GetLastError));
// Get the LUID for the Shutdown privilege
LookupPrivilegeValue(nil, pchar('SeShutdownPrivilege'),
tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1;
// one privilege to set
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
// Get the shutdown provolege for this process
AdjustTokenPrivileges(hToken, false, tkp, sizeof(tkDumb), tkDumb, DumbInt);
// Cannot test the return value of AdjustTokenPrivileges
if GetLastError <> ERROR_SUCCESS then
Raise Exception.create('AdjustTokenPrivileges failed with code '
+ inttostr(GetLastError));
// shutdo
wn the system and for all applications to close
if not ExitWindowsEx(uFlags, 0) then
Raise Exception.create('ExitWindowsEx failed with code '
+ inttostr(GetLastError));
end;
调用方法:
ExitWindowsNT(EWX_SHUTDOWN or EWX_FORCE)
ExitWindowsNT(EWX_REBOOT)等等
3. 自己看 rxlib fileutil.pas BrowseDirectory 函数。
4. 别费这个神了,使用 expressbars (http://202.117.43.177) 下载。