#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». Я открыт для использования сторонней библиотеки, если вы знаете ту, которая может решить мою проблему.