c#中用Win32API实现的媒体播放类,支持mp3\wma\wmv

这个是从别人的blog是看到的.

经过我的验证,完全可以使用,而且不仅支持mp3,还支持wma,wmv.播放wmv的话会自动弹出一个视频播放小窗口.

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
using System.Windows.Forms;

namespace winformFlash
... {
/**////<summary>
///用Win32Api实现的媒体播放类.支持Mp3,wma,wmv
///</summary>

classMp3
...{
publicMp3()
...{
}

//定义API函数使用的字符串变量
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=260)]
privatestringName="";
[MarshalAs(UnmanagedType.ByValTStr,SizeConst
=128)]
privatestringdurLength="";
[MarshalAs(UnmanagedType.LPTStr,SizeConst
=128)]
privatestringTemStr="";
intilong;
//定义播放状态枚举变量
publicenumState
...{
mPlaying
=1,
mPuase
=2,
mStop
=3
}
;
//结构变量
publicstructstructMCI
...{
publicboolbMut;
publicintiDur;
publicintiPos;
publicintiVol;
publicintiBal;
publicstringiName;
publicStatestate;
}
;

publicstructMCImc=newstructMCI();

//取得播放文件属性
publicstringFileName
...{
get
...{
returnmc.iName;
}

set
...{
//ASCIIEncodingasc=newASCIIEncoding();
try
...{
TemStr
="";
TemStr
=TemStr.PadLeft(127,Convert.ToChar(""));
Name
=Name.PadLeft(260,Convert.ToChar(""));
mc.iName
=value;
ilong
=APIClass.GetShortPathName(mc.iName,Name,Name.Length);
Name
=GetCurrPath(Name);
//Name="open"+Convert.ToChar(34)+Name+Convert.ToChar(34)+"aliasmedia";
Name="open"+Convert.ToChar(34)+Name+Convert.ToChar(34)+"aliasmedia";
ilong
=APIClass.mciSendString("closeall",TemStr,TemStr.Length,0);
ilong
=APIClass.mciSendString(Name,TemStr,TemStr.Length,0);
ilong
=APIClass.mciSendString("setmediatimeformatmilliseconds",TemStr,TemStr.Length,0);
mc.state
=State.mStop;
}

catch
...{
MessageBox.Show(
"出错错误!");
}

}

}

//播放
publicvoidplay()
...{
TemStr
="";
TemStr
=TemStr.PadLeft(127,Convert.ToChar(""));
APIClass.mciSendString(
"playmedia",TemStr,TemStr.Length,0);
mc.state
=State.mPlaying;
}

//停止
publicvoidStopT()
...{
TemStr
="";
TemStr
=TemStr.PadLeft(128,Convert.ToChar(""));
ilong
=APIClass.mciSendString("closemedia",TemStr,128,0);
ilong
=APIClass.mciSendString("closeall",TemStr,128,0);
mc.state
=State.mStop;
}


publicvoidPuase()
...{
TemStr
="";
TemStr
=TemStr.PadLeft(128,Convert.ToChar(""));
ilong
=APIClass.mciSendString("pausemedia",TemStr,TemStr.Length,0);
mc.state
=State.mPuase;
}

privatestringGetCurrPath(stringname)
...{
if(name.Length<1)return"";
name
=name.Trim();
name
=name.Substring(0,name.Length-1);
returnname;
}

//总时间
publicintDuration
...{
get
...{
durLength
="";
durLength
=durLength.PadLeft(128,Convert.ToChar(""));
APIClass.mciSendString(
"statusmedialength",durLength,durLength.Length,0);
durLength
=durLength.Trim();
if(durLength=="")return0;
return(int)(Convert.ToDouble(durLength)/1000f);
}

}


//当前时间
publicintCurrentPosition
...{
get
...{
durLength
="";
durLength
=durLength.PadLeft(128,Convert.ToChar(""));
APIClass.mciSendString(
"statusmediaposition",durLength,durLength.Length,0);
mc.iPos
=(int)(Convert.ToDouble(durLength)/1000f);
returnmc.iPos;
}

}

}

}


 
public class APIClass
 
... {
  [DllImport(
"kernel32.dll",CharSet=CharSet.Auto)]
  
publicstaticexternintGetShortPathName(
   
stringlpszLongPath,
   
stringshortFile,
   
intcchBuffer
  );

  [DllImport(
"winmm.dll",EntryPoint="mciSendString",CharSet=CharSet.Auto)]
  
publicstaticexternintmciSendString(
   
stringlpstrCommand,
   
stringlpstrReturnString,
   
intuReturnLength,
   
inthwndCallback
  );
 }

代码下载: Mp3ForCSharp.zip

代码来源:http://myliulongtao.icode.csdn.net/post/2007/06/13/54135

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值