Не срабатывает обнаружение 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);
}