Как обнаружить USB Плеер? - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Подскажите пожалуйста, как обнаружить все устройства подключенные в USB (в частности плеер)? Я искренне думал, что код
 DriveInfo[] AllDrives = DriveInfo.GetDrives();
            foreach (DriveInfo driveinfo in AllDrives)
            {
                    listBox1.Items.Add(driveinfo.Name);
            }
выдаст список всех подключенных устройств (из которых потом можно выбрать нужные), но похоже это не совсем так... Не обнаружаються плеер, телефон, камера и прочая перефирия, подключенная к usb. Как это исправить?

Решение задачи: «Как обнаружить 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();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы