Python, как определить, что Windows перешла в режим ожидания

Обновлено: 30.06.2024

Даже когда ваш телефон находится в спящем режиме, он загружает электронные письма и получает обновления из социальных сетей. Затем, когда пришло время вывести телефон из спящего режима, нажатие кнопки питания вернет его к жизни менее чем за секунду. К сожалению, большинству ноутбуков, напротив, требуется несколько секунд, чтобы выйти из спящего режима, и они ничего не загружают в фоновом режиме.

Однако, если ваш компьютер поддерживает современный режим ожидания Windows 10, также известный как S0 Low Power Idle, он может загружать данные в спящем режиме и/или выходить из него еще до того, как вы поднимете крышку.

Поддерживает ли ваш ноутбук режим Modern Standby?

Многие ноутбуки, в том числе совершенно новые системы премиум-класса, не поддерживают режим Modern Standby. Microsoft не ведет список совместимых компьютеров или оборудования для пользователей, и большинство поставщиков ноутбуков не включают совместимость с Modern Standby в свои спецификации.

Мы быстро протестировали четыре случайных ноутбука с Windows 10 в нашем офисе: Microsoft Surface Book 2, Dell XPS 13 9370, HP Spectre x360 (8-го поколения Core), Lenovo ThinkPad T470 и Dell Latitude E7270. Из этих систем только Surface Book 2 и XPS 13 поддерживают Modern Standby, а XPS 13 поддерживает только быстрое пробуждение, а не постоянное подключение.

Вы можете просмотреть список состояний сна, доступных на вашем компьютере, введя «powercfg /a» в командной строке. Если ваш компьютер указывает «S0 Low Power Idle» как доступное состояние сна, все в порядке. Если нет, вам не повезло.

Если ваш компьютер поддерживает S0 Low Power Idle, вы также можете использовать инструмент Powercfg.exe, чтобы узнать, не мешает ли в настоящее время какое-либо оборудование или программное обеспечение работе Modern Standby. Введите «powercfg /energy» в командную строку, и Windows будет следить за вашим ПК в течение следующих 60 секунд, а затем предоставит список любых устройств или приложений, которые не позволяют вашей системе в полной мере использовать преимущества современного режима ожидания. Вы можете обнаружить, что устаревший драйвер препятствует полному переходу вашего ПК в состояние пониженного энергопотребления.

Если вы хотите узнать, переходило ли ваше устройство с Windows 10 в режим современного ожидания ранее, и узнать, какие компоненты и приложения потребляют больше всего энергии, просто введите «powercfg /sleepstudy» в командную строку. Вы получите сводку об использовании ЦП, энергопотреблении и даже количестве IP-пакетов, отправленных и полученных, когда ваш компьютер был в спящем режиме.

Фоновая электронная почта и быстрое пробуждение

Чтобы увидеть, насколько хорошо работает Modern Standby, мы провели несколько тестов на Surface Book 2 (13 дюймов). Как в Outlook 2016, так и во встроенном почтовом клиенте Windows 10 мы получали электронные письма с большими вложениями, даже когда ноутбук спал. Однако электронные письма, которые находились в середине отправки, когда мы переводили ноутбук в спящий режим, не исчезали. Когда мы инициировали загрузку в браузере Edge, перевод системы в спящий режим привел к сбою.

В документации Microsoft говорится, что только приложения Магазина Windows могут в полной мере использовать современный режим ожидания, поэтому мы были удивлены, что Outlook, который технически не является приложением Магазина, работает. К сожалению, ни один из основных браузеров не является магазином приложений. В магазине есть всего несколько FTP-приложений, которые многие люди используют для загрузки/выгрузки больших файлов, а то, что мы пробовали, вообще не работало.

Даже если вы не используете функцию подключения, Modern Standby обеспечивает гораздо более быстрое возобновление работы. Surface Book 2 вышел из спящего режима менее чем за секунду, а Spectre x360 — за 2–3 секунды.

Состояния питания

Большинство из нас знакомы с классическим "спящим режимом" в Windows, но реальность такова, что ПК с Windows традиционно поддерживают до шести состояний питания, которые редко понимают обычные пользователи:

S0: Традиционно это означало «работу» с полностью запущенной системой. Однако режим Modern Standby указан как «S0 Low Power Idle».

S1: это режим пониженного энергопотребления с включенным процессором (но настроенным на прекращение выполнения инструкций) и обновленной оперативной памятью. Это состояние питания в значительной степени было прекращено и больше не используется в современных устройствах Windows.

S2: это режим с меньшим энергопотреблением, чем S1, с выключенным процессором и обновленной оперативной памятью. Это состояние питания также в значительной степени упразднено в современных Windows.

S3: это традиционный режим ожидания с выключенным процессором и ОЗУ, настроенным на медленное обновление.

S4: это состояние — режим гибернации, когда оборудование выключено, а системная память сохранена во временном файле.

Большинство текущих и последних ПК с Windows используют состояние питания S3 для режима ожидания или сна по умолчанию и состояние питания S4, когда компьютер переходит в режим гибернации. Возобновление ПК из спящего режима S3 обычно занимает от 2 до 15 секунд, а полное возобновление работы ПК из спящего режима S4 занимает больше времени, в зависимости от оборудования и объема данных, сохраненных во временном файле из системной памяти.

Подключенный режим ожидания и современный режим ожидания

Первая попытка Microsoft ускорить выход компьютеров из спящего режима была предпринята с введением режима ожидания с подключением в Windows 8. Однако эта ранняя реализация технологии не работала с компьютерами с механическими жесткими дисками или гибридными хранилищами, и не давало вам такого большого контроля над настройками.

