Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Вниз

Как осуществить перезагрузку 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.012 c
15-1143813477
ronyn
2006-03-31 17:57
2006.04.23
half - life и winRoute


3-1141305413
BillyJeans
2006-03-02 16:16
2006.04.23
Поле c Bitmap в базе Access


15-1142726262
ronyn
2006-03-19 02:57
2006.04.23
ICQ recovery password


15-1143896469
_duk
2006-04-01 17:01
2006.04.23
Защита


1-1142321670
oleg_
2006-03-14 10:34
2006.04.23
загрузка некоторых рисунков вызывает зависание под 98,МЕ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский