| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Правильно получить информацию о дисках |
| Автор: Router 29.3.2009, 12:47 | ||||
| Нужно получить список дисков и их метки, так как они показаны в проводнике. Получить доступные диски не проблема.
а вот метку у меня не получается получить. Использую функцию GetVolumeInformation.
Получается следующее: Если метка тома задана то все нормально, я ее получаю. Но если ее нет - то я получаю, пустую строку. А мне надо получить метки, так как они отображении в проводнике, как мне быть? http://ipicture.ru/ |
| Автор: Rrader 29.3.2009, 13:47 | ||
|
| Автор: Router 29.3.2009, 14:49 |
| А можно пояснить, что здесь происходит! |
| Автор: Rrader 29.3.2009, 15:44 |
| Работа с моим компьютером средствами оболочки |
| Автор: Alix 31.3.2009, 16:37 |
| Если explorer.exe не запущен, все будет нормально? Добавлено через 7 минут и 7 секунд Вначале возникла идея воспользоваться National Language Support API, но сходу функция типа GetText(localeid, stringid) найдена не была. Да и скорее всего этот текст - в ресурсах explorer'a. Кстати, тоже вариант, даже если само приложение не запущено. Добавлено через 8 минут и 51 секунду Под текстом имею в виду строку "Локальный диск" и т.п. |
| Автор: Rrader 31.3.2009, 17:07 |
Да |
| Автор: bems 31.3.2009, 18:42 | ||||
| Rrader, я в подобной задаче вместо вызова Malloc.Free делал CoTaskMemFree. Про SHGetMalloc сказано
Еще для этой цели можно использовать ILFree, хотя и вместо нее говорят надо CoTaskMemFree
Короче что-то многовато тут способов. Почему ты делаешь именно так? |
| Автор: bems 31.3.2009, 19:22 |
| Кстати с SHGetFileInfo с флажком SHGFI_DISPLAYNAME это будет короче |
| Автор: Rrader 1.4.2009, 13:05 |
Описание этих функций в разных редакциях MSDN было разным и двусмысленным. Сейчас, соглашусь, надо вносить исправления в коды. SHGetMalloc менять на CoGetMalloc. CoTaskMemXXX функции аналогичны методам интерфейса IMalloc, который для меня более удобен по возможностям, поэтому использую его. Это реализовано через IShellFolder. Когда у нас на руках уже есть (как в этом примере) этот интерфейс, лучше использовать именно его |
| Автор: Rrader 2.4.2009, 08:48 | ||
Можно! В связи с тем, что интерфейс является сложным автообъектом и тесно связан с COM, я всегда и везде самостоятельно дереференсирую ссылки. Для локального кода это забота Delphi, но ссылки могут быть и глобальными, на что новички и попадаются.
Не совсем понял. Я использую IShellFolder в примере и только его, все однообразно. |
| Автор: bems 2.4.2009, 17:47 | ||
ну ты выше говорил "Когда у нас на руках уже есть (как в этом примере) этот интерфейс, лучше использовать именно его " А я в примере вижу, что "уже есть" на практике означает "я его получаю только чтобы добраться до имени". Я понимаю была бы "сопутствующая" задача, для которой нужен этот интерфейс, тогда можно заодгл им же воспользоваться и для получения имён. А тут только ради имен все это. Да я в общем не против этого примера, я просто дусал вдруго есть какие-то высшие причины. По ходу похоже что ты просто так привык когда-то, и пишеш на автомате. Ну оно работает и ладно. |
| Автор: Rrader 2.4.2009, 18:05 |
Я его получаю только исходя из удобства перечисления объектов. И мне нравится функционал IShellFolder(2), тем более, когда все рядом |