原文地址:http://www.cnblogs.com/igrl/archive/2010/03/29/1699975.html
使用方式:
clsMCI cm
=
new
clsMCI();
cm.FileName = " 别看我只是一只羊.mp3 " ;
cm.play();
cm.FileName = " 别看我只是一只羊.mp3 " ;
cm.play();
类代码
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.IO ;
using System.Windows.Forms;
namespace WindowsApplication7
{
/// <summary>
/// clsMci 的摘要说明。
/// </summary>
public class clsMCI
{
public clsMCI()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
// 定义API函数使用的字符串变量
[MarshalAs(UnmanagedType.ByValTStr,SizeConst = 260 )]
private string Name = "" ;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst = 128 )]
private string durLength = "" ;
[MarshalAs(UnmanagedType.LPTStr,SizeConst = 128 )]
private string TemStr = "" ;
int ilong;
// 定义播放状态枚举变量
public enum State
{
mPlaying = 1 ,
mPuase = 2 ,
mStop = 3
};
// 结构变量
public struct structMCI
{
public bool bMut;
public int iDur;
public int iPos;
public int iVol;
public int iBal;
public string iName;
public State state;
};
public structMCI mc = new structMCI() ;
// 取得播放文件属性
public string FileName
{
get
{
return mc.iName;
}
set
{
// ASCIIEncoding asc = new ASCIIEncoding();
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) + " alias media";
Name = " open " + Convert.ToChar( 34 ) + Name + Convert.ToChar( 34 ) + " alias media " ;
ilong = APIClass.mciSendString( " close all " , TemStr, TemStr.Length , 0 );
ilong = APIClass.mciSendString( Name, TemStr, TemStr.Length, 0 );
ilong = APIClass.mciSendString( " set media time format milliseconds " , TemStr, TemStr.Length , 0 );
mc.state = State.mStop;
}
catch
{
}
}
}
// 播放
public void play()
{
TemStr = "" ;
TemStr = TemStr.PadLeft( 127 ,Convert.ToChar( " " ));
APIClass.mciSendString( " play media " , TemStr, TemStr.Length , 0 );
mc.state = State.mPlaying ;
}
// 停止
public void StopT()
{
TemStr = "" ;
TemStr = TemStr.PadLeft( 128 ,Convert.ToChar( " " ));
ilong = APIClass.mciSendString( " close media " , TemStr, 128 , 0 );
ilong = APIClass.mciSendString( " close all " , TemStr, 128 , 0 );
mc.state = State.mStop ;
}
public void Puase()
{
TemStr = "" ;
TemStr = TemStr.PadLeft( 128 ,Convert.ToChar( " " ));
ilong = APIClass.mciSendString( " pause media " , TemStr, TemStr.Length, 0 );
mc.state = State.mPuase ;
}
private string GetCurrPath( string name)
{
if (name.Length < 1 ) return "" ;
name = name.Trim();
name = name.Substring( 0 ,name.Length - 1 );
return name;
}
// 总时间
public int Duration
{
get
{
durLength = "" ;
durLength = durLength.PadLeft( 128 ,Convert.ToChar( " " )) ;
APIClass.mciSendString( " status media length " , durLength, durLength.Length, 0 );
durLength = durLength.Trim();
if (durLength == "" ) return 0 ;
return ( int )(Convert.ToDouble(durLength) / 1000f);
}
}
// 当前时间
public int CurrentPosition
{
get
{
durLength = "" ;
durLength = durLength.PadLeft( 128 ,Convert.ToChar( " " )) ;
APIClass.mciSendString( " status media position " , durLength, durLength.Length, 0 );
mc.iPos = ( int )(Convert.ToDouble(durLength) / 1000f);
return mc.iPos;
}
}
}
public class APIClass
{
[DllImport( " kernel32.dll " , CharSet = CharSet.Auto)]
public static extern int GetShortPathName (
string lpszLongPath,
string shortFile,
int cchBuffer
);
[DllImport( " winmm.dll " , EntryPoint = " mciSendString " , CharSet = CharSet.Auto)]
public static extern int mciSendString (
string lpstrCommand,
string lpstrReturnString,
int uReturnLength,
int hwndCallback
);
}
}