《超級解霸》等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”為關鍵字,查找有關win32API的編程手冊,就可得到辨別不同盤體的函數“getdevicetype”了。
有了這個函數,使用以下句子,即可得到光盤機盤符:
IfGetDriveType("d:")<>5Then
IfGetDriveType("e:")<>5Then
IfGetDriveType("f:")<>5Then
IfGetDriveType("g:")<>5Then
drivecd="H"
GoTogetcdfiles
EndIf
drivecd="G"
GoTogetcdfiles
EndIf
drivecd="F"
GoTogetcdfiles
EndIf
drivecd="E"
GoTogetcdfiles
Else
drivecd="D"
EndIf
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函數
PrivateDeclareFunctionGetDriveTypeLib"kernel32"Alias"GetDriveTypeA"(ByValnDriveAsString)AsLong
Dimfiles()AsString
DimdrivecdAsString
DimiAsInteger
DimjAsInteger
PrivateSubForm_Load()
'判斷光盤機盤符
IfGetDriveType("d:")<>5Then
IfGetDriveType("e:")<>5Then
IfGetDriveType("f:")<>5Then
IfGetDriveType("g:")<>5Then
drivecd="H"
GoTogetcdfiles
EndIf
drivecd="G"
GoTogetcdfiles
EndIf
drivecd="F"
GoTogetcdfiles
EndIf
drivecd="E"
GoTogetcdfiles
Else
drivecd="D"
EndIf
'將所有VCD文件放入數組files()
getcdfiles:
OnErrorGoTocderr:
s=Dir(drivecd&":Mpegav*.dat")
i=1
Whiles<>""
ReDimPreservefiles(i)AsString
files(i)=s
i=i 1
s=Dir()
Wend
j=1
Callvcdplay
OnErrorGoTo0
ExitSub
cderr:
MsgBox"CDisnotready!"
UnloadMe
EndSub
'判斷是否播放下一個文件
PrivateSubMMControl1_StatusUpdate()
IfMMControl1.Position=MMControl1.LengthThen
j=j 1
Ifj>i-1Thenj=1
Callvcdplay
EndIf
EndSub
'播放VCD文件
PrivateSubvcdplay()
MMControl1.Command="stop"
MMControl1.Command="close"
MMControl1.FileName=drivecd&":Mpegav"&files(j)
MMControl1.Command="open"
MMControl1.Command="play"
EndSub
以上程序在中文Windows98,VisualBasic6.0上通過。->