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

Вниз

Выключить комп   Найти похожие ветки 

 
Weiss ©   (2005-10-04 16:37) [0]

Как програмно выключить комп?


 
stone ©   (2005-10-04 16:38) [1]

http://web.avtosklad.info/psites/ovainsh/prog_misc.asp


 
syte_ser78 ©   (2005-10-04 16:43) [2]

shutdown


 
Profik ©   (2005-10-04 16:43) [3]

Выключить монитор - это классно, но можно сделать ещё круче - программно завершить работу компьютера. Выглядеть это будет примерно так, с использованием различных режимов выключения:

ExitWindowsEx(EWX_LOGOFF or ewx_force,0);



завершает работу всех запущенных в системе процессов, сохраняя данные приложения, вызвавшего эту функцию

ExitWindowsEx(EWX_SHUTDOWN or ewx_force,0);



останавливает работу системы в безопасный момент времени. Все буферы очищаются с сохранением данных на диске, все процессы останавливаются

ExitWindowsEx(EWX_REBOOT or ewx_force,0);



перезагрузка системы

ExitWindowsEx(EWX_FORCE or ewx_force,0);



завершает работу всех запущенных в системе приложений, не посылая им сообщения WM_QUERYENDSESSION и WM_ENDSESSIO. Это может вызвать потерю не сохраненных данных

ExitWindowsEx(EWX_POWEROFF or ewx_force,0);



завершает работу компьютера с выключением питания, если система поддерживает автоуправление питанием

ExitWindowsEx(EWX_FORCEIFHUNG or ewx_force,0);



завершает работу всех запущенных в системе приложений если система висит

Ещё вариант перезагрузки:

mov  al,0F0h  
out  64h,al


 
Profik ©   (2005-10-04 16:46) [4]

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;


 
Profik ©   (2005-10-04 16:48) [5]

Программа для выключения компьютера в заданное время. Если запустить с параметром, указав время, то программа запустится скрытно и выключит компьютер в указанное время. Проверенно на Windows XP.

Для выключения используется процедура:
procedure ShutdownComputer;
var
 ph: THandle;
 tp, prevst: TTokenPrivileges;
 rl: DWORD;
begin
 OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or
   TOKEN_QUERY, ph);
 LookupPrivilegeValue(nil, "SeShutdownPrivilege", tp.Privileges[0].Luid);
 tp.PrivilegeCount := 1;
 tp.Privileges[0].Attributes := 2;
 AdjustTokenPrivileges(ph, FALSE, tp, SizeOf(prevst), prevst, rl);
 ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0);
end;


 
Hamster ©   (2005-10-04 19:02) [6]

shutdown.exe -s -t 0



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

Форум: "WinAPI";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.076 c
14-1132163491
Гарри Поттер
2005-11-16 20:51
2005.12.04
Процессор Pentium IV 516 oem (S775, 2933MHz/533MHz/1MB, EM64T)


14-1131820947
Sergey Masloff
2005-11-12 21:42
2005.12.04
Плдарки. Тупой оффтоп


5-1114449399
FunkyByte
2005-04-25 21:16
2005.12.04
Как отключить модуль от пакета?


3-1129711611
=Grinder$=
2005-10-19 12:46
2005.12.04
Обработка ошибок


2-1132051704
RiP
2005-11-15 13:48
2005.12.04
время выполнения массива





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