Странное поведение компа после SetSuspendState
От: WizardEye  
Дата: 22.10.11 16:30
Оценка:
Народ, использую функцию 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 сек нажать на клавишу или двинуть мышью, то повторного погружения в сон не происходит.

Подскажите как избежать повторного погружения в сон.

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.