Modern Standby улучшает совместимость с системами на основе вращающихся носителей и гибридных носителей, обеспечивая гибкость настройки поведения отдельных аппаратных компонентов. Windows 10 также улучшает режим ожидания с низким энергопотреблением, позволяя вам лучше контролировать свою сеть с двумя разными настройками: современный режим ожидания с подключением и режим ожидания с отключенным подключением.

Некоторые ноутбуки, например Surface Book 2, поддерживают как режим ожидания с подключением, так и режим без подключения, в то время как другие, например XPS 13 9370, позволяют работать только в режиме без подключения. Когда ПК с Windows 10 переходит в режим современного ожидания, система использует режим ожидания с низким энергопотреблением S0. Драйвер Windows под названием Desktop Activity Moderator (DAM) останавливает все настольные приложения, кроме фоновых задач из приложений Магазина Windows.

Если вы настроили свой компьютер на использование Connected Modern Standby, сеть по-прежнему активна, и вы будете получать обновления Windows, обновления календаря и даже вызовы VoIP через приложение Магазина Windows. Кроме того, динамики вашего ноутбука или планшета будут продолжать воспроизводить музыку в режиме Connected Modern Standby, пока вы используете совместимое приложение Магазина Windows для потоковой передачи музыки.

Если вы переключите свой компьютер в режим современного ожидания без подключения, спящий режим отключит ваше сетевое соединение. Вы не будете принимать вызовы VoIP, поступающие через Wi-Fi, но ваш компьютер все равно будет выходить из «действия в реальном времени», например, напоминания календаря или синхронизации устройства Bluetooth.

Современный режим ожидания и время автономной работы

Для большинства пользователей Windows 10 выбор между современным режимом ожидания с подключением и современным режимом ожидания с отключением зависит от ответа на один вопрос:

Вам нужно, чтобы ваш компьютер продолжал получать обновления Windows и данные из приложений Магазина Windows, пока вы им не пользуетесь, или важнее максимально продлить время работы от батареи?

Конечно, оставаться на связи, даже когда вы не используете свое устройство, удобно, но увеличение времени между зарядками аккумулятора делает режим ожидания без подключения еще более удобным для путешественников.

Независимо от того, используете ли вы Connected Modern Standby или Disconnected Modern Standby, состояние S0 с низким энергопотреблением является более энергоэффективным и позволяет быстрее возобновлять работу, чем состояние питания S3, используемое большинством ноутбуков.

Как изменить настройки режима ожидания

Если вы используете ПК с Windows 10 с режимом Modern Standby, вы можете переключаться между режимом ожидания с подключением и режимом ожидания без подключения в меню «Параметры системы». Выберите вкладку «Питание и спящий режим» в разделе «Системные настройки» и снимите два флажка в разделе «Wi-Fi», которые позволяют компьютеру оставаться на связи в спящем режиме.

Вы можете использовать ранее упомянутую командную строку "powercfg /a", чтобы подтвердить текущие настройки для Modern Standby. Ваш компьютер находится в режиме ожидания с отключением, если средство Powercfg.exe указывает доступное состояние сна как «Ожидание (S0 Low Power Idle) Network Disconnected».

Конечно, если вы хотите восстановить режим ожидания с подключением в Windows 10, просто установите два флажка в разделе «Wi-Fi» на вкладке «Питание и спящий режим» в меню «Настройки системы».

Вы также можете решить, хотите ли вы, чтобы ваш ноутбук переходил в режим современного ожидания, когда вы закрываете крышку, или вместо этого вы хотите, чтобы ноутбук выключился. Перейдите в меню «Электропитание» и разверните «Кнопки питания и крышка», чтобы изменить настройку.

Лучший компьютер благодаря хорошему сну

Modern Standby — это самый продвинутый спящий режим, который мы когда-либо видели для устройств Windows. Новое состояние бездействия с низким энергопотреблением обеспечивает гораздо более быстрое пробуждение и возможность загрузки свежих данных из Интернета, пока ваш компьютер дремлет. К сожалению, исходя из небольшого размера нашей выборки, лишь немногие современные ноутбуки поддерживают этот режим.

Однако в ближайшем будущем мы увидим, что все больше систем будут использовать Modern Standby, включая новые ноутбуки на базе процессоров Qualcomm, и у нас будет больше приложений, использующих возможность синхронизации в фоновом режиме. Если ваш текущий ноутбук поддерживает S0 Low Power в режиме ожидания, вы можете воспользоваться его преимуществами уже сегодня.

Что именно происходит, когда ваша система приостанавливает работу? Узнайте больше об энергопотреблении Windows 10, узнав о каждом из шести состояний питания.


В статье, опубликованной на прошлой неделе, Баланс между эффективностью и производительностью с помощью параметров электропитания Windows 10, я показал вам, как настроить ряд параметров для экономии заряда аккумулятора. Я объяснил, что в дополнение к настройке времени простоя, которое должно пройти до выключения дисплея, вы можете настроить количество времени простоя, которое должно пройти, прежде чем система будет переведена в спящий режим.

Далее я объяснил, что выбрал 10 минут перед переводом компьютера в спящий режим, как показано на рис. A. Я обнаружил, что использование 5- и 10-минутных настроек для дисплея и спящего режима обеспечивает хороший баланс между энергосбережением. и простота использования. Если этот ноутбук не используется от пяти до 10 минут, экран выключается для экономии заряда батареи, но я могу вернуться к работе одним быстрым нажатием клавиши. Если я отсутствую более 10 минут, компьютер переходит в спящий режим, чтобы еще больше сэкономить заряд аккумулятора, но чтобы вернуться к работе, мне нужно нажать клавишу и войти в систему.

Рисунок А


Я выбрал 10 минут в качестве времени простоя, которое должно пройти, прежде чем компьютер перейдет в спящий режим.

Теперь я не сказал вам, что система Windows переходит в несколько уровней сна, когда переходит в режим энергосбережения. Эти уровни на самом деле называются состояниями сна Windows.

В этой статье я опишу, как работают состояния сна Windows. Затем я покажу вам, как использовать команду PowerCfg для исследования состояний сна Windows и устройств, поддерживающих их, в вашей системе Windows 10.

Состояния сна

Когда Windows переходит в спящий режим, может показаться, что система просто переходит в состояние пониженного энергопотребления и остается в таком состоянии. Однако процесс немного сложнее. Фактически система проходит через несколько уровней сна. Эти уровни, или, точнее, состояния питания, определяются спецификацией Advanced Configuration and Power Interface (ACPI). В целом спецификация ACPI перечисляет шесть состояний, которые пронумерованы от S0 до S5. В основном нас интересуют состояния сна, но чтобы все было в контексте, давайте рассмотрим их все.

В состоянии S0 компьютер находится в рабочем состоянии, и система полностью работоспособна. Тем не менее, некоторые устройства, которые в настоящее время не используются, могут переходить в режим пониженного энергопотребления для экономии энергии.

Когда компьютер переходит в спящий режим, первым уровнем спящего режима является S1. На этом уровне часы процессора останавливаются для экономии энергии. Память по-прежнему имеет силу и сохраняет свое содержание. После пробуждения система обычно возвращается в состояние S0 почти сразу — обычно примерно через две секунды.

После некоторого периода времени в S1 компьютер переходит в S2, второй уровень спящего режима. На этом уровне процессор отключается для экономии энергии. Память по-прежнему имеет силу и сохраняет свое содержание. При пробуждении система обычно возвращается в состояние S0 через две-пять секунд. Имейте в виду, что продолжительность может варьироваться в зависимости от вашего оборудования.

После некоторого периода времени в S2 компьютер переходит в S3, третий уровень спящего режима. На этом уровне помимо процессора могут отключаться и другие микросхемы на материнской плате для экономии энергии. Память по-прежнему имеет силу и сохраняет свое содержание. После пробуждения система обычно возвращается в состояние S0 через пять-восемь секунд. Опять же, продолжительность может варьироваться в зависимости от вашего оборудования.

Просматривая описания от S1 до S3, вы можете увидеть, что с каждым последующим уровнем отключается все больше компьютеров. Но S4 - это спящий режим. На этом уровне записывается образ содержимого памяти на диск и отключается питание всех устройств. Тем не менее, небольшая струйка питания на кнопку питания остается. После пробуждения время, необходимое системе для возврата к S0, зависит от многих факторов, но определенно займет больше времени, чем S1–S3.

На S5 компьютер выключается, хотя небольшая струйка питания на кнопку питания остается. При нажатии кнопки питания компьютер выполняет холодную перезагрузку, чтобы вернуться к S0.

Примечание. Если компьютер в состояниях S1, S2 или S3 разряжается полностью, он должен перезагрузиться, чтобы вернуться в состояние S0, и все данные в памяти будут потеряны. Однако если компьютер в состоянии S4 полностью разрядится, он все равно перезапустится из предыдущего места, поскольку содержимое памяти сохраняется в файле гибернации.

Хотя спецификации ACPI относятся к основным системным компонентам, многие устройства также придерживаются шести состояний. Вы можете исследовать состояния сна устройств, подключенных к вашей системе, с помощью команды PowerCfg.

Команда PowerCfg

Среди параметров, предоставляемых командой PowerCfg, есть параметр DeviceQuery и его 11 QueryFlags. Чтобы увидеть все эти QueryFlags, вы можете открыть окно командной строки, нажать кнопку «Развернуть», чтобы открыть полноэкранное окно командной строки, и ввести следующую команду:

powercfg /devicequery/?

Когда вы это сделаете, вы увидите список флажков и описаний, показанных в таблице A.

Таблица А


Эти флаги позволяют узнать, какие устройства в вашей системе поддерживают состояния с S1 по S4, а также какие устройства поддерживают вывод системы из состояний с S1 по S3.Вы также можете узнать, какие устройства в вашей системе в настоящее время настроены для вывода системы из любого спящего режима.

Например, введите команду:

powercfg /devicequery S1_supported

покажет вам все устройства в вашей системе, которые поддерживают спящий режим S1. Введите команду:

powercfg /devicequery wake_programmable

покажет вам все устройства в вашей системе, которые вы можете настроить для вывода системы из спящего режима.

Что вы думаете?

Задумывались ли вы когда-нибудь о том, какие устройства в вашей системе могут вывести ее из спящего режима? Если да, то теперь вы знаете, как использовать команду PowerCfg, чтобы узнать больше. Поделитесь своими советами и опытом в обсуждении ниже.

Также читайте…

Опубликовано: 24 ноября 2015 г., 13:50 по тихоокеанскому времени. Изменено: 24 ноября 2015 г., 13:44 по тихоокеанскому стандартному времени. Подробнее Microsoft

Опции управления питанием на ноутбуках часто создают проблемы для пользователей. Чтобы помочь вам в устранении неполадок, Faithe Wempen создала исчерпывающий контрольный список таких жалоб пользователей и предлагает некоторые решения этих неприятных проблем.

Режимы гибернации и ожидания чрезвычайно полезны для ноутбуков, потребляющих много энергии. К сожалению, многие пользователи не знают о различных настройках, связанных с настройкой ноутбука для правильного использования этих функций. Если вы поддерживаете пользователей ноутбуков, вы слишком хорошо знаете, к каким проблемам могут привести эти режимы. Чтобы помочь вам устранить такие проблемы, я собрал некоторые распространенные жалобы конечных пользователей на управление питанием ноутбука, а также некоторые возможные решения.

Спящий режим – это процедура, при которой содержимое памяти сохраняется на диск перед выключением, поэтому, когда компьютер снова выйдет из спящего режима, вам не придется выполнять полную перезагрузку. Режим ожидания переводит компьютер в режим низкого энергопотребления, потребляя ровно столько энергии, сколько необходимо для сохранения содержимого ОЗУ, чтобы компьютер мог быстро выйти из спящего режима без полной перезагрузки.

Не выходит из режима ожидания или гибернации
Жалоба пользователя: «После перевода компьютера в режим ожидания или гибернации он кажется полностью выключенным. Клавиши, которые должны разбудить компьютер, не имеют никакого эффекта».

Советы по устранению неполадок. В краткосрочной перспективе есть несколько способов восстановить контроль над компьютером:

  • Наберитесь терпения. Некоторым компьютерам требуется до 30 секунд для пробуждения.
  • Ищите ключ приостановки или гибернации. На некоторых ноутбуках есть специальные клавиши или кнопки для одного или обоих, но пользователь может их не заметить, если обычно использует какой-то другой способ пробуждения.
  • Попробуйте нажать и удерживать кнопку питания компьютера не менее пяти секунд. На ПК, переведенном в режим ожидания или гибернации нажатием кнопки питания, удерживание кнопки питания обычно приводит к сбросу и перезагрузке компьютера.
  • На большинстве ноутбуков есть клавиша [Fn], которую можно нажимать вместе с другими клавишами для управления специфическими функциями ноутбука, включая управление питанием.
  • В крайнем случае извлеките все батареи, подождите несколько минут, а затем замените батареи.

После того, как вы успешно перезагрузите компьютер, вам нужно найти основную проблему. Как правило, такие проблемы возникают из-за несоответствия либо между функциями управления питанием BIOS и вашей версии Windows, либо между управлением питанием и видеокартой. Чтобы приступить к устранению неполадок, убедитесь, что у вас установлена ​​самая последняя версия видеодрайвера. Никогда не помешает загрузить и установить последние версии драйверов с веб-сайта производителя. Известно, что устаревшие видеодрайверы вызывают проблемы с управлением питанием в некоторых системах.

Конфликт между управлением питанием BIOS и управлением питанием Windows является наиболее распространенной причиной такого сбоя пробуждения. Поэкспериментируйте с различными настройками в BIOS, чтобы увидеть, может ли это решить проблему. Например, компьютер может не выйти из спящего режима, если в параметрах питания панели управления включено расширенное управление питанием (APM), BIOS настроен на приостановку работы компьютера, а значение тайм-аута BIOS меньше значения, настроенного в Windows. . Чтобы исправить это, вы должны установить время ожидания BIOS выше, чем время ожидания Windows.

Из-за проблем с управлением питанием, о которых я упоминал, Microsoft рекомендует отключать все управление питанием на основе BIOS на компьютерах под управлением Windows NT 4.0.

Если настройка BIOS и параметров питания Windows не помогает, попробуйте посетить веб-сайт производителя ПК, чтобы узнать, доступно ли обновление BIOS. Известны проблемы с выходом некоторых ПК из ждущего режима, которые можно исправить, обновив BIOS.

BIOS может поддерживать стандарты управления питанием APM и Advanced Configuration and Power Interface (ACPI), но ACPI является более новым и сложным стандартом. Обновив BIOS, вы можете добавить к компьютеру поддержку ACPI, что потенциально может устранить проблемы совместимости между APM и вашим оборудованием или ОС.Если у вас по-прежнему возникают проблемы с пробуждением и вы не можете перейти с APM на ACPI в BIOS, попробуйте полностью отключить APM в BIOS.

Средство диагностики APM, Apmstat.exe, находится в папке Support/Tools на компакт-диске Windows 2000. Используйте ключ -v, что означает Verbose, чтобы получить больше данных.

Если вы не можете решить проблему из BIOS, попробуйте атаковать ее со стороны Windows. Поэкспериментируйте с настройками управления питанием Windows, чтобы увидеть, решат ли проблему изменения в каких-либо из них. Помните, что вам не обязательно использовать интерфейс Windows для режима ожидания или гибернации, если ваш BIOS поддерживает это напрямую. На одном ноутбуке, с которым я работал, клиенту, наконец, пришлось отказаться от управления питанием Windows и использовать функцию гибернации, встроенную в BIOS, нажав кнопку питания ПК.

USB-устройство не выводит компьютер из спящего режима
Жалоба пользователя: «К ноутбуку подключена внешняя USB-клавиатура или мышь, а Windows настроена на выход из спящего или ждущего режима при нажатии клавиши или движении мыши. Однако этого не произойдет».

Советы по устранению неполадок. В Windows 9x/Me ноутбуки, использующие USB-устройства для активации пробуждения, могут находиться только в состоянии ожидания (состояние S1). Такие USB-устройства нельзя использовать для вывода ноутбука из спящего режима (состояние S4). Если вы пытаетесь перейти в спящий режим, настройте Управление питанием на выход из спящего режима с помощью другого метода сигнализации, например кнопки питания ПК.

Если вы пытаетесь перейти в ждущий режим, такие проблемы могут возникнуть, если вы извлекли и снова вставили карту ПК с момента последней перезагрузки ПК. Это известная ошибка, и вы мало что можете с этим поделать, кроме как выполнить полную перезагрузку после извлечения и повторной установки карты ПК, а затем попытаться использовать режим ожидания.

Зависание при переходе в режим ожидания или гибернации
Жалоба пользователя: «При попытке перевести компьютер в режим ожидания или гибернации через Windows компьютер зависает и показывает либо черный экран, либо мигающий курсор в углу, либо Рабочий стол Windows».

Советы по устранению неполадок. Обычно это указывает на проблему с видеоадаптером. Попробуйте другой драйвер видеокарты; убедитесь, что у вас установлена ​​последняя версия с веб-сайта производителя. Если проблема возникает только при использовании режима гибернации, но не режима ожидания, возможно, вам просто придется прибегнуть к тому, чтобы не использовать спящий режим на этом компьютере.

