Главная страница
    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.46 MB
Время: 0.013 c
15-1143905550
unknown
2006-04-01 19:32
2006.04.23
Эльбрус 6к


15-1143711509
Некто
2006-03-30 13:38
2006.04.23
Запретить пользователям играть


3-1141392474
ancot
2006-03-03 16:27
2006.04.23
Не отробатывает IsEmpty в TQuery


15-1143831562
Мазут Береговой
2006-03-31 22:59
2006.04.23
Течет память...


15-1144141938
Pazitron_Brain
2006-04-04 13:12
2006.04.23
Как можно соединить два компьютера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский