如何列舉目前電腦中所有的邏輯磁碟機 ?

如何列舉目前電腦中所有的邏輯磁碟機 ?

如何取得電腦所有邏輯磁碟機 (代號

方法1: 

' API
宣告 , 取得一個字串,內含了目前所有邏輯磁碟機的路徑 
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" _ 
        (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long 
' Fills a buffer with strings that specify valid drives in the system. 

    Dim strDrvLst As String 
    Dim varAry As Variant 
    Dim varElement As Variant 

    '
準備一字串內容為 Chr(0) 長度為 78 的字串 , 供後續呼叫 API 使用 
    strDrvLst = String(78, Chr(0)) 
    ' PS :
一般字串長度會設為 255 , 但因磁碟機是用英文字母為磁碟代號 , So 最多有 26 個邏輯磁碟機 
    '  
因此每個磁碟機只需準備 3 個字元空間來存放 (   C:\ ) , 所以共 78 個字元長度即可 

    '
呼叫 GetLogicalDriveStrings API 並傳入長度及緩衝區(接收) 參數 
    GetLogicalDriveStrings 78, strDrvLst 

    ' Split
函數 : 傳回一個陳列索引從零開始的一維陣列。 
    varAry = Split(strDrvLst, Chr(0)) ' 將字串用 Chr(0) 字元分隔 , 放置 varAry 一維陣列裡 

    For Each varElement In varAry ' For Each / Next
迴圈 , 列舉邏輯磁碟

        If Len(varElement) > 0 Then Print varElement '
將邏輯磁碟機印在表單上 

    Next ' Loop
一維陣列內所有子元素 

================================================================


 

方法2: 

' API
宣告 , 取得某 (一個) 磁碟機類型 
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" _ 
        (ByVal nDrive As String) As Long 

    Dim bytLoop As Byte 
    Dim strDrv As String 

    For bytLoop = 0 To 25 ' For / Loop
迴圈 , 列舉邏輯磁碟 ( 最多有 26 個邏輯磁碟機 )

        ' Chr(65)
A , 由磁碟機 A Loop 磁碟機
        strDrv = Chr(bytLoop + 65) & ":\" 

 

        ' 如磁碟機不能識別,則傳回零。如指定的目錄不存在,則傳回
        If GetDriveType(strDrv) > 1 Then Print strDrv ' 將邏輯磁碟機印在表單上 

    Next 


================================================================

 

 

方法3:

    Dim objFS As Object 
    Dim objDrv As Object 

    Set objFS = CreateObject("Scripting.FileSystemObject") '
建立檔案系統物件 

    ' FSO.Drives
屬性 : 傳回包含本機上所有可用 Drive 物件的 Drives 集合物件。 
    For Each objDrv In objFS.Drives  ' For Each / Next 迴圈 , 列舉邏輯磁碟

          ' FSO.DriveLetter
屬性 : 傳回某個物理本機磁碟機或網路共用的磁碟機代碼。(唯讀屬性
          Print objDrv.DriveLetter & ":\" ' 將邏輯磁碟機印在表單上 

    Next 


================================================================

 

 

方法4: 

' API
宣告 , 取得系統中目前有哪些邏輯磁碟機(字母
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long 
' The return value is a bit mask representing the currently available disk drives 
' Bit position 0 (the least-significant bit) is drive A 
' Bit position 1 is drive B, bit position 2 is drive C, and so on. 

    Dim lngLDs As Long 
    Dim bytLoop As Byte 

    lngLDs = GetLogicalDrives '
呼叫 GetLogicalDrives API 

    '
回傳 Long , 該結構以二進制 標示存在哪些磁碟機 
    '
0 1 表示磁碟機 A: 存在於系統中;位 1 1 表示存在 B: 磁碟機存在於系統中;依此類推 
    For bytLoop = 0 To 25 ' For / Loop 迴圈 , 列舉邏輯磁碟 ( 最多有 26 個邏輯磁碟機 )

        ' ^
運算子 , 用來使一個數字提升成為指數的次方數。 
        If (lngLDs And 2 ^ bytLoop) <> 0 Then Print Chr(65 + bytLoop) & ":\" ' 將邏輯磁碟機印在表單上

    Next