2011-05-04 19 views
6

Windows tiene la opción de apagar ciertos periféricos, tales como puertos USB, para ahorrar energía (este comportamiento puede ser activado/desactivado a través del Administrador de dispositivos). El apagado se produce en diversas condiciones, como cuando se cierra la tapa de una computadora portátil. Esto me está causando un problema ya que tengo una GUI que habla con el hardware conectado al puerto USB y las comunicaciones se cortan cada vez que se cierra la tapa del portátil. ¿Hay alguna forma de detectar mediante programación este evento de apagado (espera) antes de que ocurra y cerrar con más gracia mi dispositivo USB? ¿Hay alguna manera de configurar programáticamente cada uno de los puertos USB del sistema para desactivar este comportamiento?USB estado de energía

En este momento estoy mirando SystemEvents.PowerModeChanged, es este el caso de la derecha para detectar esto?

Respuesta

1

Parece que usted quiere

  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)

Primero tiene que llamar luego RegisterPowerSettingNotification mensajes WM_POWERBROADCAST será recibido por sus applicati en.

Esta página tiene una aplicación C# de una clase de gestión de potencia utilizando estos mensajes de ventana. http://www.koders.com/csharp/fid00BAA34B0CAA3E320F9F5A44610A015973BF28ED.aspx?s=nativemethods#L175

+0

¿Cómo hago para llegar a esos mensajes de una clase no # WinForms C? –

+0

Han actualizado la respuesta un poco. No he hecho realmente esto, pero yo supongo que puede suscribirse a RegisterPowerSettingNotification de cualquier clase – Gavin

+0

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

1

Según lo mencionado por los carteles anteriores RegisterPowerSettingNotification es lo que quiere. Para aclarar, puede hacer referencia a Winforms (System.Windows.Forms.dll) desde otros tipos de aplicaciones .NET (consola, etc.). Puede obtener acceso a un identificador de Ventana (para recibir mensajes) subclasificando un Winform (la clase Forms) y anulando su WndProc.

MSDN tiene un very good article de hacer justamente eso, junto con el código de ejemplo.