如何在windows mobile平台上调用windows media player mobile控件?谢谢。

chesterwoo 2007-02-09 10:56:16
用什莫语言开发?c#或c++,或者embeded vb .net?请大家帮忙。谢谢。
...全文
3168 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
北方大冬瓜 2007-07-31
  • 打赏
  • 举报
回复
应该有3个DLL,WMPCEOCX.DLL 等,不需要注册
dyw 2007-07-31
  • 打赏
  • 举报
回复
微软提供的例子:

http://www.microsoft.com/downloads/details.aspx?familyid=46ba698a-c00d-4b90-9177-460854f1b57c&displaylang=en
ss128 2007-07-31
  • 打赏
  • 举报
回复
还有dll在机子上是否要注册?谢谢帮忙
ss128 2007-07-31
  • 打赏
  • 举报
回复
要装那个SDK咯,WMPktPC里就只有一个例子和文件,没有dll,除非windows版本的sdk就有
北方大冬瓜 2007-07-31
  • 打赏
  • 举报
回复
需要在机子上拷贝SDK中的几个DLL
ss128 2007-07-31
  • 打赏
  • 举报
回复
找不到有这个dll的,别人写的可以不用加dll先试一下那个先,哈
ss128 2007-07-30
  • 打赏
  • 举报
回复
呵,上面的编译能过,但在机子上运行不了,说缺少组件!呵呵,之前就是有这个问题,郁闷啊.....
北方大冬瓜 2007-07-30
  • 打赏
  • 举报
回复
http://www.pocketpcdn.com/libraries/wmp.html

Windows Media Player for Pocket PC SDK
ss128 2007-07-30
  • 打赏
  • 举报
回复
如何在windows mobile平台上调用windows media player mobile控件?谢谢。
yinyz 2007-02-21
  • 打赏
  • 举报
回复
楼上这个例子是从哪里找到的?
bombshell 2007-02-20
  • 打赏
  • 举报
回复
在过去的10年里,移动技术已经取得了令人难以置信的进步和成就。应用Windows CE系统的移动设备也在应用和编程方面变得更加灵活和方便。最新的Windows CE设备中加入了Windows Media Player 10 Mobile,它提供了和PC上的WMP控件一样强大的功能。你可以为你的移动设备增加多媒体能力,包括播放视频、音频文件,展示图片等等。你可以在文后所附的段落中找到可用的SDK和资源等相关信息。
下面我们简单介绍WMP的一些实现技术。

  慨述

  WMP SDK提供了很多的接口,但不是所有都能应用到Windows Mobile平台上来。下面列出可用的一些并进行解释:
接口 描述
IWMPCore WMP对象模型的根接口。你可以由此获取其他接口的指针并且通过它访问其他空间的基本特性。
IWMPControls 允许一个应用程序访问Windows Media Player控件;如它的播放,停止和暂停按钮。
IWMPError 提供错误信息。
IWMPEvents 把由Windows Media Player控件产生的事件提供给一个可以反馈的嵌入式程序。
IWMPMedia,IWMPMediaCollection 管理媒体项的属性。
IWMPNetwork 设置和获取Windows Media Player所使用的网络连接
IWMPPlayer 控制Windows Media Player空间的用户接口的行为。
IWMPPlaylist,IWMPPlaylistArray,IWMPPlaylistCollection 播放列表操作。
IWMPSettings 设置或者获取Windows Media Player的设置。

  创建第一个应用程序

  下面由一个简单的ATL应用程序开始,你将创建一个空间容器窗口。下面的代码段使用了一个标准的ATL技术来展示Windows Media Player控件:
LRESULT CWMPHost::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){ AtlAxWinInit(); CComPtr<IAxWinHostWindow> spHost; CComPtr<IConnectionPointContainer> spConnectionContainer; CComWMPEventDispatch *pEventListener = NULL; CComPtr<IWMPEvents> spEventListener; HRESULT hr; RECT rcClient; m_dwAdviseCookie = 0; ... // 创建窗口 GetClientRect(&rcClient); m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS); if (NULL == m_wndView.m_hWnd) goto FAILURE; // 在窗口中装载OCX hr = m_wndView.QueryHost(&spHost); if (FAILMSG(hr)) goto FAILURE; hr = spHost->CreateControl(CComBSTR(_T("WMPlayer.OCX")), m_wndView, 0); if (FAILMSG(hr)) goto FAILURE; hr = m_wndView.QueryControl(&m_spWMPPlayer); if (FAILMSG(hr)) goto FAILURE; // 开始监听事件 hr = CComWMPEventDispatch::CreateInstance(&pEventListener); spEventListener = pEventListener; if (FAILMSG(hr)) goto FAILURE; hr = m_spWMPPlayer->QueryInterface(__uuidof(IConnectionPointContainer), (void**)&spConnectionContainer); if (FAILMSG(hr)) goto FAILURE; // 看OCX 是否支持IWMPEvents接口 hr = spConnectionContainer->FindConnectionPoint(__uuidof(IWMPEvents), &m_spConnectionPoint); if (FAILMSG(hr)) goto FAILURE; hr = m_spConnectionPoint->Advise(spEventListener, &m_dwAdviseCookie); if (FAILMSG(hr)) goto FAILURE; return 0;FAILURE: ::PostQuitMessage(0); return 0;}

  你所要做的只是创建一个控件窗口,包含一个IWMPPlayer接口指针,并且对WMP事件进行响应。ATL可以用比MFC更加简便的方式来完成这些任务,当然你也可以使用MFC。你的程序现在就可以播放Windows媒体文件,比如WMA和WMV。
WMP

  WMP控件也允许程序员来控制它的行为,比如你可以这样开始播放一个媒体文件:
LRESULT CWMPHost::OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ CFileOpenDlg dlgOpen; HRESULT hr; if (dlgOpen.DoModal(m_hWnd) == IDOK) {  hr = m_spWMPPlayer->put_URL(dlgOpen.m_bstrName);  if (FAILMSG(hr))   return 0; } return 0;}

  Windows Mobile Player 10的移动范例提供了一系列的控件使用范例。
 
