Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
64 / 20 / 1
Регистрация: 29.07.2012
Сообщений: 151

Обнаружить все жесткие диски на компе

31.08.2012, 12:55. Показов 3154. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
день добрый нужно узнать какие жесткие диски есть на компе. Один из них (на которой винда стоит)
я узнаю так:
Visual Basic
1
Environ("SystemDrive")
но мне и другие нужны. Спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.08.2012, 12:55
Ответы с готовыми решениями:

Биос видит не все жесткие диски
Добрый день! Имеется серверный компьютер с платой SuperMicro x10dri и бакплейном SAS833TQ. Пытаюсь организовать RAID массив из...

Жесткие диски диски для студии звукозаписи
Здравствуйте, граждане, коллеги и уважаемые специалисты затрудняюсь с выбором надежного и скоростного жесткого диска, а точнее дисков...

При установке windows не видит жесткие диски (в некоторых подобных случаях может писать что диски отключены)
Здравствуйте! Столкнулся с проблемой. при переустановке windows компьютер не видит жесткие диски. Раньше тоже с подным сталкивался, но...

9
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
31.08.2012, 13:09
Лучший ответ Сообщение было отмечено как решение

Решение

filesystemobject - drives - проверить drivetype:

DriveType
Возвращаемое значение: число - определяет тип ресурса. Возможные значения:
0 - неизвестное устройство.
1 - устройство со сменным носителем.
2 - жёсткий диск.
3 - сетевой диск.
4 - CD-ROM.
5 - RAM-диск.
4
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
31.08.2012, 13:14
Лучший ответ Сообщение было отмечено как решение

Решение

Visual Basic
1
2
3
4
5
Dim fso, drv
Set fso = CreateObject("Scripting.FileSystemObject")
For Each drv In fso.Drives
  If drv.DriveType = 2 Then Debug.Print drv.DriveLetter
Next drv
Опоздал
5
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,699
Записей в блоге: 14
04.09.2012, 21:10
Лучший ответ Сообщение было отмечено как решение

Решение

Вот еще способ (без FSO):

Visual Basic
1
2
3
4
5
6
7
8
Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Sub Drv_List()
    DrvList$ = "ABCDEFGHIJKLMNOPQRTSUVWXYZ"
    For i% = 1 To 26
        Root$ = Mid$(DrvList$, i%, 1) + ":\"
        If GetDriveType(Root$) = 3 Then Debug.Print Root$; " - æåñòêèé äèñê"
    Next i%
End Sub
PS

Если вместо тройки (стр. 7) подставить 2 - будут показаны сменные диски (дискеты, флэшки);
если подставить 4 - то сетевые диски, если 5 - компакт-диски, а 6 - электронные диски...
3
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
04.09.2012, 21:44
Лучший ответ Сообщение было отмечено как решение

Решение

Visual Basic
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
'Используется WMI
'Option Explicit
Dim fso, wmio, nwo, strInform As String
Private Sub Command1_Click()
    strInform = ""
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set nwo = CreateObject("WScript.Network")
    If Len(LCase(nwo.ComputerName)) > 0 Then InformationAboutVideo (LCase(nwo.ComputerName))
    MsgBox strInform, vbInformation, "Диски"  'Print strInform' переменная содержит информацию о дисках
End Sub
Sub InformationAboutVideo(CompName)
    Set wmio = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\" & CompName & "\Root\CIMV2")
    Log "Win32_DiskDrive", _
        "Model,Size,InterfaceType", "InterfaceType <> 'USB'", _
        "Диск", _
        "Наименование,Размер (Гб),Интерфейс"
    'только локальные диски
    'пропускаются USB-диски, размер которых обычно NULL
    Log "Win32_LogicalDisk", _
        "Name,FileSystem,Size,FreeSpace,VolumeSerialNumber", "DriveType = 3 AND Size IS NOT NULL", _
        "Логический диск", _
        "Наименование,Файловая система,Размер (Гб),Свободно (Гб),Серийный номер"
    Log "Win32_CDROMDrive", _
        "Name", "", _
        "CD-привод", _
        "Наименование"
End Sub
 
'составить WQL-запрос, выполнить и записать в переменную
'входные параметры:
'from - класс WMI
'sel - свойства WMI, через запятую
'where - условие отбора или пустая строка
'sect - соответствующая секция отчета
'param - соответствующие параметры внутри секции отчета, через запятую
'для отображения в кратных единицах, нужно их указать в скобках
Sub Log(from, sel, where, sect, param)
    Dim i As Integer, query, clss, item, prop
    Const RETURN_IMMEDIATELY = 16, FORWARD_ONLY = 32
    query = "Select " & sel & " From " & from
    If Len(where) > 0 Then query = query & " Where " & where
    Set clss = wmio.ExecQuery(query, , RETURN_IMMEDIATELY + FORWARD_ONLY)
    Dim props, names, value
    props = Split(sel, ",")
    names = Split(param, ",")
     For Each item In clss
        For i = 0 To UBound(props)
            Set prop = item.Properties_(props(i))
             value = prop.value
            'без проверки на Null возможнен вылет с ошибкой
            If IsNull(value) Then
               value = ""
               ElseIf IsArray(value) Then
                      value = Join(value, ",")
               ElseIf Right(names(i), 4) = "(Мб)" Then
                      value = CStr(Round(value / 1024 ^ 2))
               ElseIf Right(names(i), 4) = "(Гб)" Then
                      value = CStr(Round(value / 1024 ^ 3))
               ElseIf prop.CIMType = 101 Then
                      value = ReadableDate(value)
             End If
             value = Trim(Replace(value, ";", "_"))
             If Len(value) > 0 Then
                    strInform = strInform & vbCrLf & names(i) & "  -        " & value
             End If
        Next
    Next
