| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Узнать имя и букву флешки флешки |
| Автор: BEST13 7.10.2008, 21:30 |
| Я пишу меню для флешки. И мне нужно отображать название и букву которую дала винда флешке. Я искал в поиске, ничего не нашол. Подскажыте как это можно узнать? И еще вопрос, чтоб узнать объём памяти флешки и объём свободного места можно пользоваться алгоритмом для дисков? |
| Автор: ne0n 7.10.2008, 22:09 | ||
BEST13, наверно преблизительно вот так:
з.ы. Почему синтаксис не подсвечиваеться? |
| Автор: BEST13 7.10.2008, 22:58 |
| пасиб... а как вывести букву в лейблу. Если делаю так Label.Caption:= Drive; выписывает ошибки: "For loop control variable must be simple local variable", "TO' expected but ';' found". |
| Автор: ne0n 7.10.2008, 23:12 | ||
забыл сказть что надо исключить из поиска диск A, он тоже сьемным считаеться. вообщем вот код, который только что у себя протестил:
|
| Автор: ne0n 8.10.2008, 00:39 | ||
ну дык просили лайбел - сделал лэйбел, у меня изначально все заносилось в СтрингЛист, поэтому троеточие то и поставил в первом варианте кода, предложил ТС додумать самому, что ему надо |
| Автор: Riply 8.10.2008, 01:17 | ||
Тогда ожидай следующего вопроса (кстати, вполне закономерного) : как из 38-и подключенных флешек, выбрать нужную ? |
| Автор: ne0n 8.10.2008, 11:11 |
что значит нужную?!) если они подключены - значит они все нужны |
| Автор: BEST13 8.10.2008, 15:37 |
| большое спс... + ищё вопрос а имя как узнать? |
| Автор: Riply 8.10.2008, 16:20 |
Это не совсем так. Не все, что блестит... ой тьфу ! Не все, что "DRIVE_REMOVABLE" - флешка Например, Zip-disk. P.S. Очень вероятно, что истинно обратное утверждение: если флешка, то DRIVE_REMOVABLE. Но лично я и под ним бы не стала подписываться |
| Автор: BEST13 8.10.2008, 18:26 |
| А насчот имени никто не знает? |
| Автор: Riply 8.10.2008, 18:48 |
Если ты пояснишь что понимается под термином "имя флешки", то тебе, наверное, помогут. Лично я не смогла догадаться |
| Автор: mr.Anderson 8.10.2008, 18:55 |
| Riply, а что пояснять? |
| Автор: BEST13 8.10.2008, 19:27 | ||
Совершено, верно. Я это и имел ввиду |
| Автор: MIX55 8.10.2008, 19:35 | ||||
параметр DriveName должен быть вида 'F:\'. где F буква твоей флешки Добавлено через 10 минут и 50 секунд
Riply как ж тогда решить данную проблему (используя DeviceIoControl)? Ты же спец. в данной области. |
| Автор: Riply 8.10.2008, 19:55 | ||||
Век живи - век учись Не знала (ибо никогда не пробовала), что можно простым Rename`ом поменять "имя флешки" Впрочем, также не знала, что это не что иное, как "имя флешки " Добавлено @ 20:06
Для этого требуется небольшой тайм-аут (надо поднять исходники). OK ? P.S. Я, конечно, пакда на комплименты ( спасибо |
| Автор: BEST13 8.10.2008, 20:25 | ||||
спасиб, попробую MIX55. Интересно узнать решение проблемы Riply, зарание спс. |
| Автор: Riply 9.10.2008, 10:31 | ||
С нахрапа, мне не удалось решить данную задачу. Серьезно же к ней подойти мешают два момента: отсутствие времени и устройств(а также систем) для тестирования. Даже, если упростить условия до описанных ниже, все равно будут сложности. Камеры и плееры пусть будут тоже флешками, но USB HDD надо отфильтровать. Т.е. что-то типа такого: function FlushTest(const pDevice: PVOID) begin if ( any CD or DVD or Blu-Ray drive ) {including U3 emulated CDs} then Result := False; if ( USB or firewire ) then begin if ( flash drive or player or camera or card reader ) then Result := True; if ( hard disk or legacy floppy ) then Result := False; end; if ( IDE hard disk or SCSI hard disk or SATA hard disk or legacy floppy or zip drive ) then Result := False; if ( subst drive or RAM drive or any other "fake" drive ) then Result := False; end; CD\DVD и RAMDrive легко отличить по GetDriveType. Дальше - хуже. Есть(?) некоторая закономерность - для флешки путь имеет вид device\harddisk%d\... , а не device\harddiskvoulme%d. Но мой знакомый утверждает, что в Висте в этом плане флешки не отличимы от жестких дисков. Возможно, Bиста поддерживает и более одного раздела на флешках. (Сама проверить не могу из-за отсутствия Висты) Можно попробоать танцевать от USB не-USB. Вот, некоторая информация, если кто захочет продолжить поиски IOCTL_STORAGE_GET_HOTPLUG_INFO - флаг DeviceHotplug скорее всего будет означать USB. Начиная с ХР. SetupDiGetClassDevs с 'USBSTOR' - вроде. то что надо. Начиная с 98. SetupDiGetClassDevs + SetupDiGetDeviceRegistryProperty с SPDRP_REMOVAL_POLICY -на этот способ намекали в описании GetDriveType. |