СообЧа > База Знаний > Программирование > Win32 API

Вопрос

Как программно отправить компьютер в ждущий режим?

Ответ

Можно использовать три пути.

1. Функция ExitWindowsEx
BOOL ExitWindowsEx(
UINT uFlags, // флаг выключения
DWORD dwReserved // reserved
);
Parameters
uFlags
Определяет тип отключения, может быть следующим EWX_FORCE
Обрывает все процессы принудительно, если этот флаг установлен, система не посылает сообщения
WM_QUERYENDSESSION и WM_ENDSESSION работающим приложениям.
При этом возможна потеря информации!!!
EWX_LOGOFF Выключает пользователя соответсвенно…
EWX_POWEROFF Выключает комп…
EWX_REBOOT Перегружает…
EWX_SHUTDOWN Опускает систему до точки безопасного выключения питания…
dwReserved
Reserved; this parameter is ignored.
Пример: ExitWindowsEx(EWX_FORCE or EWX_REBOOT); //перегруз машины без вопросов
Это, наверное не совсем подойдет, но там можно покопаться…

2. Использовать командную строку:
rundll32 shell32,SHExitWindowsEx -1 — перегрузить Explorer
rundll32 shell32,SHExitWindowsEx 1 — выключение компьютера
rundll32 shell32,SHExitWindowsEx 0 — завершить Работу Текущего Пользователя
rundll32 shell32,SHExitWindowsEx 2 — Windows-98-PC boot
rundll32 krnl386.exe,exitkernel — выход из Windows без любых сообщений/вопросов

3. Этот наверное самый правильный — функция SetSystemPowerState
BOOL SetSystemPowerState(
BOOL fSuspend,
BOOL fForce
);
fSuspend
Метод.
Если TRUE — спящий режим (все в памяти)
Если FALSE — гибернация(HYBERNATE) — вся память скидывается на диск.
fForce
Форсирование.
Если TRUE — принудительное усыпление (возможно зависание системы при выходе),
Если FALSE — опрос приложений и драйверов для разрешения засыпания (не все драйвера это могут, поэтому некоторые машины не уходят в спящий режим)

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация