使用可能ドライブの取得には、GetDriveType関数を使用します。
この関数は、引数にドライブ名を指定します(例えば、"C:\","A:\"のように)。関数が 失敗したとき0が返されます。この関数から得られる情報は、指定されたドライブが どういったドライブ形式であるかです。GetLogicalDrives関数と関わり合いが深いので この関数のプログラムコードに付け加えて利用することにします。(付け加えたものは太字)
(GetDriveType 関数の使用方法)
このサンプルでは、CommandButtonをクリックすることでListBoxに 使用可能なドライブとその種類を表示してします。
フォームのGeneralセクションに次の宣言コードを追加して下さい。
次に、フォームにCommandButtonとListBoxを配置し、次のコードを追加します。
'APIの宣言 '現在利用可能なディスクドライブをビットマスク形式で取得する関数 Private Declare Function GetLogicalDrives Lib "kernel32" () As Long〜追加部分〜 '指定されたドライブの種類を調べる関数 Private Declare Function GetDriveType Lib "kernel32" Alias _ "GetDriveTypeA" (ByVal nDrive As String) As Long 'ドライブタイプの定義 Private Const DRIVE_REMOVABLE = 2&'取り外し可能タイプ−リムーバブルディスク(FD,MO) Private Const DRIVE_FIXED = 3& '固定タイプ−主にハードディスク Private Const DRIVE_REMOTE = 4& 'ネットワーク Private Const DRIVE_CDROM = 5& 'CD-ROMドライブ Private Const DRIVE_RAMDISK = 6& 'RAMドライブ〜追加部分〜
Private Sub Command1_Click() Dim drivestring As String 'ドライブ名 Dim drives As Long 'ディスクドライブのビットマスク Dim i As Integer 'カウンタ Dim DriveType As Long 'ドライブタイプ '現在利用可能なディスクドライブをビットマスク形式で取得 drives = GetLogicalDrives() '関数の失敗 If drives = 0& Then Exit Sub 'A〜Zドライブを検索する For i = 0 To 25 '最初0ビット目(A)を確かめる、1と論理結合させることで '0か1かがわかる。真(1)の時のみドライブ名として列挙する If (drives And 1&) = 1& Then drivestring = Chr(65 + i) 'ドライブ名(A〜Z)に変換 drivestring = drivestring & ":\"〜追加部分〜 'そのドライブがどういうドライブタイプかをチェックする DriveType = GetDriveType(drivestring) Select Case DriveType Case DRIVE_REMOVABLE List1.AddItem (drivestring & " リムーバブルディスク") Case DRIVE_FIXED List1.AddItem (drivestring & " ハードディスク") Case DRIVE_REMOTE List1.AddItem (drivestring & " ネットワーク") Case DRIVE_CDROM List1.AddItem (drivestring & " CD-ROMドライブ") Case DRIVE_RAMDISK List1.AddItem (drivestring & " RAMドライブ") Case Else List1.AddItem (drivestring & " 不明ドライブ") End Select〜追加部分〜 End If '1ビットずつシフトさせていき、検索を続ける drives = drives \ 2& Next i End Sub