我在后台运行了一个客户端,但关机的时候这一个程序关不掉,所以机器也关不掉。我在接收WM_QUERYENDSESSION 的消息时个,用了Application.Terminate但只能关掉掉本进程,还是关不掉计算机。请帮帮忙。
你用一下方法试试,关机
procedure AdjustToken; //获得系统NT,win2000 的关机权限
var
hdlProcessHandle: Cardinal;
hdlTokenHandle: Cardinal;
tmpLuid: Int64;
tkp: TOKEN_PRIVILEGES;
tkpNewButIgnored: TOKEN_PRIVILEGES;
lBufferNeeded: Cardinal;
Privilege: array[0..0] of _LUID_AND_ATTRIBUTES;
begin
hdlProcessHandle := GetCurrentProcess;
OpenProcessToken(hdlProcessHandle,
(TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY), hdlTokenHandle);
LookupPrivilegeValue(, SeShutdownPrivilege, tmpLuid);
Privilege[0].Luid := tmpLuid;
Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1;
tkp.Privileges[0] := Privilege[0];
AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Sizeof(tkpNewButIgnored),
tkpNewButIgnored, lBufferNeeded);
end;
procedure ShutDownSystem;
var
hToken: THandle;
begin
if (not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
TOKEN_ALL_ACCESS or TOKEN_QUERY, hToken)) then
begin
application.Terminate;
end;
AdjustToken;
if (not ExitWindowsEx(EWX_POWEROFF, $FFFF)) then
begin
Application.Terminate;
end;
end;