У меня есть сервис, разработанный на C ++, работающий на Windows 8 (и 8.1). Как я могу узнать, что система перешла в режим ожидания подключения?
Так как это сервис, у него нет окна, я должен использовать PowerRegisterSuspendResumeNotification, но это не похоже на работу. Кто-нибудь знает, как я могу получить такое уведомление?
Я связался со службой технической поддержки Microsoft. Это их ответ:
Прямых уведомлений для входа / выхода из ConnectedStandby не существует, но вы можете просто использовать уведомления о включении / выключении монитора, поскольку ConnectedStandby является синонимом отключения экрана в системе с поддержкой AOAC (но не в устаревшей системе, возможность AOAC можно получить, получив SystemPowerCapabilities с использованием CallNtPowerInformation и поиск значения AoAc в структуре SYSTEM_POWER_CAPABILITIES).
Чтобы получать уведомления о включении / выключении монитора, вы можете использовать RegisterPowerSettingNotification и GUID настройки питания GUID_MONITOR_POWER_ON.
Похоже, есть обходной путь для этого, прослушивая события включения / выключения экрана.
Это мучительно не могу комментировать!
CallNtPowerInformation(SystemPowerCapabilities, ...)
вернусь SYSTEM_POWER_CAPABILITIES
, Имеет BOOLEAN
член AoAc
, если это FALSE
, ваша система не поддерживает подключенный режим ожидания.
Он работал для меня на оборудовании Intel на заказ (так же, как машины на рынке). AoAc
= Всегда включен Всегда подключен, предпочтения Intel.
Мне не разрешили комментировать, сюрприз позволил дать ответ. Это не ответ определенно, но обсуждение.
Вы не получаете уведомление для PBT_APMSUSPEND
, PBT_APMRESUMESUSPEND
а также PBT_APMRESUMEAUTOMATIC
у тебя обратный звонок?
После прохождения http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/26629db2-6d33-427c-a767-8c857d775079/windows-8-connected-standby-and-aoac?forum=wdk
Похоже, приложениям не нужно различать режимы S3 и CS (a.k.a AOAC, всегда включен, всегда подключен). Хотя не ясно, разрешена ли сетевая активность в CS.