检测USB电源状态

时间:2011-05-04 14:17:21

标签: c# windows usb standby

Windows可以选择关闭某些外围设备(如USB端口)以节省电量(可以通过设备管理器启用/禁用此行为)。断电发生在各种条件下,例如当笔记本电脑的盖子关闭时。这对我来说是一个问题,因为我有一个GUI,它连接到USB端口的硬件,每次关闭笔记本电脑盖时都会切断通信。有没有办法以编程方式检测此事件发生之前的断电(待机?)事件并更优雅地关闭我的USB设备?有没有办法以编程方式配置每个系统的USB端口以禁用此行为?

现在我正在查看SystemEvents.PowerModeChanged,这是检测此事件的正确事件吗?

2 个答案:

答案 0 :(得分:1)

这听起来像你想要的

  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)
  3. 您首先需要调用RegisterPowerSettingNotification,然后您的应用程序将收到WM_POWERBROADCAST消息。

    此页面具有使用这些窗口消息的电源管理类的c#实现。 http://www.koders.com/csharp/fid00BAA34B0CAA3E320F9F5A44610A015973BF28ED.aspx?s=nativemethods#L175

答案 1 :(得分:1)

如前所述,RegisterPowerSettingNotification就是您想要的。为了澄清,您可以从其他类型的.NET应用程序(控制台等)引用Winforms(System.Windows.Forms.dll)。您可以通过继承Winform(Forms类)并覆盖其WndProc来访问Window句柄(以便接收消息)。

MSDN有very good article这样做,以及示例代码。