Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

Как осуществить перезагрузку Windows   Найти похожие ветки 

 
Скиф ©   (2006-04-06 15:46) [0]

Подскажите пожалуйста, как программно осуществить перезагрузку Windows. К сожалению, опыта работы с win API у меня никакого, так что, если можно, на уровне "для дурака".


 
Eraser ©   (2006-04-06 16:10) [1]


> Скиф ©   (06.04.06 15:46)


function GetWinVersion: String;  
var  
  VersionInfo : TOSVersionInfo;  
  OSName      : String;  
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_WINDOWS : OSName := "Windows 95";  
              VER_PLATFORM_WIN32_NT      : OSName := "Windows NT";  
           end; // case dwPlatformId  
           Result := OSName + " Version " + IntToStr( dwMajorVersion ) + "." + IntToStr( dwMinorVersion ) +  
                     #13#10" (Build " + IntToStr( dwBuildNumber ) + ": " + szCSDVersion + ")";  
        end; // with VersionInfo  
     end // if GetVersionEx  
  else  
     Result := "";  
end;  

procedure ShutDown;  
const  
 SE_SHUTDOWN_NAME = "SeShutdownPrivilege";   // Borland forgot this declaration  
var  
 hToken       : THandle;  
 tkp          : TTokenPrivileges;  
 tkpo         : TTokenPrivileges;  
 zero         : DWORD;  
begin  
 if Pos( "Windows NT", GetWinVersion) = 1  then // we"ve got to do a whole buch of things  
    begin  
       zero := 0;  
       if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then  
          begin  
            MessageBox( 0, "Exit Error", "OpenProcessToken() Failed", MB_OK );  
            Exit;  
          end; // if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)  
       if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then  
          begin  
            MessageBox( 0, "Exit Error", "OpenProcessToken() Failed", MB_OK );  
            Exit;  
          end; // if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)  

       // SE_SHUTDOWN_NAME  
       if not LookupPrivilegeValue( nil, "SeShutdownPrivilege" , tkp.Privileges[ 0 ].Luid ) then  
          begin  
             MessageBox( 0, "Exit Error", "LookupPrivilegeValue() Failed", MB_OK );  
             Exit;  
          end; // if not LookupPrivilegeValue( nil, "SeShutdownPrivilege" , tkp.Privileges[0].Luid )  
       tkp.PrivilegeCount := 1;  
       tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;  

       AdjustTokenPrivileges( hToken, False, tkp, SizeOf( TTokenPrivileges ), tkpo, zero );  
       if Boolean( GetLastError() ) then  
          begin  
             MessageBox( 0, "Exit Error", "AdjustTokenPrivileges() Failed", MB_OK );  
             Exit;  
          end // if Boolean( GetLastError() )  
       else  
          ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );  
     end // if OSVersion = "Windows NT"  
  else  
     begin // just shut the machine down  
       ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );  
     end; // else  
end;  


 
Boris Marchenko ©   (2006-04-06 17:25) [2]

Да, на уровне "для дурака" =)


 
XProger ©   (2006-04-07 07:20) [3]

ShellExecute(..."shutdown -r"...);



Страницы: 1 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.064 c
15-1143818149
antonn
2006-03-31 19:15
2006.04.23
Ну вот, продали дельфи...


2-1144494090
ЧиЧиЧи
2006-04-08 15:01
2006.04.23
Работа с модемом


15-1144250794
Дурак
2006-04-05 19:26
2006.04.23
Вопросик сложный


2-1144362853
Freeon
2006-04-07 02:34
2006.04.23
КРИПТОАНАЛИЗ


2-1144267669
Std
2006-04-06 00:07
2006.04.23
определение недели по дате