首页 > 解决方案 > 在 Windows 上,如何通过“USB 选择性挂起”判断 USB 设备何时进入睡眠状态

问题描述

我有一个连接到 USB 条形码扫描仪的 C# 应用程序。一切正常,直到 Windows 暂停 USB 总线。不能在电源设置中关闭“USB 选择性暂停”。我需要检测设备(或 USB 总线)何时暂停。

我可以通过在 NativeWindow 实例中覆盖 WndProc 来检测 USB 设备何时连接或断开。

protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case WM_DEVICECHANGE:    // (0x0219)

                Console.WriteLine("Device presence Changed");
                
                switch (m.WParam.ToInt32()) 
                {
                    case Win32Usb.DEVICE_ARRIVAL:   // inserted (0x8000)
                        Console.WriteLine("Device Inserted");
                        break;
                    case Win32Usb.DEVICE_REMOVECOMPLETE:    // removed (0x8004)
                        Console.WriteLine("Device Removed");
                        break;
                }                    
                break;                
        }

        base.WndProc(ref m);
    }

但它不会告诉我 USB 设备何时被 Windows 挂起。

任何人都知道可以告诉我 USB 设备何时进入睡眠(或唤醒)的 m.Msg 或 m.WParam?

我知道 nuget 上有很多 USB 库,其中大多数可以告诉您何时插入/移除设备,但我找不到任何检测“USB 选择性挂起”的库。如果您知道可以解决我的问题的第三方库,我愿意使用 3rd 方库。

标签: c#windowsusbwndproc

解决方案


推荐阅读