Определение состояния питания USB - PullRequest
6 голосов
/ 04 мая 2011

В Windows есть возможность отключения определенных периферийных устройств, таких как USB-порты, для экономии энергии (это можно включить / отключить с помощью диспетчера устройств). Отключение питания происходит при различных условиях, например, когда крышка ноутбука закрыта. Это вызывает у меня проблемы, так как у меня есть графический интерфейс, который взаимодействует с оборудованием, подключенным к USB-порту, и связь прерывается каждый раз, когда крышка ноутбука закрывается. Есть ли способ программно обнаружить это событие отключения питания (ожидания?), Прежде чем оно произойдет, и более корректно завершить работу моего USB-устройства? Есть ли способ программно настроить каждый из USB-портов системы, чтобы отключить это поведение?

Прямо сейчас я смотрю на SystemEvents.PowerModeChanged, это правильное событие, чтобы обнаружить это?

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Как уже упоминалось предыдущими авторами, RegisterPowerSettingNotification - это то, что вам нужно. Чтобы уточнить, вы можете ссылаться на Winforms (System.Windows.Forms.dll) из других типов приложений .NET (консоли и т. Д.). Вы можете получить доступ к дескриптору Window (для получения сообщений), создав подкласс Winform (класс Forms) и переопределив его WndProc.

В MSDN есть очень хорошая статья об этом, а также пример кода.

1 голос
/ 04 мая 2011

Звучит так, как ты хочешь

  1. WM_POWERBROADCAST (http://msdn.microsoft.com/en-us/library/aa373247(v=vs.85).aspx)
  2. RegisterPowerSettingNotification (http://msdn.microsoft.com/en-us/library/aa373196.aspx)

Сначала вам нужно вызвать RegisterPowerSettingNotification, затем ваше приложение получит сообщения WM_POWERBROADCAST.

На этой странице есть реализация класса управления питанием c # с использованием этих оконных сообщений. http://www.koders.com/csharp/fid00BAA34B0CAA3E320F9F5A44610A015973BF28ED.aspx?s=nativemethods#L175

...