HanDs
管理员

[Delphi文章] 关机重启注销函数 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看

//快速关机或重启或注销函数
//Action:0 注销,1 重启,2 关机;
//Mode:False直接断电重启或关机不保存设置,True系统默认重启或关机
function ShutDownWindow(const Action:Word;const Mode:Boolean=True): Boolean;
type TNtSDSystem=function(Action:Word): Cardinal; stdcall;
var  OSVer: TOSVersionInfo;
     TOKen: THandle;
     TPGes: TTokenPrivileges;
     Nothing: DWord;
     Handle: HModule;
     NtSDSystem: TNtSDSystem;
     function ShutDown(const Act:word):Boolean;
     begin
      case Act of
       0:Result:=ExitWindowsEx(EWX_FORCE+EWX_LOGOFF,  0);//注销
       1:Result:=ExitWindowsEx(EWX_FORCE+EWX_REBOOT,  0);//重启
      else
         Result:=ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF,0);//关机
      end;
     end;
begin
Result :=False;
Nothing:=0;
OSVer.dwOSVersionInfoSize:=SizeOf(OSVer);
if GetVersionEx(OSVer) then begin
   if OSVer.dwPlatformId = VER_PLATFORM_WIN32_NT then begin
     if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, TOKen) then begin
        LookupPrivilegeValue(nil, 'SeShutdownPrivilege', TPGes.Privileges[0].Luid);
        TPGes.PrivilegeCount:=1;
        TPGes.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(TOKen,False,TPGes,0,PTokenPrivileges(nil)^,Nothing);
        CloseHandle(TOKen);
        if Mode then
          Result := ShutDown(Action)
        else begin
          Handle := LoadLibrary('NTDLL.DLL');
          if Handle > 0 then begin
          NtSDSystem:=GetProcAddress(Handle,'NtShutdownSystem');
          if Assigned(NtSDSystem) then begin
          NtSDSystem(Action);
          FreeLibrary(Handle);
          end else
          Result := ShutDown(Action);
          end else Result := ShutDown(Action);
        end;
     end;
   end else Result := ShutDown(Action);
end;
end;


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
关机 重启 注销 函数
#1楼
发帖时间:2016-7-9   |   查看数:0   |   回复数:0
游客组
快速回复