【原】基于Windows Media Player, 写自己的播放器【有源码,可下载整个工程】
最近有客戶問我,怎么把Windows Media Player 嵌套在自己的項(xiàng)目中。
以前我在Delphi下玩過Windows Media Player,可是在Microsoft Visual Studio 2008 沒有測(cè)試過。
到網(wǎng)上搜索了一把,果然得到很多例子。
?
其中CSDN上有個(gè)例子寫的不錯(cuò),不過要扣5分【我就不去賺分了,呵呵】,這個(gè)是CSDN上地地址:
http://download.csdn.net/source/677561
下載文件名是: Enhanced+Windows+Media+Player+using+VS+2005+in+C#.zip
?
我這個(gè)例子就是用這個(gè)CSDN上提供的例子,是基于Microsoft Visual Studio 2005下開發(fā)的,我只是簡單的把這個(gè)例子更新到Microsoft Visual Studio 2008?下,不過有點(diǎn)小麻煩,還好,我已經(jīng)解決了。
?
不多說了,直接上代碼,
?
Windows Media Playerusing?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Text;
using?System.Windows.Forms;
using?System.IO;
using?System.Threading;
using?AxWMPLib;
namespace?MediaPlayer
{
????
????public?partial?class?Form1?:?Form
????{
????????public?static?Form1?form1;
????????public?string?oldPath;
????????//To?Load?all?Songs?specified?in?Default?Path
????????public?DelegateLoadSongs?m_loadSongs;
????????public?delegate?void?DelegateLoadSongs();
????????//Thread?used?in?loading?all?songs?in?Default?Path.
????????public?Thread?execloadSongs;
????????public?ToolStripMenuItem?parentItem;
????????//To?Add?individual?song?as?a?New?MenuItem
????????public?DelegateAddSong?m_AddSongs;
????????public?delegate?void?DelegateAddSong(string?path);
????????public?Form1()
????????{
????????????InitializeComponent();
????????}
????????private?void?openToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{?
????????????//To?Select?Songs.
????????????bool?isFileExist?=?false;
????????????WMPLib.IWMPPlaylistCollection?playlistColl;
????????????WMPLib.IWMPPlaylist?playlist?=?axWindowsMediaPlayer1.newPlaylist("Test",?"");
????????????if?(openFileDialog1.ShowDialog()?!=?DialogResult.Cancel)
????????????{
????????????????//If?multiple?Songs?are?selected,
????????????????//than?it?will?create?a?New?Playlist?and?add?those?songs?to?that?list?and?set?it?as?Current?PlayList.
????????????????if?(openFileDialog1.FileNames.Length?>?1)
????????????????{
????????????????????playlistColl?=?axWindowsMediaPlayer1.playlistCollection;
????????????????????playlist?=?playlistColl.newPlaylist("Test");
????????????????????if?(recentFilesToolStripMenuItem.DropDownItems.Count?==?0)
????????????????????{
????????????????????????foreach?(string?f?in?openFileDialog1.FileNames)
????????????????????????{
????????????????????????????recentFilesToolStripMenuItem.DropDownItems.Add(f,?null,?recentFilesMenuItem_Click);
????????????????????????????RecentListcontextMenuStrip.Items.Add(f,?null,?recentFilesMenuItem_Click);
????????????????????????????WMPLib.IWMPMedia?media?=?axWindowsMediaPlayer1.newMedia(f);
????????????????????????????playlist.appendItem(media);
????????????????????????}
????????????????????}
????????????????????else
????????????????????{
????????????????????????foreach?(string?f?in?openFileDialog1.FileNames)
????????????????????????{
????????????????????????????isFileExist?=?false;
????????????????????????????WMPLib.IWMPMedia?media?=?axWindowsMediaPlayer1.newMedia(f);
????????????????????????????playlist.appendItem(media);
????????????????????????????//To?add?to?Recent?Play?List.
????????????????????????????foreach?(ToolStripItem?item?in?recentFilesToolStripMenuItem.DropDownItems)
????????????????????????????{
????????????????????????????????if?(item.Text?==?f)
????????????????????????????????{
????????????????????????????????????isFileExist?=?true;
????????????????????????????????????break;
????????????????????????????????}
????????????????????????????}
????????????????????????????//If?selected?Song?is?not?Present?in?Recent?Songs?List?previously,than?it?will?add?it.
????????????????????????????if?(!isFileExist)
????????????????????????????{
????????????????????????????????recentFilesToolStripMenuItem.DropDownItems.Add(f,?null,?recentFilesMenuItem_Click);
????????????????????????????????RecentListcontextMenuStrip.Items.Add(f,?null,?recentFilesMenuItem_Click);
????????????????????????????}
????????????????????????}
????????????????????}
????????????????????axWindowsMediaPlayer1.currentPlaylist?=?playlist;
????????????????????axWindowsMediaPlayer1.Ctlcontrols.play();
????????????????}
????????????????????//This?Will?add?selected?song?to?Recent?PlayList?and?Plays?it.
????????????????else?if?(openFileDialog1.FileNames.Length?==?1)
????????????????{
????????????????????axWindowsMediaPlayer1.URL?=?openFileDialog1.FileName;
????????????????????form1.Text?=?axWindowsMediaPlayer1.URL;
????????????????????if?(recentFilesToolStripMenuItem.DropDownItems.Count?==?0)
????????????????????{
????????????????????????recentFilesToolStripMenuItem.DropDownItems.Add(openFileDialog1.FileName,?null,?recentFilesMenuItem_Click);
????????????????????????RecentListcontextMenuStrip.Items.Add(openFileDialog1.FileName,?null,?recentFilesMenuItem_Click);
????????????????????}
????????????????????else
????????????????????{
????????????????????????foreach?(ToolStripItem?item?in?recentFilesToolStripMenuItem.DropDownItems)
????????????????????????{
????????????????????????????if?(item.Text?==?openFileDialog1.FileName)
????????????????????????????{
????????????????????????????????isFileExist?=?true;
????????????????????????????????break;
????????????????????????????}
????????????????????????}
????????????????????????if?(!isFileExist)
????????????????????????{
????????????????????????????recentFilesToolStripMenuItem.DropDownItems.Add(openFileDialog1.FileName,?null,?recentFilesMenuItem_Click);
????????????????????????????RecentListcontextMenuStrip.Items.Add(openFileDialog1.FileName,?null,?recentFilesMenuItem_Click);
????????????????????????}
????????????????????}
????????????????}
????????????????form1.Text?=?axWindowsMediaPlayer1.URL;
????????????}
????????}
????????private?void?recentFilesMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????try
????????????{
????????????????//This?Will?just?plays?the?selected?song?from?Recent?PlayList.
????????????????bool?isFileExist?=?false;
????????????????if?(File.Exists(((ToolStripItem)sender).Text))
????????????????{
????????????????????axWindowsMediaPlayer1.URL?=?((ToolStripItem)sender).Text;
????????????????????form1.Text?=?((ToolStripItem)sender).Text;
????????????????????foreach?(ToolStripItem?item?in?recentFilesToolStripMenuItem.DropDownItems)
????????????????????{
????????????????????????if?(item.Text?==?((ToolStripItem)sender).Text)
????????????????????????{
????????????????????????????isFileExist?=?true;
????????????????????????????break;
????????????????????????}
????????????????????}
????????????????????if?(!isFileExist)
????????????????????{
????????????????????????recentFilesToolStripMenuItem.DropDownItems.Add(((ToolStripItem)sender).Text,?null,?recentFilesMenuItem_Click);
????????????????????????RecentListcontextMenuStrip.Items.Add(((ToolStripItem)sender).Text,?null,?recentFilesMenuItem_Click);
????????????????????}
????????????????}
????????????}
????????????catch?{?}
????????}
????????private?void?playToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Play?the?selected?song.
????????????axWindowsMediaPlayer1.Ctlcontrols.play();
????????}
????????private?void?pauseToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?pause?the?selected?song.
????????????axWindowsMediaPlayer1.Ctlcontrols.pause();
????????}
????????private?void?stopToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Stop?the?selected?song.
????????????axWindowsMediaPlayer1.Ctlcontrols.stop();
????????}
????????private?void?exitToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Exit?Application.
????????????Application.Exit();
????????}
????????private?void?topMostToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Show?Media?Player?on?top?of?other?Windows.
????????????if?(topMostToolStripMenuItem.Checked)
????????????{
????????????????topMostToolStripMenuItem.Checked?=?false;
????????????????form1.TopMost?=?false;
????????????????form1.ShowInTaskbar?=?true;
????????????}
????????????else
????????????{
????????????????topMostToolStripMenuItem.Checked?=?true;
????????????????form1.TopMost?=?true;
????????????????form1.ShowInTaskbar?=?false;
????????????}
????????}
????????private?void?opacityToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Set?Opacity?of?the?Form.
????????????if?(opacityToolStripMenuItem.Checked)
????????????{
????????????????opacityToolStripMenuItem.Checked?=?false;
????????????????form1.Opacity?=?1;
????????????}
????????????else
????????????{
????????????????opacityToolStripMenuItem.Checked?=?true;
????????????????form1.Opacity?=?0;
????????????}
????????}
????????
????????private?void?showInTaToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Set?whether?to?display?Form?in?TaskBar?or?not.
????????????if?(showInTaToolStripMenuItem.Checked)
????????????{
????????????????showInTaToolStripMenuItem.Checked?=?false;
????????????????form1.ShowInTaskbar?=?false;
????????????}
????????????else
????????????{
????????????????showInTaToolStripMenuItem.Checked?=?true;
????????????????form1.ShowInTaskbar?=?true;
????????????}
????????}
????????private?void?axWindowsMediaPlayer1_MediaError(object?sender,?AxWMPLib._WMPOCXEvents_MediaErrorEvent?e)
????????{
????????????//Generic?Error?Message.
????????????MessageBox.Show("Error?occured");
????????}
????????private?void?showBorderToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Set?whether?Form?Border?should?be?displayed?or?not.
????????????if?(showBorderToolStripMenuItem.Checked)
????????????{
????????????????showBorderToolStripMenuItem.Checked?=?false;
????????????????form1.FormBorderStyle?=?FormBorderStyle.None;
????????????}
????????????else
????????????{
????????????????showBorderToolStripMenuItem.Checked?=?true;
????????????????form1.FormBorderStyle?=?FormBorderStyle.Sizable;
????????????}
????????????
????????}
????????private?void?notifyIcon1_DoubleClick(object?sender,?EventArgs?e)
????????{
????????????//To?Set?Visibility?of?the?Form.
????????????try
????????????{
????????????????if?(form1.Visible)
????????????????{
????????????????????form1.Visible?=?false;
????????????????????form1.Opacity?=?1;
????????????????}
????????????????else
????????????????{
????????????????????form1.Visible?=?true;
????????????????}
????????????}
????????????catch
????????????{?}
????????}
????????private?void?timer1_Tick(object?sender,?EventArgs?e)
????????{
????????????//To?Change?NotifyIcon?Image.
????????????try
????????????{
????????????????Random?r?=?new?Random();
????????????????notifyIcon1.Icon?=?new?Icon("..\\..\\Images\\"?+?r.Next(1,11)?+?".ico");
????????????}
????????????catch?{?}
????????}
????????private?void?menuStrip1_MouseHover(object?sender,?EventArgs?e)
????????{
????????????//T?Show?Form?Border.
????????????form1.FormBorderStyle?=?FormBorderStyle.Sizable;
????????}
????????private?void?Form1_Load(object?sender,?EventArgs?e)
????????{
????????????//To?Load?Recent?PlayList?Items,Default?songs?Path?from?the?File.
????????????if?(File.Exists(@"c:\Media?PlayList\List.txt"))
????????????{
????????????????StreamReader?reader?=?new?StreamReader(@"c:\Media?PlayList\List.txt");
????????????????string?fname?=?"";
????????????????while?((fname?=?reader.ReadLine())?!=?null)
????????????????{
????????????????????if?(!fname.StartsWith("----"))
????????????????????{
????????????????????????recentFilesToolStripMenuItem.DropDownItems.Add(fname,?null,?recentFilesMenuItem_Click);
????????????????????????RecentListcontextMenuStrip.Items.Add(fname,?null,?recentFilesMenuItem_Click);
????????????????????}
????????????????????else
????????????????????{
????????????????????????//Default?Songs?Path.
????????????????????????DefaultPathtoolStripTextBox.Text?=?fname.TrimStart('-');
????????????????????????//To?Load?all?songs?present?in?Default?Songs?Path.
????????????????????????DefaultPathtoolStripTextBox_KeyDown(sender,?null);
????????????????????}
????????????????}
????????????????reader.Close();
????????????}
????????????
????????}
????????private?void?Form1_FormClosed(object?sender,?FormClosedEventArgs?e)
????????{
????????????//To?Save?Recent?PlayList?Items,Default?Songs?Path?to?the?file.
????????????if?(!Directory.Exists(@"c:\Media?PlayList"))
????????????{
????????????????Directory.CreateDirectory(@"c:\Media?PlayList");
????????????}
????????????File.Delete(@"c:\Media?PlayList\List.txt");
????????????File.Create(@"c:\Media?PlayList\List.txt").Close();
????????????System.IO.StreamWriter?writer?=?new?StreamWriter(@"c:\Media?PlayList\List.txt");
????????????foreach?(ToolStripMenuItem?fItem?in?recentFilesToolStripMenuItem.DropDownItems)
????????????{
????????????????writer.WriteLine(fItem.Text);
????????????}
????????????writer.WriteLine("----"?+?DefaultPathtoolStripTextBox.Text.Trim());
????????????writer.Close();
????????????//To?Kill?the?thread?used?to?load?Default?Path?Songs.
????????????if?(execloadSongs?!=?null)
????????????{
????????????????if?(execloadSongs.IsAlive)
????????????????{
????????????????????execloadSongs.Abort();
????????????????????execloadSongs?=?null;
????????????????}
????????????}
????????}
????????private?void?optionsToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Show?Form?Border.
????????????form1.FormBorderStyle?=?FormBorderStyle.Sizable;
????????}
????????private?void?DeleteFListToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Delete?Recent?Songs?List.
????????????recentFilesToolStripMenuItem.DropDownItems.Clear();
????????????File.Delete(@"c:\Media?PlayList\List.txt");
????????}
????????private?void?axWindowsMediaPlayer1_MouseUpEvent(object?sender,?_WMPOCXEvents_MouseUpEvent?e)
????????{
????????????//To?Set?Visibility?of?Form's?Border,MenuStrip.
????????????if?(menuStrip1.Visible)
????????????{
????????????????if?(!showBorderToolStripMenuItem.Checked)
????????????????{
????????????????????menuStrip1.Visible?=?false;
????????????????????form1.FormBorderStyle?=?FormBorderStyle.None;
????????????????????axWindowsMediaPlayer1.uiMode?=?"None";
????????????????????axWindowsMediaPlayer1.windowlessVideo?=?true;
????????????????}
????????????}
????????????else
????????????{
????????????????if?(!showBorderToolStripMenuItem.Checked)
????????????????{
????????????????????menuStrip1.Visible?=?true;
????????????????????form1.FormBorderStyle?=?FormBorderStyle.Sizable;
????????????????????axWindowsMediaPlayer1.uiMode?=?"full";
????????????????????axWindowsMediaPlayer1.windowlessVideo?=?false;
????????????????}
????????????}
????????}
????????private?void?LoadAllSongs()
????????{
????????????try
????????????{
????????????????//To?Load?all?songs?present?in?Default?Songs?Path.
????????????????string?paths?=?DefaultPathtoolStripTextBox.Text.Trim();
????????????????string[]?allpaths?=?paths.Split(';');
????????????????foreach?(string?path?in?allpaths)
????????????????{
????????????????????m_AddSongs?=?new?DelegateAddSong(this.AddSong);
????????????????????if?(Directory.Exists(path))
????????????????????{
????????????????????????DirectoryInfo?dirinfo1?=?new?DirectoryInfo(Path.GetDirectoryName(path));
????????????????????????Image?img?=?Image.FromFile("..\\..\\Images\\folder.gif");
????????????????????????parentItem?=?SongsListtoolStripMenuItem;
????????????????????????form1.getDirs(dirinfo1);
????????????????????????if?(recursivelyToolStripMenuItem.Checked)
????????????????????????{
????????????????????????????LoadAllSongs(SongsListtoolStripMenuItem);
????????????????????????}
????????????????????}
????????????????}
????????????}
????????????catch?{?}
????????}
????????public?void?getDirs(DirectoryInfo?d)
????????{
????????????//To?Load?All?Directories.
????????????DirectoryInfo[]?dirs?=?d.GetDirectories("*.*");
????????????getFiles(d);
????????????foreach?(DirectoryInfo?dir?in?dirs)
????????????{
????????????????this.Invoke(m_AddSongs,?new?object[]?{?dir.FullName?});
????????????}
????????}
????????public?void?getFiles(DirectoryInfo?d)
????????{
????????????//To?Load?All?Files?in?a?Directory.
????????????FileInfo[]?files;
????????????files?=?d.GetFiles("*.*");
????????????foreach?(FileInfo?file?in?files)
????????????{
????????????????String?fileName?=?file.FullName;
????????????????this.Invoke(m_AddSongs,?new?object[]?{?file.FullName?+?"??"?});
????????????}
????????}
????????private?void?LoadAllSongs(ToolStripMenuItem?item)
????????{
????????????//Recursion?used?to?load?all?directory's?contents.
????????????foreach?(ToolStripMenuItem?item1?in?item.DropDownItems)
????????????{
????????????????if?(oldPath?!=?item1.Text)
????????????????{
????????????????????if?(item1.Image?!=?null)
????????????????????{
????????????????????????parentItem?=?item1;
????????????????????????oldPath?=?item1.Text;
????????????????????????form1.getDirs(new?DirectoryInfo(item1.Text));
????????????????????????LoadAllSongs(item1);
????????????????????}
????????????????}
????????????}
????????}
????????private?void?AddSong(string?path)
????????{
????????????try
????????????{
????????????????//To?add?a?song?to?the?Default?songs?LIst
????????????????if?(path.EndsWith("??"))
????????????????{
????????????????????//To?Add?Files?without?any?Image?in?it.
????????????????????parentItem.DropDownItems.Add(path.TrimEnd('?'),?null,?recentFilesMenuItem_Click);
????????????????}
????????????????else
????????????????{
????????????????????ToolStripMenuItem?item?=?new?ToolStripMenuItem();
????????????????????Image?img?=?Image.FromFile("..\\..\\Images\\folder.gif");
????????????????????item.Text?=?path.TrimEnd('?');
????????????????????item.Image?=?img;
????????????????????parentItem.DropDownItems.Add(item);
????????????????}
????????????}
????????????catch?{?}
????????}
????????private?void?DefaultPathtoolStripTextBox_KeyDown(object?sender,?KeyEventArgs?e)
????????{
????????????//To?Load?all?Songs,Once?Default?Songs?Path?is?Changed.
????????????if?(e?==?null)
????????????{
????????????????SongsListtoolStripMenuItem.DropDownItems.Clear();
????????????????m_loadSongs?=?new?DelegateLoadSongs(this.LoadAllSongs);
????????????????ThreadStart?ts?=?new?ThreadStart(this.m_loadSongs);
????????????????execloadSongs?=?new?Thread(ts);
????????????????execloadSongs.Start();
????????????????return;
????????????}
????????????if?(e.KeyCode?==?Keys.Enter)
????????????{
????????????????SongsListtoolStripMenuItem.DropDownItems.Clear();
????????????????m_loadSongs?=?new?DelegateLoadSongs(this.LoadAllSongs);
????????????????ThreadStart?ts?=?new?ThreadStart(this.m_loadSongs);
????????????????execloadSongs?=?new?Thread(ts);
????????????????execloadSongs.Start();
????????????}
????????}
????????private?void?recursivelyToolStripMenuItem_Click(object?sender,?EventArgs?e)
????????{
????????????//To?Set?whether?songs?should?be?loaded?recursively?in?Folders?or?not.
????????????if?(recursivelyToolStripMenuItem.Checked)
????????????{
????????????????recursivelyToolStripMenuItem.Checked?=?false;
????????????}
????????????else
????????????{
????????????????recursivelyToolStripMenuItem.Checked?=?true;
????????????}
????????}
????????private?void?notifyIcon1_MouseClick(object?sender,?MouseEventArgs?e)
????????{
????????????if?(e.Button?==?MouseButtons.Middle)
????????????{
????????????????//To?change?the?Player?status?on?Click?on?NotifyIcon?using?Middle?Mouse's?Button.
????????????????if?(axWindowsMediaPlayer1.status?!=?"")
????????????????{
????????????????????if?(axWindowsMediaPlayer1.status.ToLower().StartsWith("playing"))
????????????????????{
????????????????????????axWindowsMediaPlayer1.Ctlcontrols.pause();
????????????????????}
????????????????????else?if?(axWindowsMediaPlayer1.status.ToLower().StartsWith("paused"))
????????????????????{
????????????????????????axWindowsMediaPlayer1.Ctlcontrols.play();
????????????????????}
????????????????}
????????????}
????????}
????}
}
下面是整個(gè)工程,?
http://files.cnblogs.com/OceanChen/WindowsMediaPlayer.rar
注意:在運(yùn)行工程之前,需要先添加AxInterop.WMPLib.dll,Interop.MediaPlayer.dll,Interop.WMPLib.dll引用
轉(zhuǎn)載于:https://www.cnblogs.com/OceanChen/archive/2009/03/06/1404685.html
總結(jié)
以上是生活随笔為你收集整理的【原】基于Windows Media Player, 写自己的播放器【有源码,可下载整个工程】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab中S-函数的编写
- 下一篇: 程序员必须知道的HTML常用代码有哪些?