分享
 
 
 

MCI播放器在VB中实现

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

'用MCI命令来实现多媒体的播放功能

'下面的内容几乎有播放器软件的各种功能,你只是引用这些函数就能做出一个播放器来

'

Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Public Declare Function mciGetDeviceID Lib "winmm.dll" Alias "mciGetDeviceIDA" (ByVal lpstrName As String) As Long

Public Declare Function waveOutGetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Enum PlayTypeName

File = 1

CDAudio = 2

VCD = 3

RealPlay = 4

End Enum

Dim PlayType As PlayTypeName

Enum AudioSource

AudioStereo = 0 ' "stereo"

AudioLeft = 1 '"left"

AudioRight = 2 '"right"

End Enum

Dim hWndMusic As Long

Dim prevWndproc As Long

'=======================================================

'打开MCI设备,urlStr为网址,传值代表成功与否

'=======================================================

Public Function OpenURL(urlStr As String, Optional hwnd As Long) As Boolean

OpenMusic = False

Dim MciCommand As String

Dim DriverID As String

CloseMusic

'MCI命令

DriverID = GetDriverID(urlStr)

If DriverID = "RealPlayer" Then

PlayType = RealPlay

Exit Function

End If

MciCommand = "open " & urlStr & " type " & DriverID & " alias NOWMUSIC"

If DriverID = "AVIVideo" Or DriverID = "MPEGVideo" Or DriverID = "MPEGVideo2" Then

If hwnd <> 0 Then

MciCommand = MciCommand + " parent " & hwnd & " style child"

hWndMusic = GetWindowHandle

prevWndproc = GetWindowLong(hWndMusic, -4)

SetWindowLong hWndMusic, -4, AddressOf WndProc

Else

MciCommand = MciCommand + " style overlapped "

End If

End If

RefInt = mciSendString(MciCommand, vbNull, 0, 0)

mciSendString "set NOWMUSIC time format milliseconds", vbNullString, 0, 0

If RefInt = 0 Then OpenMusic = True

End Function

'=======================================================

'打开MCI设备,FILENAME为文件名,传值代表成功与否

'=======================================================

Public Function OpenMusic(FileName As String, Optional hwnd As Long) As Boolean

OpenMusic = False

Dim ShortPathName As String * 255

Dim RefShortName As String

Dim RefInt As Long

Dim MciCommand As String

Dim DriverID As String

CloseMusic

'获取短文件名

GetShortPathName FileName, ShortPathName, 255

RefShortName = Left(ShortPathName, InStr(1, ShortPathName, Chr(0)) - 1)

'MCI命令

DriverID = GetDriverID(RefShortName)

If DriverID = "RealPlayer" Then

PlayType = RealPlay

Exit Function

End If

MciCommand = "open " & RefShortName & " type " & DriverID & " alias NOWMUSIC"

If DriverID = "AVIVideo" Or DriverID = "MPEGVideo" Or DriverID = "MPEGVideo2" Then

If hwnd <> 0 Then

MciCommand = MciCommand + " parent " & hwnd & " style child"

hWndMusic = GetWindowHandle

prevWndproc = GetWindowLong(hWndMusic, -4)

SetWindowLong hWndMusic, -4, AddressOf WndProc

Else

MciCommand = MciCommand + " style overlapped "

End If

End If

RefInt = mciSendString(MciCommand, vbNull, 0, 0)

mciSendString "set NOWMUSIC time format milliseconds", vbNullString, 0, 0

If RefInt = 0 Then OpenMusic = True

End Function

Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

If Msg = &H202 Then

MsgBox "OK"

End If

WndProc = CallWindowProc(prevWndproc, hwnd, Msg, wParam, lParam)

End Function

'=======================================================

'根据文件名,确定设备

'=======================================================

Public Function GetDriverID(ff As String) As String

Select Case UCase(Right(ff, 3))

Case "MID", "RMI", "IDI"

GetDriverID = "Sequencer"

Case "WAV"

GetDriverID = "Waveaudio"

Case "ASF", "ASX", "IVF", "LSF", "LSX", "P2V", "WAX", "WVX", ".WM", "WMA", "WMX", "WMP"

GetDriverID = "MPEGVideo2"

Case ".RM", "RAM", ".RA"

GetDriverID = "RealPlayer"

Case Else

GetDriverID = "MPEGVideo"

End Select

End Function

'======================================================

'播放文件

'======================================================

Public Function PlayMusic() As Boolean

Dim RefInt As Long

PlayMusic = False

RefInt = mciSendString("play NOWMUSIC", vbNull, 0, 0)

If RefInt = 0 Then PlayMusic = True

End Function

