检测USB电源状态

本文关键字:状态 电源 USB 检测 | 更新日期: 2023-09-27 17:54:33

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

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

检测USB电源状态

听起来你想要

  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消息将被你的应用程序接收。

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

正如之前的海报所提到的,RegisterPowerSettingNotification是你想要的。澄清一下,你可以从其他类型的。net应用程序(控制台等)中引用Winforms (System.Windows.Forms.dll)。你可以通过继承一个Winform(窗体类)并覆盖它的WndProc来访问一个窗口句柄(为了接收消息)。

MSDN有一篇很好的文章来做这件事,以及示例代码。