Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVallpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
Private Declare Function mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" (ByVal dwError As Long, ByVal lpstrBuffer As String, ByVal uLength As Long) As Long
Private Sub Command5_Click()
Dim Result As Integer
Dim ReturnStr As String * 1024 '注意,必须指定String的长度
Result = mciSendString("play c:\windows\media\The Microsoft Sound.wav", ReturnStr, 1024, 0)Dim ErrStr As String * 1024
If Result = 1 Then
MsgBox "播放成功"
End If

解决方案 »

  1.   


    '你的文件名中间有空格,而mci播放命令字符串中文件名不允许空格(c:\windows\media\The 当成了文件名'看我的播放模块Attribute VB_Name = "mdlSound"
    'Model process sound play
    Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long
    Public Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As LongPrivate 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
    Private 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
    Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As LongPrivate Declare Function MessageBeep Lib "user32" (ByVal wType As Long) As LongConst SND_ASYNC = &H1
    Const SND_NODEFAULT = &H2Public PlayError As Boolean'测试是否安装了声卡
    Public Function TestSound() As Boolean
    Dim Ret As Long
        Ret& = waveOutGetNumDevs
        If Ret > 0 Then
            TestSound = True
        Else
            TestSound = False
        End If
        'TestSound = False
    End Function'播放wav声音文件
    Public Sub PlaySound(FileName As String, Optional Flag As Long = (SND_ASYNC Or SND_NODEFAULT))
    Dim Ret As Long
        Ret = sndPlaySound(FileName, Flag)
        If Ret = 0 And Flag = (SND_ASYNC Or SND_NODEFAULT) Then
            'MessageBeep 0
            Beep
        End If
    End Sub'播放音乐mp3,wav,mid等
    Public Sub PlayMusic(FileName As String)
    Dim Buffer As String * 128
    Dim Ret As Long
    Dim PlayStatus As String * 20
    Dim ShortFileName As String
        mciExecute "close all"
        If Dir(FileName) = "" Then PlayError = True: Exit Sub
        ShortFileName = ShortName(FileName)
        mciSendString "open " & ShortFileName & " alias mp3", Buffer, Ret, 0
        mciSendString "play mp3", Buffer, Ret, 0
        PlayError = False
    End SubPublic Sub StopMusic()
    Dim Buffer As String * 128
    Dim Ret As Long
        mciSendString "stop mp3", Buffer, Ret, 0
    End SubPublic Function GetPlayMode() As String
    Dim Buffer As String * 128
    Dim pos As Integer
        mciSendString "status mp3 mode", Buffer, 128, 0&
        pos = InStr(Buffer, Chr(0))
        GetPlayMode = Left(Buffer, pos - 1)
    End Function'从带路径文件名中提取文件名
    Public Function GetFileNameNoPath(sFullPathFileName As String) As String
    Dim pos As Integer
    Dim DifFilename As String
        If sFullPathFileName = "" Then Exit Function
        DifFilename = StrReverse(sFullPathFileName)
        pos = InStr(1, DifFilename, "\")
        If pos <> -1 Then
            GetFileNameNoPath = Right(sFullPathFileName, pos - 1)
        Else
            GetFileNameNoPath = sFullPathFileName
        End If
    End Function'得到文件短文件名
    Function ShortName(LongPath As String) As String
    Dim ShortPath As String
    Dim pos As String
    Dim Ret As Long
    Const MAX_PATH = 260
        If LongPath = "" Then Exit Function
        ShortPath = Space$(MAX_PATH)
        Ret& = GetShortPathName(LongPath, ShortPath, MAX_PATH)
        If Ret& Then
            pos = InStr(1, ShortPath, " ")
            ShortName = Left$(ShortPath, pos - 2)
        End If
    End Function
      

  2.   

    其实原理就是将长文件名(可以包含空格)转换成DOS文件名(8.3格式)
      

  3.   

    是的, mciSendString不支持长文件名,  只支持8。3格式
    可以用api转换
    好象是FullToShortPathName什么来着。 查查msdn