先日作成したVB5.0以前用split() 関数を有効活用したいな〜と思ったら GetLogicalDriveStrings API関数を使えばよいということに気が付いた。というわけで早速有効活用や!!
GetLogicalDriveStrings API関数はドライブ割り当て文字をヌル文字(\0)区切りの文字列で返してくれる。例えば、フロッピードライブ(A)、ハードディスク(C)、CD-ROMドライブ(D) という構成であった場合は、
と、文字列が返る。第1引数で返される文字列の終端は \0 が連続するのだが、関数返り値は終端の \0 を除く文字列数を返すのが特徴。上記の場合だと 12 が返る。これを踏まえていざコ〜ディング!!
'論理ドライブを取得
'ドライブの種類を取得
Private Const DRIVE_UNKNOWN = 0
'--------------------------------------------------------------- ' 関数名:EnumDrives ' 機 能:ドライブを列挙する ' 引 数:なし ' 返り値:なし ' 備 考:必要に応じて改造してください '--------------------------------------------------------------- Public Sub EnumDrives() Dim DriveStringLen As Long Dim TempBuff As String * 256 Dim DriveString As String Dim Drives() As String Dim DriveNum As Long Dim i As Long '論理ドライブの文字列を取得 DriveStringLen = GetLogicalDriveStrings(Len(TempBuff), TempBuff) '最後尾に\0があるので、その前までの文字列を取得 DriveString = Left$(TempBuff, DriveStringLen - 1) 'ドライブを取得 DriveNum = SplitData(DriveString, Chr$(0), Drives) For i = 0 To DriveNum - 1 Debug.Print Drives(i) & ":"; 'ドライブの種類を取得 Select Case GetDriveType(Drives(i)) Case DRIVE_UNKNOWN Debug.Print "種類不明" Case DRIVE_NO_ROOT_DIR Debug.Print "ルートディレクトリが存在しないドライブ" Case DRIVE_REMOVABLE Debug.Print "フロッピードライブかリムーバルディスク" Case DRIVE_FIXED Debug.Print "固定ディスクドライブ" Case DRIVE_REMOTE Debug.Print "ネットワークドライブ" Case DRIVE_RAMDISK Debug.Print "RAMディスクドライブ" Case DRIVE_CDROM Debug.Print "CD-ROMドライブ" End Select Next i End Sub 外付けハードディスクやら、USBメモリーやらをありったけ繋ぎ、上記関数を呼び出してみた。 Private Sub Command1_Click() Call EnumDrives End Sub
[実行結果] |