注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

delphi实现关机 注销 重启  

2014-02-15 23:41:34|  分类: delphi xe5 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

关机:ExitWindowsEx(EWX_POWEROFF or EWX_SHUTDOWN,0)
注销:ExitWindowsEx(EWX_LOGOFF,0)
重启:ExitWindowsEx(EWX_REBOOT,0)
不过函数ExitWindowsEx在完成系统的关机、注销、重启动作之前必须要使应用程序获得系统相应的权限。

Windows Reboot, Shutdown, PowerOff(Tipp drucken)



Die Routine ist f黵 Windows 95/98/Me sehr einfach. F黵 NT, 2000 und XP ben鰐igen Sie jedoch Privilegien, um einen Systemneustart durchzuf黨ren. Die erste Routine pr黤t dabei das Betriebssystem, die zweite "schie遲" das System ab. 
Betriebssystemversion erfragen

function GetSystemVersion: Integer; // 0 - Windows 95/98/Me, 1 - WinNT/2000/XP/2003
var
  os: _OSVERSIONINFOA;
begin
  os.dwOSVersionInfoSize := sizeof(os);
  GetVersionEx(os);
  case os.dwPlatformId of
    VER_PLATFORM_WIN32s       : Result := -1;
    VER_PLATFORM_WIN32_WINDOWS: Result := 0;
    VER_PLATFORM_WIN32_NT:      Result := 1;
    else
      Result := -1;
  end;
end;


Neustart des Rechners

procedure RebootWindows;
var
  Success: Boolean;
  TokenPriv: TTokenPrivileges;
  TokenHandle: THandle;
  CurrentProc: THandle;
  vRes: Integer;
begin
  Success := false;

  vRes := GetSystemVersion;
  if vRes = 1 then // Win NT
  begin
    CurrentProc := GetCurrentProcess;

    if OpenProcessToken(CurrentProc, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle) then
    begin
      if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', TokenPriv.Privileges[0].LUID) then
      begin
        TokenPriv.PrivilegeCount := 1;
        TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

        if AdjustTokenPrivileges(TokenHandle, false, TokenPriv, 0, nil, nil) then
          // Change Options for HARD Shutdown, Reboot etc.
          // EWX_LOGOFF - Typipcally Logout of a user
          // EWX_POWEROFF - Shutting down the system and turns the power off - 
          //   needs system-power-off support (needs SE_SHUTDOWN_NAME - privilege)
          // EWX_REBOOT - typically reboot (needs SE_SHUTDOWN_NAME - privilege)
          // EWX_SHUTDOWN - typically shut down (needs SE_SHUTDOWN_NAME - privilege)
            // for power-off-feature you MUST use EWX_POWEROFF, even the system supports it
          // EWX_FORCE - Force shut down - BE CAREFULLY (not sending WM_QUERYENDSESSION or
          //   WM_ENDSESSION messages)
          // EWX_FORCEIFHUNG - Force shut down if process do not respond to WM_QUERYENDSESSION or
          //   WM_ENDSESSION

          Success := ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF or EWX_FORCEIFHUNG, 0);
        if not Success then
          ShowMessage('No Reboot possible');
      end;
    end
    else
      ShowMessage('No Reboot possible');
  end
  else
    if vRes = 0 then  // Windows 95/98 - dont need privileges
      ExitWindowsEx(EWX_SHUTDOWN, 0);
end;
  评论这张
 
阅读(356)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017