2016-05-04 3 views
-1

У меня есть настольная программа Windows (Tweetz), которая прерывает/предотвращает спящий режим во время работы. Характер программы - следить за Twitter и обновлять пользовательский интерфейс при поступлении твитов. Я подозреваю, что активность сети и/или обновление пользовательского интерфейса предотвращают/прерывают режим ожидания.Предотвращение прерывания сна для настольного приложения Windows

Есть ли системный API, который может сообщить Windows, что приложение не должно препятствовать спать?

+0

Вы смотрите на это неправильно. Что-то не так с вашей программой. Подумайте, что это такое и исправить. Вызов функции, который вы ищете, не существует. Потому что это необязательно. –

+1

* «Есть ли системный API, который может сказать Windows, что приложение не должно мешать спящему?» - Нет, но возможно другое: [SetThreadExecutionState] (https://msdn.microsoft.com/en-us/library /windows/desktop/aa373208.aspx). Возможно, приложение использует это как * * функцию *. Обновления пользовательского интерфейса не помешают системе войти в режим сна, но сетевой трафик (см. [Критерии безопасности системы] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa373233.aspx)). – IInspectable

+0

Так что это, скорее всего, сетевой трафик, который отслеживает твиттер, который убивает спать. Похоже на уловку 22. Есть ли обходной путь? –

ответ

1

Я предлагаю следующий подход. Записывайте монитор Twitter в службу Windows и будьте в курсе любого сообщения, которое вам нужно отобразить. Для этих сообщений проверьте, находится ли система в спящем режиме или если рабочий стол заблокирован (в соответствии с вашими спецификациями приложений). Настройте механизм связи с вашим настольным приложением и передайте сообщения, когда это необходимо/возможно. Служба не помешает вашей системе переспать, вы можете контролировать изменения состояния сеанса с помощью SetServiceStatus(), используя SERVICE_ACCEPT_SESSIONCHANGE. Вы также можете использовать событие OnSessionChange.

1

Возможно, Windows успешно спит, но ваше приложение сразу просыпается, отправляя сетевой трафик. Если это так, вы можете обращаться с сообщениями WM_POWERBROADCAST, особенно PBT_APMQUERYSUSPEND и PBT_APMRESUMEAUTOMATIC. Остановите сетевой трафик при приостановке и перезапустите его при возобновлении.

+0

Установите сон на одну минуту, подождите, пока не появится твит, система просыпается. Я также обнаружил, что если я отключу сеть, система останется спальной. Не окончательный тест, но он уверен, указывает пальцем на сетевую активность. Я сделаю то, что вы предлагаете. По крайней мере, это не проснется. –

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