Народ, использую функцию SetSuspendState для ввода компа в сон/гибернацию с последующим выходом по таймеру:
if not OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, hToken) then begin
Exit;
end;
if not LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].Luid) then begin
Exit;
end;
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES), prev, len) or
(GetLastError() = ERROR_NOT_ALL_ASSIGNED) then begin
end;
CloseHandle(hToken);
hTimer := CreateWaitableTimer(nil, TRUE, nil);
if hTimer = 0 then begin
Exit;
end;
SetWaitableTimer(hTimer, dueTime, 0, nil, nil, TRUE);
SetSuspendState(AHibernation, FALSE, FALSE);
WaitForSingleObject(hTimer, INFINITE);
CloseHandle(hTimer);
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND,SC_MONITORPOWER, -1);
Собственно проблема:
когда ввожу комп в гибернацию (AHibernation=True) то комп при выходе из режима гибернации нормально работает,
если ввожу комп в сон (AHibernation=False) то примерно через 1 мин 40 сек после пробуждения комп снова погружается в сон.
Время повторного погружения в сон не зависит от того на какое время выставлен таймер.
Если за эти 1 мин 40 сек нажать на клавишу или двинуть мышью, то повторного погружения в сон не происходит.
Подскажите как избежать повторного погружения в сон.
Спасибо.