在 NT内核的操作系统上实现系统关闭

心路上空

心路上空

2016-01-29 14:04

在 NT内核的操作系统上实现系统关闭,在 NT内核的操作系统上实现系统关闭
 
很多时候,我们可能需要执行关闭计算机或重新启动计算机的操作,但在 WinNT 内核的操作系统中,我们不能只调用简单的 API 函数来完成这样的操作。这并不是一个复杂的问题,却有时候会让人“为难”,如果是这样,现在解决这个问题的办法来了。

  ***************************************************************************
  具体使用示例:
  注销当前用户 = ExitWin32Sys(EWX_FORCE or EWX_LOGOFF);
  重新启动计算机 = ExitWin32Sys(EWX_FORCE or EWX_REBOOT);
  关闭计算机 = ExitWin32Sys(EWX_FORCE or EWX_POWEROFF);
  ***************************************************************************
  具体代码:




  uses
  Windows;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/delphi/)

  function GetSysTypes: Boolean; // & 获取操作系统类型 &
  function SetPrivilege(sPrivilegeName: AnsiString; bEnable: Boolean): Boolean; // & 设置权限 &
  procedure ExitWin32Sys(iFlags: Integer); // & 执行注销、退出或重启系统的操作 &

  implementation

  function GetSysTypes: Boolean;
  var
  Ver: TOSVersionInfo;
  begin
  Result := False;
  Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  if GetVersionEx(Ver) then
  if Ver.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then
  Result := True
  else
  Result := False;
  end;

[next]


  function SetPrivilege(sPrivilegeName: AnsiString; bEnable: Boolean): Boolean;
  var
  TPPrev, TP: TTokenPrivileges;
  Token : THandle;
  dwRetLen : DWord;
  begin
  Result := False;
  OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or
  TOKEN_QUERY, Token);
  TP.PrivilegeCount := 1;
  if LookupPrivilegeValue(nil,PAnsiChar(sPrivilegeName),TP.Privileges[0].LUID) then
  begin
  if bEnable then
  TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
  else
  TP.Privileges[0].Attributes := 0;
  dwRetLen := 0;
  Result := AdjustTokenPrivileges(Token, False, TP, SizeOf(TPPrev), TPPrev, dwRetLen);
  end;
  CloseHandle(Token);
  end;

  procedure ExitWin32Sys(iFlags: Integer);
  begin
  if GetSysTypes then
  ExitWindowsEx(iFlags,0)
  else
  if SetPrivilege('SeShutdownPrivilege',True) then
  if not ExitWindowsEx(iFlags,0) then
  SetPrivilege('SeShutdownPrivilege',False);
  end;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/delphi/)


 
展开更多 50%)
分享

猜你喜欢

在 NT内核的操作系统上实现系统关闭

Delphi
在 NT内核的操作系统上实现系统关闭

Linux操作系统内核编译详解

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux操作系统内核编译详解

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

基于Linux操作系统实现的传真系统

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
基于Linux操作系统实现的传真系统

Linux操作系统内核中工作队列的操作

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux操作系统内核中工作队列的操作

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在安装操作系统之前

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
在安装操作系统之前

让关闭的Linux操作系统实现防火墙功能

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
让关闭的Linux操作系统实现防火墙功能

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

用AdoDataSet实现数据表的导入导出

用AdoDataSet实现数据表的导入导出

《秦时明月》手游非R金币获取使用技巧

《秦时明月》手游非R金币获取使用技巧
下拉加载更多内容 ↓