WinNT以上如何通过程序快速关机

{  
    文章名   : WinNT以上如何通过程序快速关机
    说明     : 无
    作者     : JJony
    QQ       : 254706028
    博客     : http://blog.csdn.net/jzj_jony
    空间     : http://jonychen,ys168.com
    测试环境 : WinXPSP2,Win2003SP1
    声明     : 您可以任意转载,但请注明文章作者和出处
}
WinNT以上如何通过程序快速关机
   看到网上有很多人问在WinNT以上操作系统中不能通过直接调用ExitWindowsEx
关机,我这里介绍两种方法进行关机。

   在WinNT以上操作系统不能直接用ExitWindowsEx关机,而要先获得关机权限
SE_SHUTDOWN_NAME(SeShutdownPrivilege),下面给出代码:
//获取系统相关权限
function EnableDebugPrivilege(PName:pchar):Boolean;
var
 TokenHandle:THandle;
 DebugNameValue:TLargeInteger;
 Privileges:TOKEN_PRIVILEGES;
 RetLen:Cardinal;
begin
 Result:=False;
 if not OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,TokenHandle) then Exit;
 if not LookupPrivilegeValue(nil,PName,DebugNameValue) then
 begin
  CloseHandle(TokenHandle);
  Exit;
 end;
 Privileges.PrivilegeCount:=1;
 Privileges.Privileges[0].Luid:=DebugNameValue;
 Privileges.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
 Result:=AdjustTokenPrivileges(TokenHandle,False,Privileges,SizeOf(Privileges),nil,RetLen);
 CloseHandle(TokenHandle);
end;

//获取关机权限
EnableDebugPrivilege('SeShutdownPrivilege');

这样我们就有了关机权限了,下面说说如何关机,有2个API函数可以做到ExitWindowsEx和InitiateSystemShutdown
其中ExitWindowsEx我们常用可以这样调用ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF,0);
快速关机;
InitiateSystemShutdown我们不常用,其原形为:
function InitiateSystemShutdown(
                                lpMachineName:pchar;//机器名如果本地设为nil,远程格式为//远程机器名
                                lpMessage: PChar;   //关机消息
                                dwTimeout: DWORD;   //倒计时关机时间秒
                                bForceAppsClosed:bool;//是否强制关闭应用程序
                                bRebootAfterShutdown: BOOL//是否在关机后重起
                                ): BOOL; stdcall;
利用InitiateSystemShutdown关机:

1.显示倒计时关机对话框关机
  EnableDebugPrivilege('SeShutdownPrivilege');
  InitiateSystemShutdown(nil,'关机消息测试',60,true,false);
  这时系统出现倒计时关机对话框,并倒计时60秒后关机
2.不显示倒计时关机对话框直接关机
  EnableDebugPrivilege('SeShutdownPrivilege');
  InitiateSystemShutdown(nil,'关机消息测试',0,true,false);
  这里只需要把关机时间设为0,不显示关机对话框,和用ExitWindowsEx效果一样

说完了,其实除了这两种方法还有其他方法的,那就靠你自己捉摸了,希望我写的这些对你有所帮助。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值