win2003或更高操作系统下的关机(100分)

  • 主题发起人 主题发起人 yanjian99
  • 开始时间 开始时间
Y

yanjian99

Unregistered / Unconfirmed
GUEST, unregistred user!
请问我要怎么去判断现在所用的操作系统是win2003或更高的操作系统,且在此操作系统下怎么去实现关机或重启,需源码,谢谢.win2003以下的就不要给了,我已有了。
 
[:)]网上有很多这样的代码
 
有系统的PAI函数吧,具体是什么,不记得了,自己查查!
 
API知道
PAI是啥高级东东?
 
最简单的 调用系统的shutdown.exe
 
网上多的是
//关机准备函数
function SetPrivilege(sPrivilegeName : string;bEnabled : 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,PChar( sPrivilegeName ),TP.Privileges[ 0 ].LUID ))then
begin
if( bEnabled )then //Give this privileges
begin
TP.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
end
else begin //NOT Give this privileges
TP.Privileges[ 0 ].Attributes := 0;
end;
dwRetLen := 0;
//enables or disables privileges in the specified access token.
Result := Windows.AdjustTokenPrivileges(Token,False,TP,SizeOf( TPPrev ),TPPrev,dwRetLen);
end;
CloseHandle( Token );
end;

//关机函数
function WinExitInNT( iFlags : integer ) : boolean;
begin
Result := True;
if( SetPrivilege( 'SeShutdownPrivilege',True ) )then
begin
if( not ExitWindowsEx( iFlags,0 ) )then
begin
Result := False;
end;
SetPrivilege( 'SeShutdownPrivilege',False )
end
else begin
// handle errors...
Result := False;
end;
end;

procedure PowerOff;
begin
// win9x
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF,32);
// winNT
if Win32Platform = VER_PLATFORM_WIN32_NT then
WinExitInNT(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF);
end;
 
如果策略编辑里面没有设置user用户的权限的话!上面的程序等于废铁!
 
后退
顶部