标题:关于用 vb 写音乐播放器,调用的系统 API 函数 mcisendstring 不能播放有带 ...
只看楼主
q42946456
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-1
结帖率:0
已结贴  问题点数:20 回复次数:6 
关于用 vb 写音乐播放器,调用的系统 API 函数 mcisendstring 不能播放有带空格的文件名的 MP3 的问题
最近用mcisendstring函数写了一个音乐播放器,但是不能够播放文件名中带有空格的音乐,求大神解
搜索更多相关主题的帖子: 音乐播放器 
2014-05-01 16:35
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
得分:10 
有3种方法解决
1:分析文件名,只要含有空格则拷贝该文件到本目录的临时文件,该临时文件名不含空格,mcisendstring此时播放临时文件
2:首先备份现文件名字串,分析文件名并去掉空格,对该文件改名,播放完成或更换播放音乐时又将该文件名该还原即可。
3:获取含空格的文件短文件路径,代码如下(已调试通过)
Private 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 GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Private Sub Command1_Click()
  '播放
  mciSendString "play music", 0&, 0, 0
End Sub

Private Sub Command2_Click()
  '停止
  mciSendString "stop music", 0&, 0, 0
End Sub

Private Sub Command3_Click()
  '关闭
  mciSendString "close music", 0&, 0, 0
End Sub

Private Sub Form_Load()
  '打开音乐文件
  Dim s As String, d As String * 255, l As Long, i As Integer
  s = "e:\音乐\红 星 歌.mp3"                '原带空格的音乐文件名,根据需要换
  l = GetShortPathName(s, d, 255)           '找到该文件对应的短文件名(实际长度255的字串)
  s = ""
  i = 1
  While Abs(Asc(Mid(d, i, 1))) > 10
    '该循环可以得到正确的文件名
    s = s & Mid(d, i, 1)
    i = i + 1
  Wend
  mciSendString "open " & s & " Alias music", 0&, 0, 0    '打开短文件名对应的mp3
End Sub

Private Sub Form_Unload(Cancel As Integer)
  '退出也关闭,防止没有手动关闭
  mciSendString "close music", 0&, 0, 0
End Sub
2014-05-01 23:38
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
得分:0 
还有第四种方法:不用mcisendstring播放,用MMControl控件播放,我验证过,可以播放含空格的音乐。
2014-05-01 23:41
alike123
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:107
专家分:428
注 册:2014-2-10
得分:10 
版主,你这么厉害,你家里人知道吗
2014-05-02 14:40
q42946456
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-1
得分:0 
回复 2 楼 lowxiong
非常感谢你,我找到了一种最简单的方法,在路径的两边加上引号的转义字符,chr(34),这样就可以了
2014-05-25 12:37
q42946456
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-1
得分:0 
回复 3 楼 lowxiong
谢谢
2014-05-25 13:08
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
得分:0 
回复 5 楼 q42946456
学无止境啊!
2014-05-26 07:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430894-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.221250 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved