Форум: "WinAPI";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
Вниззавершение работы windows Найти похожие ветки
← →
mutabor (2004-05-24 11:36) [0]какое сообщение посылается приложению при завершении работы windows?( отловить с целью организации корректного завершения работы приложения)
← →
Anatoly Podgoretsky © (2004-05-24 11:38) [1]WM_ENDSESSION
← →
WebErr © (2004-05-24 17:51) [2]Удалено модератором
Примечание: Offtopic
← →
Sur © (2004-05-24 21:24) [3]Windows посылает сообщение WM_QUERYENDSESSION всем приложениям и ожидает ответ.
Каждое приложение получает сообщение и возвращает одну из величин: не равную нулю - приложение готово завершить свою работу, 0 - приложение не может завершить свою работу.
Если одно из приложений возвращает 0, Windows не завершает свою работу, а снова рассылает всем окнам сообщение, на этот раз WM_ENDSESSION.
Каждое приложение должно снова подтвердить свою готовность завершить работу, поэтому операционная система ожидает ответа TRUE, резонно предполагая, что оставшиеся приложения с момента предыдущего сообщения закрыли свои сессии и готовы завершить работу.
← →
Danemon (2004-05-25 01:02) [4]А есть ли способ отключать компоненты ПК? То бишь монитор, винчестер по-отдельности и по желанию?
← →
Danemon (2004-05-25 01:04) [5]Это я взял с какого-то сайта.
-----------------
Как отправить машину в состояние StanBy
Вот кусок кода, который это делает. Для перехода в состояние StandBy нужно вызвать процедуру StandBy. Для «заморозки» системы – Hibernate
function AdjustTokenPrivileges(TokenHandle : THandle; DisableAllPrivileges : BOOL; NewState : PTOKENPRIVILEGES;
BufferLength : DWORD;PreviousState : PTOKENPRIVILEGES; ReturnLength : DWORD) : BOOL;
stdcall; external "advapi32.dll" name "AdjustTokenPrivileges";
function GetShutdownPriv : boolean;
var
hToken : THandle;
tkp, p_tkp : TTokenPrivileges;
ReturnLength : DWORD;
procedure error(msg : string);
begin
MessageBox(0, @msg[1], "Error", MB_ICONERROR or MB_OK);
end;
begin
// Get a token for this process.
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then begin
error("OpenProcessToken");
Result := false;
exit;
end;
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(nil, "SeShutdownPrivilege", tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1; // one privilege to set
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, @tkp, 0, nil, ReturnLength);
// Cannot test the return value of AdjustTokenPrivileges.
if (GetLastError <> ERROR_SUCCESS) then begin
error("AdjustTokenPrivileges");
Result := false;
exit;
end;
Result := true;
end;
//отправляет машину в режим ожидания
procedure StandBy;
begin
if GetShutdownPriv then
SetSystemPowerState(TRUE, FALSE);
end;
//отправляет машину в режим Hibernation (все содержимое памяти сливается на диск)
procedure Hibernate;
begin
if GetShutdownPriv then
SetSystemPowerState(FALSE, FALSE);
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c