Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
12 / 12 / 5
Регистрация: 16.03.2010
Сообщений: 37
1

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

30.07.2011, 16:49. Показов 2270. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Подскажите пожалуйста, как обнаружить все устройства подключенные в USB (в частности плеер)?
Я искренне думал, что код
C#
1
2
3
4
5
 DriveInfo[] AllDrives = DriveInfo.GetDrives();
            foreach (DriveInfo driveinfo in AllDrives)
            {
                    listBox1.Items.Add(driveinfo.Name);
            }
выдаст список всех подключенных устройств (из которых потом можно выбрать нужные), но похоже это не совсем так... Не обнаружаються плеер, телефон, камера и прочая перефирия, подключенная к usb. Как это исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2011, 16:49
Ответы с готовыми решениями:

Обнаружить USB-устройство
В программе нужно только проверить, подключено ли некое USB-устройство. Устройство работает через...

Как в xls файле обнаружить обнаружить ненужные связи?
Есть файл, в нем куча листов, плюс модули VBA... При открытии эксель спрашивает обновить ли ему...

Как подключить DVD плеер BBK к нетбуку через USB ?
Огромная прозьба может и не совсем коректная , МОжно ли подключить DVD к нетбуку через юс шнур ,...

DVD плеер с USB
Буду я менять свой лг, на другой двд. Меня интересует двдишник с юсб входом. Смотреть буду фильмы в...

10
Заблокирован
30.07.2011, 17:00 2
C#
1
2
3
4
5
6
        System.IO.DriveInfo[] DI = System.IO.DriveInfo.GetDrives();
            foreach (System.IO.DriveInfo di in DI)
            {
                if (di.DriveType.ToString() == "Removable")
                    listBox1.Items.Add(di.Name );
            }
0
12 / 12 / 5
Регистрация: 16.03.2010
Сообщений: 37
30.07.2011, 17:06  [ТС] 3
К сожалению, этот способ тоже не помогает...
Не смотря на то, что в проводнике Windows плеер определяется в портативных устройствах, в программе я получаю только пустой листбокс.
А нельзя как-нибудь получить доступ к папке "Устройства и принтеры" и найти его оттуда?
0
Заблокирован
30.07.2011, 17:09 4
Попробуй так.
C#
1
2
3
4
5
6
           DriveInfo[] DI = DriveInfo.GetDrives();
            foreach (DriveInfo di in DI)
            {               
                 if (di.DriveType == DriveType.Removable)
                     MessageBox.Show(" Диск " + di.Name + " - съемный диск");
            }
0
12 / 12 / 5
Регистрация: 16.03.2010
Сообщений: 37
30.07.2011, 17:14  [ТС] 5
Находит следующее:
Диск A:\ - но это похоже флоппи, хотя у меня его нету Попытался его в проводнике забить - написал "Вставьте диск"
Диск I:\ - это кард-ридер, тоже не то.
0
Заблокирован
30.07.2011, 17:47 6
Ну если он в проводнике отображается попробуй поэкспериментировать. Возможно
C#
1
DriveType.Unknown
1
Level 2
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
30.07.2011, 19:00 7
C#
1
2
3
4
5
6
7
8
9
private void ShowDrives()
        {
            DriveInfo[] Mas_Drives = DriveInfo.GetDrives();
            for (int i = 0; i < Mas_Drives.Length; i++)
            {
                if (Mas_Drives[i].DriveType == DriveType.Removable)
                    comboBox1.Items.Add(Mas_Drives[i].ToString());
            }
        }
Не знаю почему у вас не выводит, но вот такой код у меня абсолютно отлично выводит все устройства.
1
12 / 12 / 5
Регистрация: 16.03.2010
Сообщений: 37
30.07.2011, 21:05  [ТС] 8
Хм, странно, но у меня все тот же результат: не существующий A:\ и не нужный I:\...
Ладно, или я - дурак, или плеер у меня неправильный забью пока на это дело.
Всем большое спасибо за помощь!
0
Заблокирован
30.07.2011, 21:48 9
Цитата Сообщение от Dozer74 Посмотреть сообщение
не существующий A:\
У меня тоже определялся, пока я в BIOS'е его не отключил.
0
2 / 2 / 1
Регистрация: 21.04.2009
Сообщений: 42
12.09.2011, 15:34 10
А почему Вам нужно найти именно DriveType.Removable? Плеер может определяться как жесткий диск (внешник, например, при DriveType.Removable не видит).

И чтобы не открывать новую тему, может кто-нибудь знает как написать код, чтобы прога отслеживала подключение новых устройств? (Способ через сравнение массивов старых и новых букв устройств не предлагать - фигня)
0
Level 2
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
13.09.2011, 02:35 11
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
        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();
        }
0
13.09.2011, 02:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2011, 02:35
Помогаю со студенческими работами здесь

atmega16+vs1011+USB=mp3 плеер..
Кто-нибудь пробовал читать данные с флешки через USB атмегой16? Мне нужно сделать mp3 плеер на...

Плеер NRG Cinema 4 GB не видит компьютер при подключении к USB
При подключении к компьютеру плеер заряжается, но компьютер его не видет как накопитель, пишет что...

USB 2.0 определяется как USB 3.0, не работает USB-свисток, геймпад не подключается
Не работает беспроводной геймпад speedlink torid sl-6576. Подключаю блютуз свисток к пк, запускаю...

IP Googlebot как обнаружить?
Здравствуйте, Сегодня в инструментах вебмастера на гугле, проверил карты сайта и увидел - ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru