4、mciSendString()
vb声明: 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
说明: mciSendString()函数的功能与mciExecute()函数相似,也是发送一个命令字符串给MCI,但是mciSendString()函数再传送字符串的同时还可以接受反馈的信息。
MciSendString()函数的返回值为Long型值,如果返回值为0,表示调用失败;如果返回值不为0,表示调用成功。
MciSendString()的参数说明如下:
(1)lpstrCommand : 传送给MCI的命令字符串;
(2)lpstrReturnString : 指向一个预备接受信息的文本缓冲区;
(3)uReturnLength : 所指定的文本缓冲区大小;
(4)hwndCallback : 用来接受确认信息的LpstrCommand,代表传送给MCI的命令字符串。
下面是lpstrCommand参数的取值:
(1) open
语法形式:open 设备名称 参数
功能: 打开一个AVI动画播放设备。
说明:open命令的参数有[ 1 ] Alias : 设备别名 ;[ 2 ] Parent :播放动画窗口的父窗口;[ 3 ] style_sype : 显示动画的窗口类型 ; [ 4 ] style child : 播放动画的为子窗口 ; [ 5 ] style overlapped : 播放动画的为重叠窗口 ; [ 6 ] style popup : 播放动画的为突显示窗口 ;
[ 6 ] style device_type_AVI : 播放的设备.
( 2 ) play
语法形式: play 设备名称 参数
功能: 播放动画文件
说明: play 命令的参数有 [ 1 ] From position1 to position2 : 指定的开始位置播放到指定的结束位置; [ 2 ] Fullscreen : 以全屏幕的方式播放动画文件; [ 3 ] Windows : 在默认的窗口中播放动画文件.
(3) cue
语法形式: cue 设备名称 参数
功能: 准备实例供播放使用
说明: cue命令参数有 [ 1 ] output : 准备一个实例供播放使用; [ 2 ] to position : 跳到指定位置,并且处于暂停状态.
下面是修改后的源代码:
Public Type SYSTEMTIME
wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer
End Type
Public Declare Sub GetLocalTime Lib " kernel32 " Alias " GetLocalTime " ( lpSystemTime As SYSTEMTIME )
Public Declare Function mciSendCommand Lib " winmm.dll " Alias " mciSendCommandA " ( ByVal wDeviceID As Long , ByVal uMessage As Long , ByVal dwParam1 As Long , ByVal dwParam2 As Any ) As Long
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
Dim dangqianshijian AS SYSTEMTIME
‘ = = = = = = = = = = = = = = = = = = = = = = = = ‘ 每秒钟触发一次此事件,从而获取当时的时间,并调用相应的函数,画出三个针的位置 ‘ = = = = = = = = = = = = = = = = = = = = = = = =
Private Sub Timer1 _ Timer ( )
Call GetLocalTime( dangqianshijian ) miao = dangqianshijain . wSecond miao = 60 – miao fen = dangqianshijian . wMinute fen = 60 - fen shi = dangqianshijian . wHour
If shi >= 12 Then ‘因为一天之内时针要走二十四个钟头,也就是要走两圈,所以将下午和晚上的时间减去十二,就可以确定时针准确的位置 shi = shi - 12 End If
shi = 12 - shi miao = xianshimiao ( maio ) fen = xianshifen ( fen ) shi = xianshishi ( shi ) If fen = 0 and miao = 0 then ‘如果分针和秒针都为零,这位整点,根据时针的数报时
Select case shi Case 0 ‘零点,0.wav报时零点 MMControl1.FileName = App . Path & “ 0.wav ” ‘选择要打开的文件 ErrorCode = mciSendString ( “ Open ” & App . Path & “ 0.wav ” & “ type WaveAudio alias wave ” , ReturnString , 256, 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ”, ReturnStr , 256 , 0 )
‘播放所选择的文件
Case 1 ‘ 一点,1.wav报时一点,以下依次类推 MMControl1.FileName = App . Path & “ 1.wav ” ‘选择要打开的文件 ErrorCode = mciSendString (“Open” & App.Path & “0.wav” & “type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString (“ Play wave” , ReturnStr , 256 , 0 )
‘播放所选择的文件
Case 2 MMControl1.FileName = App . Path & “ 2.wav ” ErrorCode = mciSendString ( “Open” & App.Path & “0.wav” & “type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnSt r , 256 , 0)
‘播放所选择的文件
Case 3 MMControl1.FileName = App . Path & “ 3.wav ” ErrorCode = mciSendString ( “ Open ” & App . Path & “ 0.wav ” & “ type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnStr , 256 , 0 )
‘播放所选择的文件
Case 4
MMControl1.FileName = App . Path & “ 4.wav ”
ErrorCode = mciSendString ( “ Open ” & App . Path & “ 0.wav ” & “ type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnStr , 256 , 0 )
‘播放所选择的文件
Case 5
MMControl1.FileName = App . Path & “ 5.wav ”
ErrorCode = mciSendString ( “ Open ” & App.Path & “ 0.wav ” & “ type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnStr , 256 , 0 )
‘播放所选择的文件
Case 6
MMControl1.FileName = App . Path & “ 6.wav ”
ErrorCode = mciSendString ( “ Open ” & App . Path & “ 0.wav ” & “ type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnStr , 256 , 0 )
‘播放所选择的文件
Case 7
MMControl1.FileName = App . Path & “ 7.wav ”
ErrorCode = mciSendString ( “ Open ” & App . Path & “ 0 . wav ” & “ type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnStr , 256 , 0 )
‘播放所选择的文件
Case 8
MMControl1.FileName = App . Path & “ 8.wav ”
ErrorCode = mciSendString ( “ Open ” & App . Path & “ 0.wav ” & “ type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnStr , 256 , 0 )
‘播放所选择的文件
Case 9
MMControl1.FileName = App . Path & “ 9.wav ”
ErrorCode = mciSendString ( “ Open ” & App . Path & “ 0.wav ” & “ type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnStr , 256 , 0 )
‘播放所选择的文件
Case 10
MMControl1.FileName = App . Path & “ 10.wav ”
ErrorCode = mciSendString ( “ Open ” & App . Path & “ 0.wav ” & “ type WaveAudio alias wave ” , ReturnString , 256 , 0)
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnSt r , 256 , 0)
‘播放所选择的文件
Case 11
MMControl1.FileName = App . Path & “ 11.wav ”
ErrorCode = mciSendString ( “ Open ” & App . Path & “ 0.wav ” & “ type WaveAudio alias wave ” , ReturnString , 256 , 0 )
‘打开所选择的文件
ErrorCode = mciSendString ( “ Play wave ” , ReturnStr , 256 , 0 )
‘播放所选择的文件
End Select
ErrorCode = mciSendString ( “ Close wave ” , ReturnStr , 256 , 0 )
End Sub | 以上修改,因为结构上没有本质变化,都要临时载入wave文件,所以速度上没有质的改变,但我们应该知道因为vb中的函数也都是对windows提供的API的封装,所以,直接调用API效率要高于使用vb所提供的语句和函数。
|
|