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

本文介绍了一种使用C#结合Win32API来实现媒体播放的类,该类不仅可以播放mp3文件,还支持wma和wmv格式。通过调用API,即使播放wmv视频,系统也会自动弹出一个小窗口进行显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个是从别人的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>

    class Mp3
    
{
        
public Mp3()
        
{
        }

        
//定义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
                
{
                    MessageBox.Show(
"出错错误!");
                }

            }

        }

        
//播放
        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, 1280);
            ilong 
= APIClass.mciSendString("close all", TemStr, 1280);
            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 < 1return "";
            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
  );
 }

代码下载: Mp3ForCSharp.zip

 代码来源:http://myliulongtao.icode.youkuaiyun.com/post/2007/06/13/54135

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值