Как обнаружить USB Плеер? - C#
Формулировка задачи:
Здравствуйте!
Подскажите пожалуйста, как обнаружить все устройства подключенные в USB (в частности плеер)?
Я искренне думал, что код
выдаст список всех подключенных устройств (из которых потом можно выбрать нужные), но похоже это не совсем так... Не обнаружаються плеер, телефон, камера и прочая перефирия, подключенная к usb. Как это исправить?
DriveInfo[] AllDrives = DriveInfo.GetDrives(); foreach (DriveInfo driveinfo in AllDrives) { listBox1.Items.Add(driveinfo.Name); }
Решение задачи: «Как обнаружить USB Плеер?»
textual
Листинг программы
private const int WM_DEVICECHANGE = 0x0219; private const int DBT_DEVICEREMOVECOMPLETE = 0x8004; private const int DBT_DEVICEARRIVAL = 0x8000; private const uint DBT_DEVTYP_VOLUME = 0x00000002; [StructLayout(LayoutKind.Sequential)] private struct DEV_BROADCAST_HDR { public uint dbch_size; public uint dbch_devicetype; public uint dbch_reserved; } [StructLayout(LayoutKind.Sequential)] private struct DEV_BROADCAST_VOLUME { public uint dbcv_size; public uint dbcv_devicetype; public uint dbcv_reserved; public uint dbcv_unitmask; public ushort dbcv_flags; } protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == WM_DEVICECHANGE) { switch (m.WParam.ToInt32()) { case DBT_DEVICEARRIVAL: 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)); BitArray bArray = new BitArray(new byte[] { (byte)(dbv.dbcv_unitmask & 0x00FF), (byte)((dbv.dbcv_unitmask & 0xFF00) >> 8), (byte)((dbv.dbcv_unitmask & 0xFF0000) >> 16), (byte)((dbv.dbcv_unitmask & 0xFF000000) >> 24) }); int DriveLetter = Char.ConvertToUtf32("A", 0); for (int i = 0; i < bArray.Length; i++) { if (bArray.Get(i)) Connect(Char.ConvertFromUtf32(DriveLetter)); DriveLetter += 1; } } break; case DBT_DEVICEREMOVECOMPLETE: DEV_BROADCAST_HDR dbhREMOVECOMPLETE = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HDR)); if (dbhREMOVECOMPLETE.dbch_devicetype == DBT_DEVTYP_VOLUME) { DEV_BROADCAST_VOLUME dbv = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME)); BitArray bArray = new BitArray(new byte[] { (byte)(dbv.dbcv_unitmask & 0x00FF), (byte)((dbv.dbcv_unitmask & 0xFF00) >> 8), (byte)((dbv.dbcv_unitmask & 0xFF0000) >> 16), (byte)((dbv.dbcv_unitmask & 0xFF000000) >> 24) }); int driveLetter = Char.ConvertToUtf32("A", 0); for (int i = 0; i < bArray.Length; i++) { if (bArray.Get(i)) { this.ShowInTaskbar = false; this.Hide(); } driveLetter += 1; } } break; } } } string DriveName = ""; private void Connect(string Dir) { DriveName = Dir + @":\"; this.Text = "Съёмный диск (" + Dir + @":\)"; this.ShowInTaskbar = true; this.Show(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д