Zjištění typů všech disků v systému

Postup:
Založte nový projekt, v něm modul a formulář. Do formuláře připojte tlačítko.

Do modulu zapište následující deklarace a procedury:
Public Const DRIVE_REMOVABLE = 2
Public Const DRIVE_FIXED = 3
Public Const DRIVE_REMOTE = 4
Public Const DRIVE_CDROM = 5
Public Const DRIVE_RAMDISK = 6

Public Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

*každá deklarace musí být celá na samostatné řádce

Public Function VBGetLogicalDriveStrings() As String


    'Vrací řetězec písmen přístupných disků
    'oddělených znakem chr$(0)
    Dim r As Long
    Dim i As Integer
    Dim tmp As String
    tmp$ = Space$(64)
    r& = GetLogicalDriveStrings(Len(tmp$), tmp$)
    VBGetLogicalDriveStrings = Trim$(tmp$)


End Function

Public Function StripNulls(startStrg$) As String

    'Vezme řetězec oddělovaný znakem chr$(0), vybere 1 položku,
    'zkrátí o ni vstupní řetězec a položku vrátí

    Dim c As Integer
    Dim item As String
    c% = 1
    Do
    If Mid$(startStrg$, c%, 1) = Chr$(0) Then
        item$ = Mid$(startStrg$, 1, c% - 1)
        startStrg$ = Mid$(startStrg$, c% + 1, Len(startStrg$))
        StripNulls$ = item$
        Exit Function
    End If
    c% = c% + 1
    Loop

End Function

Public Function rgbGetDriveType(RootPathName$) As String

    'Zpracovává jméno disku.
    'Vrací typ disku.
    Dim r As Long
    r& = GetDriveType(RootPathName$)
    Select Case r&
        Case 0: rgbGetDriveType$ = "Typ disku nemohl být zjištěn."
        Case 1: rgbGetDriveType$ = "Hlavní adresář nevytvořen."
        Case DRIVE_REMOVABLE

            Select Case Left$(RootPathName$, 1)
                Case "a", "b": rgbGetDriveType$ = "Disketa."
                Case Else: rgbGetDriveType$ = "Výměnný disk."
            End Select
        Case DRIVE_FIXED: rgbGetDriveType$ = "Pevný disk."
        Case DRIVE_REMOTE: rgbGetDriveType$ = "Připojený (síťový) disk."
        Case DRIVE_CDROM: rgbGetDriveType$ = "CD-ROM disk."
        Case DRIVE_RAMDISK: rgbGetDriveType$ = "RAM disk."
    End Select


End Function

Na událost Click tlačítka Command1 vložte tento kód:
Private Sub Command1_Click

    Dim r As Long
    Dim allDrives As String
    Dim currDrive As String
    Dim drvType As String

    'Seznam přístupných disků
    allDrives$ = VBGetLogicalDriveStrings()
    'Separování jména disku a zjištění jeho typu
    Do Until allDrives$ = Chr$(0)
       'Vyjmutí názvu disku z řetězce allDrives$
        currDrive$ = StripNulls$(allDrives$)
       'zjištění typu disku
        drvType$ = rgbGetDriveType(currDrive$)
        Debug.Print " " & UCase(currDrive$) & " - " & drvType$
    Loop

End Sub

Nyní spusťte aplikaci. Do okna Debug se Vám vypíše seznam přístupných disků a jejich typ.

Zpět

Autor: The Bozena