关机与禁止关机代码

今天抽空,写完了定时关机程序的代码,测试了一下,还不错,以前写过个禁止关机的程序,用来测试一下,看哪个强,先运行禁止关机的程序,用Windows xp的关闭计算机试了一下,关不了.

代码很少:

private
       procedure QueryEndSession(var Msg:TMessage);Message WM_QueryEndSession;


procedure TForm1.QueryEndSession(var Msg:TMessage);
begin
  Msg.Result:=0;
end;
就是收到关机消息后返回0,告知还不能关机.

而定时关机这边主要是用这条API指令来关机:

  BOOL   ExitWindowsEx(  
  UINT   uFlags,   //   关闭操作  
  DWORD   dwReserved   //   保留,0即可.  
)   ;  

其中参数uFlags的取值及其含义:  
EWX_FORCE   在紧急情况下强制关机。  
EWX_LOGOFF   以其他用户身份登录。  
EWX_POWEROFF   关闭系统并关闭电源。  
EWX_REBOOT   重新启动。  
EWX_SHUTDOWN   安全地关机。 

测试了一下,在开启了禁止关机程序的情况下,使用EWX_SHUTDOWN,EWX_POWEROFF都不能关机.只有加上EWX_FORCE这个参数,禁止关机的程序不起作用了.

//关机代码,CMD用 EWX_FORC可以突破禁止关机.
procedure TForm1.CloseWin(cmd:Cardinal);
var
      VerInfo:TOSVersionInfo;  
      hToken:THANDLE;
      tkp:TOKEN_PRIVILEGES;  
      Nothing:Cardinal;  
  begin  
      VerInfo.dwOSVersionInfoSize:=SizeOf(VerInfo);  
      GetVersionEx(VerInfo);  
      if   VerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT   then  
      Begin  
          OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES   or   TOKEN_QUERY,hToken);  
          LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);  
          tkp.PrivilegeCount:=   1;  
          tkp.Privileges[0].Attributes:=   SE_PRIVILEGE_ENABLED;  
          AdjustTokenPrivileges(hToken,   FALSE,   tkp,   0,nil,   Nothing);  
      End;
       ExitWindowsEx(CMD,0);

  end;

 

转载于:https://www.cnblogs.com/hssbsw/archive/2012/06/03/2533101.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值