End Sub
Function ReadableDate(str)
    ReadableDate = Mid(str, 7, 2) & "." & Mid(str, 5, 2) & "." & Left(str, 4)
End Function
Миниатюры
Обнаружить все жесткие диски на компе  
4
04.09.2012, 23:01

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
Вот еще способ
Visual Basic
1
2
3
'без текстовой константы
    For i% = Asc("A") To Asc("Z")
        Root$ = Chr(i) + ":\"

2
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
04.09.2012, 23:29
Ухх, API есть, WMI и FSO есть, CMD лень (уже писал)... и добавить нечего.

Ну тогда способом "сапогом в закрытые двери":
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function DrivesAccess$()
Dim DiskName&
On Error Resume Next
 
For DiskName = Asc("A") To Asc("Z")
 
    If Len(Dir$(Chr$(DiskName) & ":", vbDirectory)) = 0 Then
        Rem 'эта ветвь выполняется всегда при ошибке
    Else
        DrivesAccess = DrivesAccess + Chr$(DiskName) + ","
    End If
Next
DrivesAccess = Left$(DrivesAccess, Len(DrivesAccess) - 1)
End Function
Главный недостаток - этот код не покажет диски, которіе по счету в системе > 26
P.S. гы. И я написал, как Казанский
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
05.09.2012, 09:31
Неа, главный недостаток - этот код перечисляет все доступные диски, а не только жесткие
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,699
Записей в блоге: 14
05.09.2012, 10:17
Цитата Сообщение от Казанский Посмотреть сообщение
'без текстовой константы For i% = Asc("A") To Asc("Z") Root$ = Chr(i) + ":\"
- зато с двумя... "A" и "Z". А кроме того, chr(i) возвращает Variant (который потом преобразуется в String), так что этот вариант будет работать на чайную ложку дольше моего...

Писать следовало бы так:

Visual Basic
1
2
For i% = Asc("A") To Asc("Z")
        Root$ = Chr$(i%) + ":\"
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
05.09.2012, 12:58
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Catstail Посмотреть сообщение
этот вариант будет работать на чайную ложку дольше моего...
Да, чуть дольше.
код VBA
Visual Basic
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
'Option Explicit
 
Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Dst As Any, Src As Any, ByVal Length As Long)
 
Dim Root$, ptrRoot&
 
Sub Drv_List()
    DrvList$ = "ABCDEFGHIJKLMNOPQRTSUVWXYZ"
    For i% = 1 To 26
        Root$ = Mid$(DrvList$, i%, 1) + ":\"
'        If GetDriveType(Root$) = 3 Then Debug.Print Root$
    Next i%
End Sub
 
Sub Drv_List1()
    For i% = Asc("A") To Asc("Z")
        Root$ = Chr(i) + ":\"
'        If GetDriveType(Root$) = 3 Then Debug.Print Root$
    Next i%
End Sub
 
Sub Drv_List2()
Dim i&
    For i = Asc("A") To Asc("Z")
        Mid(Root, 1) = Chr$(i)
'        If GetDriveType(Root) = 3 Then Debug.Print Root$
    Next
End Sub
 
Sub Drv_List3()
Dim i&
    For i = Asc("A") To Asc("Z")
        CopyMemory ByVal ptrRoot, i, 2&
'        If GetDriveType(Root) = 3 Then Debug.Print Root$
    Next
End Sub
 
Sub test()
Dim i&, t!, N&, j&
N = 100000
For j = 0 To 1
    Debug.Print IIf(j, "зачетный", "прогревочный") & " забег"
    DoEvents
    t = Timer
    For i = 1 To N
        Drv_List
    Next
    Debug.Print Timer - t
    DoEvents
    t = Timer
    For i = 1 To N
        Drv_List1
    Next
    Debug.Print Timer - t
    DoEvents
    t = Timer
    Root = " :\"
    For i = 1 To N
        Drv_List2
    Next
    Debug.Print Timer - t
    DoEvents
    t = Timer
    Root = " :\"
    ptrRoot = StrPtr(Root)
    For i = 1 To N
        Drv_List3
    Next
    Debug.Print Timer - t
Next
End Sub
Мои результаты:
Code
1
2
3
4
5
зачетный забег
 0,96875 
 0,984375 
 0,4375 
 0,171875
Время формирования строки радикально сокращается, если строка остается на месте.
Ну и CopyMemory, как водится, вне конкуренции
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2012, 12:58
Помогаю со студенческими работами здесь

F.A.Q. Жёсткие диски
1. Q: Как установить новый жёсткий диск? A: Сложность процедуры установки зависит от типа интерфейса, и сводится главным образом к...

Жесткие диски в разных ОС
Приветствую. Суть вопроса такая. Имеется 4 жестких диска. И 2 установленные ОС (windows 7 и windows 8.1) как сделать чтобы в windows 7 было...

Мобильные Жёсткие диски
Приветствую! У меня возникла нужда в резервировании данных с ПК, обычной флэшки маловато, поэтому смотрю в сторону Мобильных Жёстких...

Жесткие диски по юзеру
Господа админы! Есть вот такая задачка, у компа два пользователя, установлены два жестких диска, как разделить эти жесткие диски по...

Пропали жесткие диски
Здраствуйте, у меня случилась небольшая проблема на компьютере установлены Ubuntu 10.4 и винда 7, я загрузился на винду и работал там в...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru