本文整理自网络,侵删。
关机:ExitWindowsEx(EWX_POWEROFF or EWD SHUTDOWN,0)
注销:ExitWindowsEx(EWX_LOGOFF,0)
重启:ExitWindowsEx(EWX_REBOOT,0)
不过函数ExitWindowsEx在完成系统的关机、注销、重启动作之前必须要使应用程序获得系统相应的权限。
function GetPrivilege(PrivilegeType: PChar): longbool; stdcall;//这个是修改权限的函数
var
hToken : THandle;
tkp : TTokenPrivileges;
a: DWORD;
ll:longbool;
begin
OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
tkp.PrivilegeCount := 1;
ll:=LookupPrivilegeValue( nil,PrivilegeType , tkp.Privileges[ 0 ].Luid );
if PrivilegeType='SeDebugPrivilege' then
begin
ll:=LookupPrivilegeValue( nil,PrivilegeType , tkp.Privileges[ 0 ].Luid );
tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
end;
a:=0;
AdjustTokenPrivileges( hToken, False, tkp, SizeOf( TTokenPrivileges ), nil, a);
CloseHandle(hToken);
end;
调用:
GetPrivilege('SeShutdownPrivilege');
获取这个权限你就可以调用关机函数了
相关阅读 >>
Delphi firedac压缩和修复ms access数据库
Delphi7 中tstringlist的delimiter delimitedtext有bug,字符串分割有问题
Delphi dbexpress的upwherekeyonly的使用注意事项
Delphi (vcl及fmx[firemonkey])启动时的欢迎窗口实现代码
更多相关阅读请进入《Delphi》频道 >>