2011-05-04 22 views
6

Windows, güç tasarrufu için USB bağlantı noktaları gibi belirli çevre birimlerini kapatma seçeneğine sahiptir (bu davranış, Aygıt Yöneticisi aracılığıyla etkinleştirilebilir/devre dışı bırakılabilir). Güç kesintisi, bir dizüstü bilgisayarın kapağı kapalıyken olduğu gibi çeşitli koşullar altında gerçekleşir. Bu, USB portuna bağlı donanımdan bahseder ve dizüstü bilgisayar kapağı her kapatıldığında iletişim kesilir bir GUI var benim için bir soruna neden oluyor. Bu kapanma (bekleme) etkinliğini, gerçekleşmeden önce ve USB aygıtımı daha hassas bir şekilde kapatmayı programlı olarak algılamanın bir yolu var mı? Bu davranışı devre dışı bırakmak için sistemin her bir USB bağlantı noktasını programsal olarak yapılandırmanın bir yolu var mı?USB güç durumunun algılanması

Şu anda SystemEvents.PowerModeChanged modeline bakıyorum, bunu tespit etmek için doğru olay bu mu?

cevap

1

İstediğin gibi geliyor

  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 sonra WM_POWERBROADCAST mesajlar diyen ilk ihtiyaç sizin Uyg tarafından alınacak Sen

üzerinde.

Bu sayfa, bu pencere iletilerini kullanarak bir güç yönetimi sınıfının uygulanmasını sağlar. http://www.koders.com/csharp/fid00BAA34B0CAA3E320F9F5A44610A015973BF28ED.aspx?s=nativemethods#L175

+0

WinForms C# sınıfından olmayan bu iletilere nasıl ulaşırım? –

+0

Cevabı biraz güncellediniz. Bunu aslında yapmadım ama herhangi bir sınıftan RegisterPowerSettingNotification'a abone olabileceğinizi varsayalım. – Gavin

+0

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

1

Önceki posterlerde de belirtildiği gibi RegisterPowerSettingNotification istediğiniz şeydir. Açıklığa kavuşturmak için, Winforms (System.Windows.Forms.dll) dosyasını diğer .NET uygulamalarından (konsol, vb.) Alabilirsiniz. Bir Winform (Formlar sınıfı) alt sınıfını ve WndProc'u geçersiz kılarak bir Pencere tanıtıcısına (iletileri almak için) erişebilirsiniz.

MSDN yalnızca bir örnek kodla birlikte very good article yapmıştır.