Проблема также может быть вызвана тем, что COM-порт открыт на некоторых ноутбуках Dell или IBM с ОС Windows 2000. Если у вас есть открытое соединение через COM-порт, например, к модему или карманному устройству, закройте его перед переходом в режим ожидания. .

Черный экран или ошибки при выходе из режима гибернации
Жалоба пользователя: «После выхода из режима гибернации Windows работает неправильно. Например, меню «Пуск» может больше не работать, экран может быть полностью черным или я получаю сообщения об ошибках синего экрана».

Советы по устранению неполадок. Это известная ошибка, возникающая на ноутбуках с видеокартами PCI или AGP при использовании универсального видеодрайвера VGA, входящего в состав ОС. Стандартный видеодрайвер VGA не поддерживает режим гибернации. Вы также можете увидеть эту ошибку с другими видеодрайверами, особенно на ноутбуках, которые используют сторонние видеодрайверы, которые не поддерживают APM или ACPI. В некоторых версиях Windows также возникает проблема со старыми видеодрайверами, не написанными специально для этой версии. Например, использование версии видеодрайвера для Windows NT в Windows 2000 может привести к черному экрану при пробуждении или вообще к отсутствию пробуждения.

Если возможно, переключитесь на более новый видеодрайвер или на драйвер, разработанный специально для видеокарты. Если вы не можете обновить драйвер, вы не сможете использовать спящий режим на этом ПК, поэтому перейдите в раздел «Управление питанием» на панели управления и отключите поддержку гибернации.

Если вам нужно узнать, как связаться с производителем вашего видеоадаптера, обратитесь к списку контактов сторонних поставщиков аппаратного и программного обеспечения Службы поддержки продуктов Майкрософт:

Ошибка STOP при входе или выходе из режима ожидания или гибернации
Жалоба пользователя: «В Windows 2000 я получаю сообщение об ошибке «STOP 0x0000009F DRIVER_POWER_STATE_FAILURE» при входе или выходе из режима ожидания или гибернации». Или: "В Windows 2000 при входе в режим ожидания или возобновлении использования ноутбука после перехода в режим ожидания я вижу мигающий курсор в верхнем левом углу и сообщение "NMI: Проверка четности/Ошибка четности памяти"".

Советы по устранению неполадок. Обе эти жалобы обычно возникают из-за несовместимого драйвера устройства. В старых ноутбуках, которые были обновлены до Windows 2000 с более ранней версии ОС, часто возникают проблемы с несовместимыми драйверами устройств. Убедитесь, что у вас установлены актуальные подписанные драйверы для всех аппаратных компонентов ПК. Используйте исполняемый файл Sigverif.exe для проверки подписей. Также проверьте список совместимого оборудования, чтобы убедиться, что все оборудование поддерживается Windows 2000. Переустановка Windows 2000 в другую папку также может решить эту проблему, поскольку при этом Windows требует установки новых драйверов для всего оборудования.

Режим ожидания отсутствует в меню «Завершение работы» (Windows 98/Me)
Жалоба пользователя: «Я хочу активировать режим ожидания в Windows с помощью команды «Пуск/Завершение работы», но режим ожидания не является одним из моих вариантов. ”

Советы по устранению неполадок. Если в режиме ожидания ваш компьютер блокируется два раза подряд, появляется сообщение с вопросом, хотите ли вы отключить эту функцию. Если вы ответите Да, режим ожидания не будет доступен при выключении. Режим ожидания также будет отсутствовать, если ПК не совместим с APM.

Если режим ожидания выключен, но вы считаете, что ПК действительно может его использовать, вы можете снова включить его. Для этого удалите Advanced Power Management Support из диспетчера устройств, а затем перезагрузите компьютер, чтобы он обнаружил поддержку APM. Если это не сработает, попробуйте удалить контроллер гибких дисков из диспетчера устройств и позволить Windows обнаружить поддержку APM при перезапуске. Когда система обнаружит поддержку APM, Windows сбросит запись SuspendFlag в реестре. Если этот шаг не сработает, вам нужно будет напрямую отредактировать реестр. Найдите этот ключ:
HKEY_LOCAL_MACHINE\System\CurrentControlSet
\Services\VXD\VPOWERD

Должны быть значения Flags и SuspendFlag. Если нет, вам понадобится помощь производителя оборудования. Если значение флага больше 200, измените его, вычтя 200 из его текущего значения. Установите для SuspendFlag значение 0, если оно еще не установлено на это значение.

Будьте осторожны при редактировании реестра. Любые внесенные вами изменения сохраняются немедленно.

Программа или устройство препятствует переходу в ждущий режим
Жалоба пользователя: «Windows не переходит в ждущий режим, и появляется одно из этих двух сообщений: «Ваш компьютер не может перейти в ждущий режим, поскольку драйвер устройства или программа не позволяют этого». . Закройте все программы и повторите попытку» (Windows 98/Me) или «Система не может перейти в режим ожидания, поскольку драйвер \ не выполнил запрос на переход в режим ожидания» (Windows 2000). Я закрыл все открытые программы, но сообщение остается».

Советы по устранению неполадок. Некоторые программы или устройства, особенно с устаревшими драйверами или драйверами, несовместимыми с ACPI, могут вызывать эту ошибку. Если вам не удается определить, какая программа вызывает проблему, попробуйте средство устранения неполадок управления питанием Windows, которое можно бесплатно загрузить с веб-сайта Microsoft. Он написан специально для Windows 98, но может быть полезен и в других версиях. Кроме того, найдите файл Nohiber.txt в основной папке Windows в Проводнике. Если он присутствует, он даст вам подсказки о том, какое устройство не позволяет ноутбуку перейти в режим гибернации или ожидания.

