【问题标题】:Detecting USB power state检测 USB 电源状态
【发布时间】:2011-05-04 14:17:20
【问题描述】:

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

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

【问题讨论】:

    标签: c# windows usb standby


    【解决方案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 消息。

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

    【讨论】:

    • 如何从非 WinForms C# 类中获取这些消息?
    • 已经稍微更新了答案。我实际上并没有这样做,但我假设您可以从任何类订阅 RegisterPowerSettingNotification
    • @LightWing - 这个问题与这个问题无关,除非您指的是发布到答案之一中发布的 LibUSBdotNET 项目链接的链接。这是否具有针对此类事件的内置功能?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多