В Windows, как я могу определить, когда USB-устройство переходит в спящий режим из «Выборочной приостановки USB»

#c# #windows #usb #wndproc

Вопрос:

У меня есть приложение C#, подключенное к USB-сканеру штрих-кодов. Все работает нормально, пока Windows не приостановит работу шины USB. Отключение «Выборочной приостановки USB» в настройках питания не является опцией. Мне нужно определить, когда устройство (или шина usb) приостанавливается.

Я могу определить, когда USB-устройство подключено или отключено, переопределив WndProc в экземпляре NativeWindow.

 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.

Кто-нибудь знает m.Msg или m.wParam, которые могут сообщить мне, когда USB-устройство переходит в спящий режим (или просыпается)?

Я знаю, что в nuget есть множество USB-библиотек, и большинство из них могут сообщить вам, когда устройство вставлено/удалено, но я не могу найти ни одной, чтобы обнаружить «Выборочную приостановку USB». Я открыт для использования сторонней библиотеки, если вы знаете ту, которая может решить мою проблему.