Вы также можете самостоятельно найти неисправное устройство. Например, известно, что некоторые модели USB-принтеров Epson, а также несколько моделей многофункциональных устройств (особенно тех, которые прослушивают входящие факсы) не позволяют компьютеру перейти в режим ожидания. Попробуйте отключить все USB-устройства и извлечь все PC-карты по одной в процессе устранения неполадок. Кроме того, если USB-устройства не исчезают автоматически из диспетчера устройств при отключении, попробуйте вручную отключить все USB-устройства в диспетчере устройств. Кроме того, проверьте, не отключены ли какие-либо встроенные устройства. Например, известны проблемы, связанные с тем, что сетевые карты Intel мешают работе в режиме ожидания, когда они отключены в диспетчере устройств.

Для некоторых устройств нет обходного решения, и они не могут работать одновременно в режиме ожидания или гибернации. Некоторые версии видеоадаптера Tseng Labs ET-4000 под Windows 2000 такие. На ноутбуках, использующих такие устройства, нельзя использовать режимы ожидания или гибернации на базе Windows; однако вы можете попробовать независимое от ОС управление питанием BIOS, если оно доступно.

Хотя это редко возникает на ноутбуках, использование общего доступа к подключению к Интернету (ICS) в Windows 98/Me также может предотвратить переход компьютера в ждущий или спящий режим. Это поведение предназначено для предотвращения отключения компьютером, обслуживающим подключение к Интернету, других участников рабочей группы, которые могут использовать это подключение. По той же причине параметры управления питанием «Отключить монитор» и «Отключить жесткие диски» также не работают на хост-компьютере с выходом в Интернет.

Не переходит в ждущий или спящий режим в нужное время.
Жалоба пользователя: «Я настроил параметры питания в Windows так, чтобы компьютер переходил в ждущий режим после определенного периода бездействия, но этого не происходит. .”

Советы по устранению неполадок. Одной из распространенных причин этой ошибки является использование экранной заставки типа OpenGL. Попробуйте использовать другую заставку или полностью отключите функцию заставки.

При включении спящего режима режим ожидания срабатывает случайным образом.
Жалоба пользователя: «После включения поддержки гибернации компьютер самопроизвольно переходит в режим ожидания через случайные промежутки времени, даже если в панели управления для режима ожидания установлено значение «Никогда».

Советы по устранению неполадок. Это известная ошибка на некоторых ноутбуках, работающих под управлением Windows 98 Second Edition.Чтобы решить эту проблему, выключите режим гибернации, а затем установите для параметра «Режим ожидания» любое значение, кроме «Никогда» в разделе «Управление питанием». Сделайте это для каждой схемы питания. Затем вы можете снова включить режим гибернации.

Не удается перейти в режим гибернации или ожидания с 64 МБ ОЗУ или меньше
Жалоба пользователя: «На ноутбуке с ограниченным объемом ОЗУ, обычно 64 МБ или меньше, компьютер иногда не переходит в режим гибернации или ожидания. Он начинает это делать, но вместо этого возвращается рабочий стол Windows».

Советы по устранению неполадок. Эта проблема возникает, когда используется вся обычная память (менее 640 КБ), а ПК использует виртуальную память. Попробуйте закрыть все ненужные программы перед переходом в режим гибернации или ожидания. Также может помочь увеличение объема физической памяти на ПК.

Предупреждение о низком уровне заряда батареи не звучит в режиме ожидания
Жалоба пользователя: «Компьютер настроен на переход в режим ожидания при срабатывании предупреждения о низком заряде батареи и на отключение при срабатывании предупреждения о критическом заряде батареи. Однако, как только он переходит в ждущий режим, критический сигнал тревоги не срабатывает, и компьютер в конечном итоге разряжается, и все несохраненные данные теряются».

Советы по устранению неполадок. Проблема заключается в том, что Windows не может ничего делать, пока находится в режиме ожидания, в том числе сообщать о сигналах тревоги. Чтобы решить эту проблему, настройте сигнал тревоги низкого энергопотребления так, чтобы он издавал звуковой сигнал или отображал сообщение, а не переходил в режим ожидания. Затем вы можете установить критическое оповещение на режим гибернации или выключение.

Заключение
Обсужденные исправления должны дать любому специалисту ИТ-поддержки прочную основу для устранения неполадок, возникающих при использовании режимов гибернации или ожидания. Однако, если ни одно из этих исправлений не решит вашу проблему, вы всегда можете попробовать выполнить поиск в базе знаний Майкрософт. Для систем Windows 2000 хорошей отправной точкой является статья Q266169 «Устранение неполадок, связанных с режимом ожидания, режимом гибернации и выключением компьютера в Windows 2000». Для систем Windows 98/Me посетите Центр ресурсов по устранению неполадок оборудования/драйверов устройств Windows 98 и Windows Me.

Когда пользователь выключает компьютер или завершает сеанс, всегда существует риск того, что активное приложение не сохранит последние изменения или не завершит операции должным образом. Это может привести к потере данных пользователей и дополнительным затратам ресурсов на их восстановление.

Чтобы избежать этого сценария, вы можете научить свое приложение или службу обнаруживать завершение работы операционной системы (ОС) и события выхода пользователя из системы. Это позволит вашему приложению корректно остановить свою работу или попросить пользователя отложить завершение работы, чтобы избежать потери данных. В этой статье мы покажем вам, как обрабатывать события завершения работы ОС для консольных приложений, приложений с графическим интерфейсом пользователя (GUI) и служб с помощью Windows API.

Эта статья будет полезна группам разработчиков, которые работают с программным обеспечением Windows и ищут способы сохранения или записи данных перед выключением операционной системы.

Татьяна К.

Команда системного программирования

Victor Milokum
< /p>

Главный руководитель группы,

Команда системного программирования

Содержание:

Обнаружение выключения ОС: зачем и как это реализовать

Приложения должны обнаруживать завершение работы ОС, чтобы выполнять короткие, но очень важные действия:

  • Сохранить все несохраненные данные
  • Уведомлять сетевые компоненты о том, что компьютер будет выключен.
  • Зарегистрируйте отключение, чтобы проанализировать его позже.

Зачем обнаруживать события отключения

Общий процесс обнаружения выключения системы одинаков для всех типов приложений и служб Windows. Чтобы обнаружить отключение, мы создаем callback-функцию и регистрируем ее в системе. Когда происходит определенное событие Windows, система вызывает callback-функцию, передавая информацию о событии через входные параметры. Затем функция обратного вызова анализирует данные входного параметра, определяет, какое событие произошло, и соответствующим образом выполняет код.

Не существует единого способа заставить все типы приложений обнаруживать завершение работы ОС и выход пользователя из системы. Причина в том, что разные типы приложений отличаются своим синтаксисом и функциональностью. Вот почему в этой статье мы покажем вам три отдельных руководства — для консольных приложений, приложений с графическим интерфейсом и служб Windows. Обратите внимание, что методы, которые мы описываем, помогут вам только обнаружить события завершения работы и выхода из системы. Чтобы обнаружить спящий режим ОС, вам потребуется реализовать другие механизмы.

Решения для обнаружения событий отключения для трех типов программного обеспечения

Консольные приложения

Предположим, у нас есть консольное приложение с обработчиками по умолчанию, которое не обнаруживает события завершения работы и выхода из системы. Чтобы приложение это делало, мы создадим собственную функцию-обработчик:

Далее нам нужно зарегистрировать эту функцию в качестве обработчика для нашего консольного приложения со следующей функцией API:

Вот как это будет выглядеть в коде приложения:

Если компьютер выключается или пользователь выходит из системы, функция HandlerRoutine должна возвращать значение TRUE. Если эта функция возвращает FALSE, ОС будет использовать следующий обработчик из списка для консольного приложения. Windows будет повторять этот процесс, пока обработчик не вернет TRUE .

Обратите внимание, что система запускает HandlerRoutine в отдельном потоке. Поэтому вам может потребоваться принять дополнительные меры для синхронизации ваших ресурсов между несколькими потоками.

Примечание. Если консольное приложение загружает библиотеки gdi32.dll или user32.dll или вызывает функции, используемые в этих библиотеках, не работая с ними напрямую, Windows считает это приложением с графическим интерфейсом. В этой ситуации Microsoft Developer Network (MSDN) рекомендует использовать детектор через сообщения Windows. Например, вы можете создать поддельное окно нулевого размера. В следующем разделе мы покажем вам, как реализовать такой детектор.

MSDN также предупреждает, что при обработке сигналов CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT и CTRL_SHUTDOWN_EVENT консольные функции и вызывающие их функции среды выполнения C могут работать некорректно. Это происходит, когда ОС вызывает процедуры очистки внутренней консоли перед выполнением обработчика сигнала процесса.

Чтобы глубже изучить эту тему, изучите описание функции SetConsoleCtrlHandler и обработки событий WinAPI для консольных приложений в MSDN. В большинстве случаев после внедрения HandlerRoutine ваше консольное приложение сможет обнаруживать завершение работы ОС.

Приложения с графическим интерфейсом

Для приложения с графическим интерфейсом только выключение и перезапуск считаются приостановкой операций. Переход в спящий режим не является очень важным событием, потому что он ничего не меняет в работе приложения с графическим интерфейсом. В некоторых случаях нам может потребоваться определить спящий режим, чтобы сообщить другим системным компонентам, что компьютер переходит в спящий режим. Однако большинству приложений с графическим интерфейсом потребуются только механизмы для обнаружения выключения и перезапуска ОС. Давайте посмотрим, как работают эти механизмы.

Приложения с графическим интерфейсом получают информацию о целевых событиях через оконные сообщения. Вот почему нам нужны сообщения WM_QUERYENDSESSION и WM_POWERBROADCAST, чтобы приложение с графическим интерфейсом могло обнаруживать отключение ОС.

Windows отправляет оконное сообщение WM_QUERYENDSESSION, когда пользователь инициирует процесс закрытия пользовательского сеанса. Выключение компьютера и его перезагрузка также приводят к завершению сеанса пользователя. Таким образом, сообщения об этих событиях доставляются через одно и то же оконное сообщение.

Мы используем сообщение WM_POWERBROADCAST, чтобы получить информацию о приостановке операции в системе. Вот как мы обрабатываем это сообщение в приложении с графическим интерфейсом:

Параметры wParam и lParam в WM_POWERBROADCAST содержат идентификаторы различных системных событий, включая завершение работы. Для оконного сообщения WM_QUERYENDSESSION значение IParam, равное 0, указывает на перезагрузку или завершение работы, а другие значения указывают на другие события.

Обратите внимание, что мы обрабатываем события выключения и выхода из системы отдельно, поскольку они не обязательно связаны.

Что мы можем сделать после получения WM_QUERYENDSESSION?

Если мы ничего не делаем, Windows показывает предупреждающее сообщение о том, что Эти приложения препятствуют завершению работы, и пользователь может либо отменить завершение работы, либо принудительно продолжить его, независимо от ожидающих приложений. В таких случаях наше приложение может вести себя одним из двух способов:

  • Закройте его, чтобы система немедленно выключилась.
  • Показать предупреждающее сообщение, объясняющее пользователям, почему им не следует перезагружаться прямо сейчас

Последний вариант возможен для Windows Vista и более поздних версий Windows. Вот как это выглядит:

Для пользователя сообщение будет выглядеть так:

Предупреждающее сообщение для пользователя

Предупреждающее сообщение для пользователя

