C#调用mciSendString获取歌曲时长没反应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#调用mciSendString获取歌曲时长没反应相关的知识,希望对你有一定的参考价值。

打开时我用了:
mciSendString("open " + filepath + " type MPEGVIDEO Alias song", null, 0, 0); //打开

播放时我用了:
mciSendString("play song", null, 0, 0); //播放

获取时我用了:
mciSendString("status song length", durLength, 255, 0);
获取的我放在了Timer里面,总是获取不到当前时间,歌曲在正常播放。
具体可以加QQ:277079270,正好交些会C#的朋友。

参考技术A
编辑词条mciSendString
mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面我们来介绍一
下它的使用方法:
一,打开多媒体文件。
首先在Dialog上面放一个Picture控件,MCISendString就在这个Picture控件的平面上播放多媒体文件,
设Picture控件的ID为IDC_STATIC1:
CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC1);HWND h=pStatic->GetSafeHwnd();
CString open1;
char buf[256];
open1.Format("open f:""mpeg""mpeg1.avi type MPEGVideo Alias movie parent %u Style %u notify", h,WS_CHILD);
mciSendString(open1.GetBuffer(open1.GetLength()),buf,sizeof(buf),NULL);
这样F盘下面的mpeg目录下的mpeg1.avi就打开了,其中的type MPEGVideo是指打开MPEG,AVI等类型,如果不加
type MPEGVideo这一句,就是打开WAV,MP3等,Alias movie定义了mpeg1.avi的别名为movie,以后可以通过操
做movie就可以操作mpeg1.avi。
二,播放多媒体文件。
上面我们已经打开了f:"mpeg"mpeg1.avi,现在我们来播放它:
mciSendString("play movie",buf,sizeof(buf),NULL);
如果想全屏播放:
mciSendString("play movie fullscreen",buf,sizeof(buf),NULL);
三,暂停播放。
mciSendString("pause movie",buf,sizeof(buf),NULL);
四,停止播放。
mciSendString("close movie",buf,sizeof(buf),NULL);
五,得到所播放文件的长度。
char sPosition[256];long lLength;
ciSendString("Status movie length", sPosition, 255,0);lLength=strtol(sPosition, NULL, 10);
其中lLength就是所播放文件的长度。
六,得到所播放文件的声音大小。
char chVolume[256];long lVolume;mciSendString("status movie volume",chVolume,255,0);lVolume=strtol(chVolume,NULL,10);其中lVolume就是所播放文件的声音大小。
七,到你指定的位置播放。
CString step1;long lPosition;
lPosition=100;
step1.Format("seek movie to %ld",lPosition);
mciSendString(step1.GetBuffer(step1.GetLength()),buf,sizeof(buf),0);
其中lPosition就是要到的播放位置,可以由你指定。
参考技术B mciSendString("status song length", durLength, 255, 0);

你用messagebox返回一下能否正确取到时间
messagebox.show(durlength);
如果是空白,证明没有取到时间,
mciSendString("status song length", durLength, 255, 0); 中对字符串的使用不对.

C# 从 Windows Media Player 获取当前歌曲源 url

【中文标题】C# 从 Windows Media Player 获取当前歌曲源 url【英文标题】:C# Get current song source url from Windows Media Player 【发布时间】:2013-08-10 04:14:55 【问题描述】:

我正在尝试创建一个小应用程序,通知用户当前在 Windows Media Player 上播放的歌曲的路径。

所以我四处搜索并发现了一个很好的代码:

WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer();
// Get an interface to the first media item in the library. 
WMPLib.IWMPMedia3 firstMedia = (WMPLib.IWMPMedia3)player.mediaCollection.getAll().get_Item(0);

// Make the retrieved media item the current media item.
player.currentMedia = firstMedia;

// Display the name of the current media item.
currentMediaLabel.Text = ("Found first media item. Name = " + player.currentMedia.name);

但问题是这段代码实际上是获取列表中的第一首歌曲而不是获取当前歌曲,我尝试更改方法但没有好处:(我希望你能帮助我。

【问题讨论】:

【参考方案1】:

您已经在player.currentMedia 中拥有它。

WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer();

// start the player
...

if(player.currentMedia != null)

    // Display the name of the current media item.
    currentMediaLabel.Text = ("Found first media item. Name = "
                              + player.currentMedia.name);

【讨论】:

它不起作用,我收到此错误:System.NullReferenceException 这意味着player.currentMedia 为空,如果还没有歌曲正在播放,就是这种情况。在您的代码中,您应该在访问其属性之前验证 player.currentMedia 不为空。【参考方案2】:

给你几个链接。

基本上

    获取windows media player的窗口标题 以编程方式

http://social.msdn.microsoft.com/Forums/vstudio/en-US/0f784799-f50b-46da-857b-b08373bcceef/getting-the-current-song-name-in-windows-media-player-c

http://www.xtremevbtalk.com/archive/index.php/t-265768.html

How to interact with Windows Media Player in C#

【讨论】:

以上是关于C#调用mciSendString获取歌曲时长没反应的主要内容,如果未能解决你的问题,请参考以下文章

C# MciSendString 记录,在调试中工作,未部署

回声 :: 歌曲时长

C# 从 Windows Media Player 获取当前歌曲源 url

为啥在我的代码中获取状态位置的 mciSendString() 失败?

ffmpeg获取文件的总时长(mp3/mp4/flv等)

Python爬取动态生成的网页(框架)需要具备哪些知识或者使用哪些库?