在Web应用程序里使用WMP OCX

  在使用Web浏览器的时候,应用WMP编程就更加容易了(这是SDK里的例子):
<HTML><HEAD></HEAD><BODY><OBJECT ID=wmpocx WIDTH=200 HEIGHT=150 CLASSID="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" TYPE="application/x-oleobject" VIEWASTEXT><PARAM name="uimode" value="none"></OBJECT><BR><script for="wmpocx" event="PlayStateChange(NewState)" language="JScript">ClipPlayState(NewState);</script><script for="wmpocx" event="Error()" language="JScript">StopPlayer();</script><p><a href=# OnClick='PlayClip("\storage card\webapp\glass.wmv", ImgVideoPlay, true)'><IMG id="ImgVideoPlay" src="bt_play.gif" border="0"></a>Video<br><a href=# OnClick='PlayClip("\storage card\webapp\jeanne.wma", ImgAudioPlay, false)'><IMG id="ImgAudioPlay" src="bt_play.gif" border="0"></a> Audio<br>Play state sequence<br><input type="text" id="PlayStateSequence" width=30><SCRIPT language="JScript"><!--var CurrentPlayImage = null;var bVideo = null;var bWasBuffering = false;function StopPlayer(){ wmpocx.controls.stop(); wmpocx.close(); if (CurrentPlayImage != null) {  CurrentPlayImage.src = "bt_play.gif"; } bWasBufferring = false;}function ClipPlayState(NewState){ PlayStateSequence.value = PlayStateSequence.value + NewState + " "; switch(NewState) {  case 1:   // stopped   if (bWasBuffering)   {    bWasBufferring = false;    if (CurrentPlayImage != null)    {     CurrentPlayImage.src = "bt_play.gif";    }   }   break;  case 6:   // buffering   bWasBufferring = true;   if (CurrentPlayImage != null)   {    CurrentPlayImage.src = "bt_load.gif";   }   break;  case 9:   // transitioning  case 11:   // reconnecting   bWasBufferring = false;   break;  case 3:   // playing   if (bWasBufferring)   {    if (CurrentPlayImage != null)    {     CurrentPlayImage.src = "bt_stop.gif";    }    if (bVideo)    {     wmpocx.fullScreen = true;    }   }   break;    default:  } } function PlayClip(url, img, video) {  if (wmpocx.playState == 3 && bVideo != null && bVideo != video)  {   return;  }  bVideo = video;  CurrentPlayImage = img;  if (wmpocx.playState == 3)  {   StopPlayer();  }  else  {   PlayStateSequence.value = "";   if (CurrentPlayImage != null)   {    CurrentPlayImage.src = "bt_load.gif";   }   wmpocx.URL = url;  } } --> </SCRIPT></BODY></HTML>

使用旧版本的WMP控件

  如果你使用的手持设备没有WMP10,那事情还没有完。你仍然还可以使用WMP OCX版本8来为你的Pocket PC编程,虽然提供的功能特性少,好在也可以基本满足需要。我创建了一个简单的工程来展示它如何在MFC环境下工作。下面的代码段证明了它和ATL方式一样简单:
BOOL CWMP8SampleDlg::OnInitDialog(){ CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this // automatically when the application's main window is not // a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon CenterWindow(GetDesktopWindow()); // center to the hpc screen CRect rect; m_Panel.GetClientRect(&rect); if ( m_PlayerWnd.CreateControl(__uuidof(WMP),L"", WS_VISIBLE|WS_CHILD,rect, &m_Panel,AFX_IDW_PANE_FIRST) ) {  LPUNKNOWN lpUnk = m_PlayerWnd.GetControlUnknown();  HRESULT hr = lpUnk->QueryInterface(__uuidof(IWMP),(void**) &m_spWMPPlayer); } else {  AfxMessageBox(L"Failed to create WMP control");  ::PostQuitMessage(0);  return 0; } if ( m_spWMPPlayer ) {  m_WMPEvents.m_pMainDlg = (CWMP8SampleDlg*)this;  CComPtr<IConnectionPointContainer> spConnectionContainer;  HRESULT hr = m_spWMPPlayer-> QueryInterface( IID_IConnectionPointContainer, (void**)&spConnectionContainer );  if (SUCCEEDED(hr))  {   hr = spConnectionContainer-> FindConnectionPoint( __uuidof(_IWMPEvents), &m_spConnectionPoint );  }  if (SUCCEEDED(hr)) { hr = m_spConnectionPoint->Advise((IDispatch*)&m_WMPEvents, &m_dwAdviseCookie ); } else {  AfxMessageBox(L"Failed to get WMP control events");  ::PostQuitMessage(0);  return 0; } if ( FAILED(SetupWMP()) ) {  AfxMessageBox(L"Failed to setup WMP control");  ::PostQuitMessage(0);  return 0; }}m_spWMPPlayer->Stop();return TRUE;// return TRUE unless you set the focus to a// control=

PhilexPei 2007-02-14
  • 打赏
  • 举报
回复
VS2005可以调用自然代码,.NET CF2的托管代码提供的功能非常有限,如果你想做一些比较好的单机应用建议你调用自然代码,推荐使用VC++6.0
Jamestan 2007-02-10
  • 打赏
  • 举报
回复
visual studio 2005就好了

7,660

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