Если мы не хотим, чтобы наше приложение отображалось в списке приложений, блокирующих выключение (например, если нам нужно скрыть его от пользователей), мы можем реализовать функцию SetProcessShutdownParameters. В этой функции обратите особое внимание на параметр dwLevel. Если мы изменим его значение на SHUTDOWN_NORETRY , наше приложение с графическим интерфейсом не будет блокировать завершение работы:

Однако этот код не будет работать, если WM_QUERYENDSESSION будет называться не обработчик по умолчанию. Вот почему нам нужно изменить наш обработчик оконных сообщений следующим образом:

Теперь давайте посмотрим на WM_POWERBROADCAST. Это сообщение помогает нам обнаруживать события приостановки работы ОС с помощью wParam == PBT_APMSUSPEND .Также из оконного сообщения WM_POWERBROADCAST мы можем получить разные варианты события возобновления и изменения параметров питания (например, когда пользователь меняет план электропитания).

Вот как вы можете использовать WM_QUERYENDSESSION и WM_POWERBROADCAST для обнаружения выключения ОС в приложении с графическим интерфейсом. Теперь давайте рассмотрим тот же процесс для службы Windows.

Службы Windows

Механизм обнаружения необходимых событий для службы Windows идентичен методу для консольных приложений, но с немного другим синтаксисом и многими другими функциями. Давайте рассмотрим этот механизм на примере универсальной службы Windows.

Как и в случае с консольными приложениями, нам нужно создать функцию обратного вызова и зарегистрировать ее в качестве обработчика запросов на управление службами.

Мы можем сделать это с помощью двух функций:

В нашем примере мы будем использовать вторую функцию, так как она позволяет обрабатывать больше элементов управления, чем первая. Вот как мы реализуем RegisterServiceCtrlHandlerEx в нашем сервисе:

В этом коде синтаксис параметра HandlerProc выглядит следующим образом:

Дополнительную информацию об элементах управления, управляемых параметром HandlerProc, см. в официальной документации Microsoft для функции обратного вызова LPHANDLER_FUNCTION_EX.

Нам также необходимо указать элементы управления, которые мы хотим обрабатывать при запуске службы:

Если мы этого не сделаем, наш обработчик не будет вызываться для элементов управления SERVICE_ACCEPT_STOP и SERVICE_ACCEPT_POWEREVENT.

Кроме управляющего кода, обработчик получает еще один параметр: тип события. Для некоторых элементов управления этот параметр равен 0 и ничего не значит. Но для элементов управления SERVICE_CONTROL_POWEREVENT и SERVICE_CONTROL_SESSIONCHANGE, например, параметр eventType можно использовать для определения того, какое событие группы powerevent или sessionchange произошло. Параметр eventData для этих событий указывает на структуру с дополнительными данными об этом событии: структура POWERBROADCAST_SETTING указывает на powerevent, а WTSSESSION_NOTIFICATION указывает на sessionchange .

Вот пример реализации нашего обработчика:

В основном потоке мы обрабатываем управление, выполняя функцию CtrlHandlerEx. Наша служба Windows имеет ограничение по времени примерно в 20 секунд на обработку элемента управления SERVICE_CONTROL_SHUTDOWN. После этого система отключится независимо от того, завершила ли служба подготовку к отключению. Если служба завершила свою подготовку, она вернет NO_ERROR и закроется, чтобы система не ждала 20 секунд.

Если служба выполняет какое-то длительное и важное действие, которое не позволяет ОС быстро закрыть процесс, мы можем использовать другой метод для обработки отключений. Вместо элемента управления SERVICE_CONTROL_SHUTDOWN мы можем подписаться на SERVICE_CONTROL_PRESHUTDOWN. Обратите внимание, что Windows XP и Windows Server 2003 не поддерживают этот элемент управления.

В других ОС Windows, если служба получает уведомление о предварительном завершении работы, система приостанавливает процесс завершения работы и не возобновляет его до тех пор, пока не истечет время предварительного завершения работы или обработчик управления предварительным завершением работы не завершит свою задачу.

Время ожидания определяется в структуре SERVICE_PRESHUTDOWN_INFO и по умолчанию равно 180 000 миллисекунд (трем минутам). Мы можем установить собственное значение для SERVICE_PRESHUTDOWN_INFO с помощью функции ChangeServiceConfig2.

Примечание. Поскольку служба получила SERVICE_CONTROL_PRESHUTDOWN, она больше не может получать SERVICE_CONTROL_SHUTDOWN, поэтому имеет смысл подписаться только на одно из двух событий.

Вы можете использовать SERVICE_CONTROL_SHUTDOWN так же, как и все остальные структуры. Не забудьте добавить его в список разрешенных элементов управления:

Если мы поймаем SERVICE_CONTROL_PRESHUTDOWN, мы сможем выполнить определенные действия в обработчике:

В этом случае сообщение, предупреждающее об отключении системы, будет отображаться для пользователя в течение 30 секунд.

Поскольку выбор между выключением и предварительным завершением работы влияет на взаимодействие с пользователем, мы рекомендуем использовать его только в крайнем случае — если есть вероятность потери данных или если восстановление активного состояния службы и соответствующих данных занимает много времени после перезагрузка системы.

Во всех остальных случаях лучше всего использовать SERVICE_CONTROL_SHUTDOWN, как описано выше. Это помогает службе Windows обнаруживать завершение работы и завершать свою работу, не прерывая сеанс пользователя.

Зачем обнаруживать события отключения

Заключение

Возможность обнаруживать завершение работы и выход пользователей из системы может иметь решающее значение для приложений Windows, которым необходимо сохранять данные или завершать важные процессы перед закрытием. В этой статье мы показали, как реализовать эту возможность в консольных и графических приложениях, а также в службе Windows.

Нужна дополнительная информация по этому вопросу?У нас есть разработчики с экспертными знаниями в области управления ОС, которые готовы помочь вам улучшить ваше решение. Свяжитесь с нами, и мы начнем обсуждение вашего проекта!

Читайте также: