2011-05-04 177 views
6

Windows有一定的下降外设,如USB接口,供电的选项,以节省电力(这种行为可以启用/通过设备管理器禁用)。断电发生在各种条件下,例如当笔记本电脑的盖子关闭时。这是我造成的问题,因为我有一个会谈到连接到USB端口的硬件和通讯被切断每一个笔记本电脑的盖子关闭时的GUI。有没有一种方法正好与更从容关闭我的USB设备前,以编程方式检测该断电(待机?)事件?有没有办法编程配置每个系统的USB端口来禁用这种行为?检测USB电源状态

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

回答

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)

首先需要调用RegisterPowerSettingNotification然后WM_POWERBROADCAST消息将通过您的applicati接收上。

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

+0

我该如何去有关从非的WinForms C#类得到这些消息? – 2011-05-04 14:46:56

+0

已经更新了答案。我还没有真正做到这一点,但我会假设你可以从任何类 – Gavin 2011-05-04 14:48:43

+0

http://stackoverflow.com/q/1925237/726631 – Saleh 2011-05-17 04:35:41

1

正如前面的海报RegisterPowerSettingNotification提到的是你想要的。为了澄清,你可以从其他类型的.NET应用程序(控制台等)引用的WinForms(System.Windows.Forms.dll中)。你可以(以接收信息)通过继承一个WinForm(窗体类)和覆盖其的WndProc访问窗口句柄。

MSDN刚刚这样做的very good article,与示例代码一起。