ディスクドライブにメディアが挿入されているか判定          <TOP>


GetLogicalDrives 利用可能ディスクドライブ取得 
 
Visual Basic では、IsReady などで、簡単に取得できるのですが・・・
例では、エラーが発生した場合、メディアが準備されていないと判断しています。
  

'================================================================
'= ディスクドライブにメディアが挿入されているか判定
'=    (MediaInDrive.bas)
'================================================================
#include "Windows.bi"
#include "File.bi"

' 利用可能ディスクドライブ取得
Declare Function Api_GetLogicalDrives& Lib "kernel32" Alias "GetLogicalDrives" ()

Var Shared Combo1 As Object
Var Shared Button1 As Object

Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared Drv As String

'================================================================
'=
'================================================================
Declare Function MediaCheck(DriveLetter As String) As Integer
Function MediaCheck(DriveLetter As String) As Integer
    Var Target As String
    Var Ret As String

    On Error GoTo *Er_Trap

    '「:」が無い場合の処理
    Target = Left$(DriveLetter, 1)
    Target = Target & ":"

    Ret = CrDir$(Target)

    MediaCheck = True

*Er_Return
    On Error GoTo 0
    Exit Function

*Er_Trap
    MediaCheck = False
    Resume *Er_Return
End Function

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var Ret As Long

    Ret = Api_GetLogicalDrives()        '利用可能なディスクドライブ取得
    If Ret = 0 Then Exit Sub            '関数の失敗

    For i = 0 To 25                     'A〜Zドライブを検索する
        If (Ret And 1) = 1 Then
            Drv = Chr$(65 + i)          'ドライブ名(A〜Z)に変換
            Drv = Drv & ":\"
            Combo1.AddString Drv
        End If
        Ret = Ret \ 2                   'ドライブ検索
    Next i
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Drv = Combo1.GetWindowText

    If MediaCheck(Drv) = False Then
        A% = MessageBox("", "メディアを挿入してください", 0, 2)
    Else
        A% = MessageBox("", "アクセス可能です。", 0, 2)
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End