Показать сообщение отдельно

  #5  
Старый 14.07.2009, 03:16
Silly.worm
Познающий
Регистрация: 13.07.2009
Сообщений: 65
С нами: 8858521

Репутация: 54
По умолчанию

Цитата:
Как выключить компьютер программно с помощью паскаля ?
можно так попробовать, но ни паскаля ни делфей нету по рукой проверить не могу...
PHP код:
program QuickShutdown;

uses
  SysUtils
,
  
Windows;

const
  
SE_SHUTDOWN_NAME='SeShutdownPrivilege'
var
  
hTokenTHandle;
  
tkpTTokenPrivileges;
  
tkpoTTokenPrivileges;
  
zeroDWORD;
  
OSNamestring;

function 
myGetVersionString;
var
 
VersionInfoTOSVersionInfo;
begin
 VersionInfo
.dwOSVersionInfoSize:=SizeOf(TOSVersionInfo);
 if 
Windows.GetVersionEx(VersionInfo)
 
then
  begin
   with VersionInfo 
do
    
begin
     
case dwPlatformId of
         VER_PLATFORM_WIN32s         
OSName:='Win32s';
         
VER_PLATFORM_WIN32_WINDOWSOSName:='Windows 95';
         
VER_PLATFORM_WIN32_NT     OSName:='Windows NT';
     
end;
     
Result:=OSName+' Version '+IntToStr(dwMajorVersion)+'.'+IntToStr(dwMinorVersion)+
                
#13#10' (Build '+IntToStr(dwBuildNumber)+': '+szCSDVersion+')';
    
end;
  
end
 
else Result:='';
end;

begin
  
if Pos('Windows NT'MyGetVersion)=1
  then
   begin
    zero
:=0;
    if 
not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERYhToken)
    
then
     begin
      
Exit;
     
end// if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)
    
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERYhToken)
    
then
     begin
      
Exit;
     
end// if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)
    // SE_SHUTDOWN_NAME
    
if not LookupPrivilegeValue(nil'SeShutdownPrivilege' tkp.Privileges].Luid)
    
then
     begin
      
Exit;
     
end// if not LookupPrivilegeValue(nil, 'SeShutdownPrivilege' , tkp.Privileges[0].Luid )
    
tkp.PrivilegeCount:=1;
    
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
    
AdjustTokenPrivileges(hTokenFalsetkpSizeOf(TTokenPrivileges ), tkpozero);
    if 
Boolean(GetLastError())
    
then
     begin
      
Exit;
     
end // if Boolean(GetLastError())
    
else
     
begin
      ExitWindowsEx
(EWX_Force or EWX_SHUTDOWN0);
     
end;
   
end // if OSVersion = 'Windows NT'
  
else
   
begin // just shut the machine down
    
ExitWindowsEx(EWX_Force or EWX_SHUTDOWN0);
   
end;
end
Хотя, это конечто больше для делфей...
 
Ответить с цитированием