'======================================================

'获取媒体的长度

'======================================================

Public Function GetMusicLength() As Long

Dim RefStr As String * 80

mciSendString "status NOWMUSIC length", RefStr, 80, 0

GetMusicLength = Val(RefStr)

End Function

'======================================================

'获取当前播放进度

'======================================================

Public Function GetMusicPos() As Long

Dim RefStr As String * 80

mciSendString "status NOWMUSIC position", RefStr, 80, 0

GetMusicPos = Val(RefStr)

End Function

'======================================================

'获取媒体的当前进度

'======================================================

Public Function SetMusicPos(Position As Long) As Boolean

Dim RefInt As Long

SetMusicPos = False

RefInt = mciSendString("seek NOWMUSIC to " & Position, vbNull, 0, 0)

If RefInt = 0 Then SetMusicPos = True

End Function

'======================================================

'暂停播放

'======================================================

Public Function PauseMusic() As Boolean

Dim RefInt As Long

PauseMusic = False

RefInt = mciSendString("pause NOWMUSIC", vbNull, 0, 0)

If RefInt = 0 Then PauseMusic = True

End Function

'======================================================

'关闭媒体

'======================================================

Public Function CloseMusic() As Boolean

Dim RefInt As Long

CloseMusic = False

RefInt = mciSendString("close NOWMUSIC", vbNull, 0, 0)

If RefInt = 0 Then CloseMusic = True

End Function

'======================================================

'设置声道

'======================================================

Public Function SetAudioSource(sAudioSource As AudioSource) As Boolean

Dim RefInt As Long

Dim strSource As String

Select Case sAudioSource

Case 1: strSource = "left"

Case 2: strSource = "right"

Case 0: strSource = "stereo"

End Select

SetAudioSource = False

RefInt = mciSendString("setaudio NOWMUSIC source to " & strSource, vbNull, 0, 0)

If RefInt = 0 Then SetAudioSource = True

End Function

'======================================================

'全屏播放

'======================================================

Public Function PlayFullScreen() As Boolean

Dim RefInt As Long

PlayFullScreen = False

RefInt = mciSendString("play NOWMUSIC fullscreen", vbNull, 0, 0)

If RefInt = 0 Then PlayFullScreen = True

End Function

'=====================================================

'设置声音大小

'=====================================================

Public Function SetVolume(Volume As Long) As Boolean

Dim RefInt As Long

SetVolume = False

RefInt = mciSendString("setaudio NOWMUSIC volume to " & Volume, vbNull, 0, 0)

If RefInt = 0 Then SetVolume = True

End Function

'=====================================================

'设置播放速度

'=====================================================

Public Function SetSpeed(Speed As Long) As Boolean

Dim RefInt As Long

SetSpeed = False

RefInt = mciSendString("set NOWMUSIC speed " & Speed, vbNull, 0, 0)

If RefInt = 0 Then SetSpeed = True

End Function

'====================================================

'静音True为静音,FALSE为取消静音

'====================================================

Public Function SetAudioOnOff(AudioOff As Boolean) As Boolean

Dim RefInt As Long

Dim OnOff As String

SetAudioOff = False

If AudioOff Then OnOff = "off" Else OnOff = "on"

RefInt = mciSendString("setaudio NOWMUSIC " & OnOff, vbNull, 0, 0)

If RefInt = 0 Then SetAudioOff = True

End Function

'====================================================

'是否有画面True为有,FALSE为取消

'====================================================

Public Function SetWindowShow(WindowOff As Boolean) As Boolean

Dim RefInt As Long

Dim OnOff As String

SetWindowShow = False

If WindowOff Then OnOff = "show" Else OnOff = "hide"

RefInt = mciSendString("window NOWMUSIC state " & OnOff, vbNull, 0, 0)

If RefInt = 0 Then SetWindowShow = True

End Function

'====================================================

'获得当前媒体的状态是不是在播放

'====================================================

Public Function IsPlaying() As Boolean

Dim sl As String * 255

mciSendString "status NOWMUSIC mode", sl, Len(sl), 0

If Left(sl, 7) = "playing" Or Left(sl, 2) = "播放" Then

IsPlaying = True

Else

IsPlaying = False

End If

End Function

'====================================================

'获得播放窗口的handle

'====================================================

Public Function GetWindowHandle() As Long

Dim RefStr As String * 160

mciSendString "status NOWMUSIC window handle", RefStr, 80, 0

GetWindowHandle = Val(RefStr)

End Function

'====================================================

'获取DeviceID

'====================================================

Public Function GetDeviceID() As Long

GetDeviceID = mciGetDeviceID("NOWMUSIC")

End Function

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有