|
Da ein CD-Laufwerk schließlich den Multimedia-Geräten zugerechnet wird, ist es kaum verwunderlich, dass eine Funktion zum Ein- und Ausfahren eines CD-Laufwerks im Multimedia-API zu finden ist. Allerdings mutet der Umgang mit der API-Funktion mciExecute ein wenig seltsam an. So muss der auszuführende Befehl im Klartext als String übermittelt werden. Und so will dieser String mit der Angabe des entsprechenden CD-Laufwerks erst einmal zusammengebaut werden. Ein Schwachpunkt der Funktion ist, dass sie keine vernünftige Fehlerbehandlung ermöglicht, falls etwa eine Laufwerksbezeichnung für ein Nicht-CD-Laufwerk angegeben worden ist, oder das Laufwerk aus irgendeinem Grund nicht bereit ist. Es werden lediglich dem Anwender nichtssagende Fehlermeldungen angezeigt, die sich offensichtlich nicht per Code unterdrücken lassen. Eine falsche Laufwerksbezeichnung können Sie immerhin vorab verhindern, indem Sie mittels der API-Funktion GetDriveType prüfen, ob es sich um ein CD-Laufwerk handelt. Mittels dieser Funktion können sie zudem auch ein CD-Laufwerk ermitteln. Näheres dazu finden Sie unter "Der Typ ist gefragt".
Die folgende Funktion OpenCloseCD übernimmt diese Prüfungen und verwendet, falls kein Laufwerk angegeben und im optionalen Parameter FindFirstCDDrive True übergeben worden ist, das erste verfügbare CD-Laufwerk des Systems.
Als Laufwerksbezeichnung können Sie den Laufwerksbuchstaben alleine (Groß- oder Kleinbuchstabe), eine übliche Laufwerksbezeichnung mit Doppelpunkt, oder einen beliebigen Pfad auf der CD angeben. Beachten Sie, dass zur Prüfung des Laufwerksbuchstabens unabhängig von der Groß-/Kleinschreibung der Visual Basic-Operator Like verwendet wird und dazu die Vergleichsmethode des Moduls, in dem sich die Funktion befindet, auf Textvergleich (Option Compare Text) eingestellt wird.
Die weiter unten stehende Hilfsfunktion GetFirstCDDrive zur Ermittlung des ersten vorhandenen CD-Laufwerks können Sie natürlich auch für andere Zwecke verwenden.
Option Compare Text
Private Declare Function GetDriveType Lib "kernel32" _
Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function mciExecute Lib "winmm.dll" _
(ByVal lpstrCommand As String) As Long
Public Function OpenCloseCD(Optional Drive As String, _
Optional ByVal OpenClose As Boolean = True, _
Optional FindFirstCDDrive As Boolean) As Boolean
Dim nDrive As String
Dim nExec As String
Dim nAlias As String
Dim nResult As Long
Const DRIVE_CDROM = 5
If FindFirstCDDrive Then
nDrive = GetFirstCDDrive()
Else
nDrive = Trim$(Drive)
If Len(nDrive) Then
nDrive = Left$(nDrive, 1)
If nDrive Like "[a-z]" Then
If GetDriveType(nDrive & ":\") <> DRIVE_CDROM Then
Exit Function
End If
End If
End If
End If
If Len(nDrive) Then
nAlias = "CDDrive" & nDrive
nExec = "Open " & nDrive & ": Type CDAudio Alias " & nAlias
nResult = mciExecute(nExec)
If nResult Then
If OpenClose Then
nExec = "Set " & nAlias & " Door Open"
Else
nExec = "Set " & nAlias & " Door Closed"
End If
nResult = mciExecute(nExec)
If nResult Then
nExec = "Close " & nAlias
nResult = mciExecute(nExec)
OpenCloseCD = True
End If
End If
End If
End Function
Public Function GetFirstCDDrive() As String
Dim i As Integer
Dim nCDDrive As String
Const DRIVE_CDROM = 5
For i = 65 To 90
nCDDrive = Chr$(i) & ":\"
If GetDriveType(nCDDrive) = DRIVE_CDROM Then
GetFirstCDDrive = nCDDrive
Exit For
End If
Next 'i
End Function
|