Не срабатывает обнаружение USB устройства - C#
Формулировка задачи:
Написал программу, которая определяет подключение флешки и далее работает с ней. Основное окно свернуто в трей(при помощи notifyicon). Так вот, все нормально работает , но попадаются некоторые WIN XP на которых программа не работает, не получает сообщение о подключении устройства. Но если из трея ее развернуть, то все работает корректно. В чем может быть проблема?
Определяю подключение юсб устрйоства так :
private const int DBT_DEVICEARRIVAL = 0x8000; protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == WM_DEVICECHANGE) { switch ((int)m.WParam) { case DBT_DEVICEARRIVAL: // Вот сюда на некоторых ОС не заходит.(int)m.WParam всегда равно 7. { DEV_BROADCAST_HDR dbhARRIVAL = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HDR)); if (dbhARRIVAL.dbch_devicetype == DBT_DEVTYP_VOLUME) { DEV_BROADCAST_VOLUME dbv = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME)); MessageBox("Устройство обнаружено"); } break; } } } }
Решение задачи: «Не срабатывает обнаружение USB устройства»
textual
Листинг программы
[DllImport("user32.dll", SetLastError = true)] private static extern IntPtr RegisterDeviceNotification(IntPtr hwnd, DeviceBroadcastInterface oInterface, uint nFlags); private const int DEVTYP_DEVICEINTERFACE = 0x05; private const int DEVICE_NOTIFY_ALL_INTERFACE_CLASSES = 0x4; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)] public class DeviceBroadcastInterface { public int Size; public int DeviceType; public int Reserved; public Guid ClassGuid; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string Name; } public static IntPtr RegisterForUsbEvents(IntPtr hWnd) { var oInterfaceIn = new DeviceBroadcastInterface(); oInterfaceIn.Size = Marshal.SizeOf(oInterfaceIn); oInterfaceIn.ClassGuid = Guid.Empty; oInterfaceIn.DeviceType = DEVTYP_DEVICEINTERFACE; oInterfaceIn.Reserved = 0; return RegisterDeviceNotification(hWnd, oInterfaceIn, DEVICE_NOTIFY_ALL_INTERFACE_CLASSES); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д