[CF.Skills]在.NET CF中嵌入Media Player(C#)

昨天有人在http://winbile.net/bbs上问到,在WM5上面如何使用MediaPlayer播放音乐。
其实微软有在一个多媒体案例中提到,详见:
http://www.microsoft.com/china/MSDN/library/Mobility/pocketpc/WorkingwithMultimedia.mspx
只不过方法有些复杂,不过还好你可以下载它的Sample,然后在你的托管项目中引用该项目。
不管怎么说,毕竟.NET Compact Framework中没有可以直接操作wmp的方法。但是,即便如此我们仍然可以使用托管代码对windows media player进行控制。其基本思路是先为media player创建一条单独的进程,再通过忘Media player的窗体发送消息来控制Media Player。下面来看看这是如何通过托管代码做到的,
首先,创建进程并传入相应参数:

            wmpProcess = new Process();
            wmpProcess.StartInfo.FileName 
= "wmplayer.exe";
            wmpProcess.StartInfo.Arguments 
= wmpArgs;

这里要注意一下Arguments的格式,应该像这样:"""\My Documents\TestVideo.wmv"" /fullscreen";文件路径必须和后面的参数区分开,这里C#和VB中,这样的加双引号的方式是合法的。
然后,启动进程,音乐开始播放了(此时也许你希望用户的焦点仍然你的FORM,那么你应将你的form放置在顶层),在WM5.0以上的系统中,提供了更多对WMP的支持,你可以通过某些属性访问到当前播放的曲目名,艺术家的名字,专辑名,比特率,已经播放的时间(精确到毫秒)甚至是音乐风格。下面列举了一些:
            artist = SystemState.MediaPlayerTrackArtist;
            playingTrack 
= SystemState.MediaPlayerTrackTitle;
            album 
= SystemState.MediaPlayerAlbumTitle;
            bitRate 
= SystemState.MediaPlayerTrackBitrate;
            style 
= SystemState.MediaPlayerTrackGenre;

还有一个问题是如何停止MediaPlayer呢?我们还是可以通过给窗体发送消息来间接的控制,不过这里要用到一个本地的函数SendMessage,代码如下:

    
//引用SendMessage并命名为CloseWMP
        private const UInt32 WM_CLOSE = 16;
        [DllImport(
"Coredll.dll", EntryPoint = "SendMessage")]
        
public static extern Int32 CloseWMP(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);
//用的时候这样
          public void StopWMP()
        
{
            MyRef.CloseWMP(wmpProcess.MainWindowHandle, WM_CLOSE, 
00);
        }

程序运行效果如下:



完整的代码点击此处下载

 All rights reserved by Freesc Huang
 http://fox23.cnblogs.com
 hjd.click [AT] gmail.com
2008-2-18

posted on 2008-02-18 02:36  J.D Huang  阅读(2802)  评论(8编辑  收藏  举报