2011-05-04 17 views
6

System Windows ma możliwość wyłączenia niektórych urządzeń peryferyjnych, takich jak porty USB, w celu oszczędzania energii (takie zachowanie można włączyć/wyłączyć za pomocą Menedżera urządzeń). Wyłączanie zasilania odbywa się w różnych warunkach, takich jak zamknięcie pokrywy laptopa. Jest to dla mnie problem, ponieważ mam GUI, który mówi o sprzęcie podłączonym do portu USB, a komunikacja jest zerwana za każdym razem, gdy pokrywa laptopa jest zamknięta. Czy istnieje sposób, aby programowo wykryć to zdarzenie wyłączania zasilania (wstrzymania?), Zanim to nastąpi i bardziej elegancko wyłączyć moje urządzenie USB? Czy istnieje sposób programowej konfiguracji każdego portu USB w systemie, aby wyłączyć to zachowanie?Wykrywanie stanu zasilania USB

W tej chwili patrzę na SystemEvents.PowerModeChanged, czy to jest odpowiednie wydarzenie, aby to wykryć?

Odpowiedz

1

Brzmi jak chcesz

  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)

najpierw należy zadzwonić RegisterPowerSettingNotification następnie WM_POWERBROADCAST wiadomości będą odbierane przez firmy applicati na.

Ta strona ma C# implementację klasy zarządzania energią za pomocą tych komunikatów okna. http://www.koders.com/csharp/fid00BAA34B0CAA3E320F9F5A44610A015973BF28ED.aspx?s=nativemethods#L175

+0

Jak uzyskać dostęp do tych wiadomości z klasy C# innej niż WinForm? –

+0

Zaktualizowałem nieco odpowiedź. Nie zrobiłem tego, ale zakładam, że możesz zasubskrybować RegisterPowerSettingNotification z dowolnej klasy – Gavin

+0

http://stackoverflow.com/q/1925237/726631 – Saleh

1

Jak wspominają poprzednie plakaty, RegisterPowerSettingNotification jest tym, czego potrzebujesz. Aby wyjaśnić, możesz odwoływać się do WinForm (System.Windows.Forms.dll) z innych typów aplikacji .NET (konsola itp.). Możesz uzyskać dostęp do klamki okna (aby odbierać wiadomości), dzieląc klasę Winform (klasa Forms) i nadpisując jej WndProc.

MSDN ma very good article robienia właśnie tego, wraz z przykładowym kodem.

Powiązane problemy