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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.033 c
2-1132221469
IAMDANIL
2005-11-17 12:57
2005.12.04
DEBUG


14-1131556869
Nic
2005-11-09 20:21
2005.12.04
Что такое неэффективное управление?


4-1128324552
Roughneck
2005-10-03 11:29
2005.12.04
Можно ли установить Hook на появление процесса?


9-1121668609
Smolin
2005-07-18 10:36
2005.12.04
Как сделать Молнию на Opengl


14-1132052141
oleggar
2005-11-15 13:55
2005.12.04
clipper deploy