Главная страница
    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.013 c
2-1144314324
Cneltyn
2006-04-06 13:05
2006.04.23
Как вывести в Имидж содержимое другого Ммиджа в опр-ые координаты


15-1143728797
Хинт
2006-03-30 18:26
2006.04.23
Не пойму где ошибка (вызов функции из DLL)


15-1143789835
vagra
2006-03-31 11:23
2006.04.23
Знатокам: В какую гос. структуру жаловаться?


3-1138807330
Neo Trinitron
2006-02-01 18:22
2006.04.23
Поиск в поле CLOB (Oracle)


15-1144059580
balepa
2006-04-03 14:19
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский