《超級解霸》等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上通過。 ->