2009-08-26 4 views
0

В моем приложении используется API Win32 SetSuspendState() для запуска приостановки или спящего режима системы, когда он завершил выполнение длительной задачи.Запросить приостановление на Vista, но разрешить другим приложениям отменять

API принимает параметр «ForceCritical», который определяет, приостанавливается ли система немедленно или передается ли она PBT_APMQUERYSUSPEND, чтобы разрешить другим приложениям отменять приостановку. Мое приложение использует это, чтобы хорошо играть с другими приложениями, такими как Media Player, поэтому оно не приостанавливается, если вы слушаете музыку или что-то в этом роде.

По какой-то причине, начиная с Vista, MS have changed things so this parameter is ignored, поэтому SetSuspendState сразу вызывает приостановку и другие приложения, которые не имеют возможности остановить его.

Кто-нибудь знает, как я могу вернуть желаемое «вежливое» поведение снова на Vista?

ответ

1

MSDN говорит

Для защиты системы от перехода в состояние с низким энергопотреблением в Windows Vista, приложение должно вызвать SetThreadExecutionState сообщить системе, что она находится в использовании

Я бы предположим, что WMP делает это, но более старые приложения этого не делают. Возможно, вы могли бы эмулировать это, отправив сообщение WM_POWERBROADCAST:PBT_APMQUERYSUSPEND всем окнам верхнего уровня и проверить их возвращаемые значения (отправить сообщение с таймаутом, чтобы завитое приложение не повесило ваше приложение)

 Смежные вопросы

  • Нет связанных вопросов^_^