《超級解霸》等VCD播放軟件一般都有個按鈕或菜單選項,叫做“播放VCD”,單擊即可自動播放VCD影片。如果文件路徑是固定的, 那只用多媒體控件(mmcontrol)即可實現,但對於不同電腦來說,因為硬盤的邏輯分區數量不同,光盤機的路徑很可能是不同的。它到底是怎樣實現的呢?下面,請看我詳細分析:
用“regedit.exe”查看Windows98的注冊表中光盤機的屬性項(hkey_local_machine, enum, scsi),比較硬盤機的屬性項(hkey_local_Machine, enum, esdi)和軟盤機
的屬性項(hkey_local_Machine, enum, flop),就可發現:不同的盤體,是用“devicetype”這個參數來區別的,硬盤的devicetype是“0”, 軟盤是“0a”,光盤機是“5”。再用“devicetype”為關鍵字,查找有關win32 API的編程手冊,就可得到辨別不同盤體的函數“getdevicetype”了。
有了這個函數,使用以下句子,即可得到光盤機盤符:
If GetDriveType("d:") <> 5 Then
If GetDriveType("e:") <> 5 Then
If GetDriveType("f:") <> 5 Then
If GetDriveType("g:") <> 5 Then
drivecd = "H"
GoTo getcdfiles
End If
drivecd = "G"
GoTo getcdfiles
End If
drivecd = "F"
GoTo getcdfiles
End If
drivecd = "E"
GoTo getcdfiles
Else
drivecd = "D"
End If
getcdfiles:
程序使用窮舉法,依次判斷D、E、F、G盤的devicetype是否為“5”,都不是則光盤機為H(盤符超過H的機器不多,所以窮舉到此為止),得到的“drivecd”就是光盤機盤符。
因為所有VCD影片的路徑都是mpegav,所以用VB函數"Dir()"便可得到完整的播放路徑:
MMControl1.FileName = drivecd & ":Mpegav" & Dir(drivecd & ":Mpegav*.dat")。
以下源程序,具體實現了自動播放VCD。程序窗體中只有一個多媒體控件——MMcontrol1,程序一旦運行即從第一個文件開始自動播放,按多媒體控件上的“next”鍵,播放下一個文件。
'聲明GetDriveType函數
Private Declare Function GetDriveType Lib "kernel32" Alias " GetDriveTypeA" (ByVal nDrive As String) As Long
Dim files() As String
Dim drivecd As String
Dim i As Integer
Dim j As Integer
Private Sub Form_Load()
'判斷光盤機盤符
If GetDriveType("d:") <> 5 Then
If GetDriveType("e:") <> 5 Then
If GetDriveType("f:") <> 5 Then
If GetDriveType("g:") <> 5 Then
drivecd = "H"
GoTo getcdfiles
End If
drivecd = "G"
GoTo getcdfiles
End If
drivecd = "F"
GoTo getcdfiles
End If
drivecd = "E"
GoTo getcdfiles
Else
drivecd = "D"
End If
'將所有VCD文件放入數組files()
getcdfiles:
On Error GoTo cderr:
s = Dir(drivecd & ":Mpegav*.dat")
i = 1
While s <> ""
ReDim Preserve files(i) As String
files(i) = s
i = i + 1
s = Dir()
Wend
j = 1
Call vcdplay
On Error GoTo 0
Exit Sub
cderr:
MsgBox "CD is not ready!"
Unload Me
End Sub
'判斷是否播放下一個文件
Private Sub MMControl1_StatusUpdate()
If MMControl1.Position = MMControl1.Length Then
j = j + 1
If j > i - 1 Then j = 1
Call vcdplay
End If
End Sub
'播放VCD文件
Private Sub vcdplay()
MMControl1.Command = "stop"
MMControl1.Command = "close"
MMControl1.FileName = drivecd & ":Mpegav" & files(j)
MMControl1.Command = "open"
MMControl1.Command = "play"
End Sub