这是之前一个项目用到的内容,整理一下,发布出来。
控制系统的windows media player播放、暂停等等,无论新旧版本,都支持。
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace WMPController
{
class WMPController
{
#region 定义WM_COMMAND消息
//当用户从菜单中选择一条命令,
//一个控件向它的父窗口发送通知消息,
//或者快捷键被按下时,
//将发送WM_COMMAND消息
private const int WM_COMMAND = 0x111;//&H,VB表示十六进制;0x,C#表示十六进制
private const int WMP_PLAY = 0x4978;
private const int WMP_STOP = 0x4979;
private const int WMP_PLAY_FAST = 0x4992;
private const int WMP_PLAY_NORMAL = 0x4993;
private const int WMP_PLAY_SLOW = 0x4994;
private const int WMP_PREV = 0x497A;
private const int WMP_NEXT = 0x497B;
private const int WMP_FAST_FORWARD = 0x497D;
private const int WMP_SHUFFLE = 0x499A;
private const int WMP_REPEAT = 0x499B;
private const int WMP_VOLUME_UP = 0x497F;
private const int WMP_VOLUME_DOWN = 0x4980;
private const int WMP_VOLUME_MUTE = 0x4981;
private const int WM_GETTEXT = 0x000D;
#endregion
#region 定义WM_APPCOMMAND消息
private const int WM_APPCOMMAND = 0x0319;
private const int APPCOMMAND_BROWSER_BACKWARD = 1;
private const int APPCOMMAND_BROWSER_FORWARD = 2;
private const int APPCOMMAND_BROWSER_REFRESH = 3;
private const int APPCOMMAND_BROWSER_STOP = 4;
private const int APPCOMMAND_BROWSER_SEARCH = 5;
private const int APPCOMMAND_BROWSER_FAVORITES = 6;
private const int APPCOMMAND_BROWSER_HOME = 7;
private const int APPCOMMAND_VOLUME_MUTE = 8;
private const int APPCOMMAND_VOLUME_DOWN = 9;
private const int APPCOMMAND_VOLUME_UP = 10;
private const int APPCOMMAND_MEDIA_NEXTTRACK = 11;
private const int APPCOMMAND_MEDIA_PREVIOUSTRACK = 12;
private const int APPCOMMAND_MEDIA_STOP = 13;
private const int APPCOMMAND_MEDIA_PLAY_PAUSE = 14;
private const int APPCOMMAND_LAUNCH_MAIL = 15;
private const int APPCOMMAND_LAUNCH_MEDIA_SELECT = 16;
private const int APPCOMMAND_LAUNCH_APP1 = 17;
private const int APPCOMMAND_LAUNCH_APP2 = 18;
private const int APPCOMMAND_BASS_DOWN = 19;
private const int APPCOMMAND_BASS_BOOST = 20;
private const int APPCOMMAND_BASS_UP = 21;
private const int APPCOMMAND_TREBLE_DOWN = 22;
private const int APPCOMMAND_TREBLE_UP = 23;
private const int APPCOMMAND_MICROPHONE_VOLUME_MUTE = 24;
private const int APPCOMMAND_MICROPHONE_VOLUME_DOWN = 25;
private const int APPCOMMAND_MICROPHONE_VOLUME_UP = 26;
private const int APPCOMMAND_HELP = 27;
private const int APPCOMMAND_FIND = 28;
private const int APPCOMMAND_NEW = 29;
private const int APPCOMMAND_OPEN = 30;
private const int APPCOMMAND_CLOSE = 31;
private const int APPCOMMAND_SAVE = 32;
private const int APPCOMMAND_PRINT = 33;
private const int APPCOMMAND_UNDO = 34;
private const int APPCOMMAND_REDO = 35;
private const int APPCOMMAND_COPY = 36;
private const int APPCOMMAND_CUT = 37;
private const int APPCOMMAND_PASTE = 38;
private const int APPCOMMAND_REPLY_TO_MAIL = 39;
private const int APPCOMMAND_FORWARD_MAIL = 40;
private const int APPCOMMAND_SEND_MAIL = 41;
private const int APPCOMMAND_SPELL_CHECK = 42;
private const int APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE = 43;
private const int APPCOMMAND_MIC_ON_OFF_TOGGLE = 44;
private const int APPCOMMAND_CORRECTION_LIST = 45;
private const int APPCOMMAND_MEDIA_PLAY = 46;
private const int APPCOMMAND_MEDIA_PAUSE = 47;
private const int APPCOMMAND_MEDIA_RECORD = 48;
private const int APPCOMMAND_MEDIA_FAST_FORWARD = 49;
private const int APPCOMMAND_MEDIA_REWIND = 50;
private const int APPCOMMAND_MEDIA_CHANNEL_UP = 51;
private const int APPCOMMAND_MEDIA_CHANNEL_DOWN = 52;
#endregion
#region 引入FindWindow、SendMessage等windows函数
// FindWindow 函数可找到一个类名、窗口名
// 与指定字符串相匹配的最上层的窗口的句柄
// 该函数不搜索子窗口.
// 该函数的搜索过程中不区分大小写.
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string className, string windowName);
// SendMessage 函数给一个或几个窗口发送特定的消息
// 特定的窗口通过该函数调用程序段,直到处理消息后返回.
[DllImport("User32.dll")]
private static extern int SendMessage(
int hWnd, // 目标窗口句柄
int Msg, // 消息
int wParam, // 消息的前一个附加参数
int lParam // 消息的第二个附加参数
);
[DllImport("User32.dll")]
private static extern int SendMessage(
int hWnd, // 目标窗口句柄
int Msg, // 消息
int wParam, // 消息的前一个附加参数
StringBuilder sb // 消息的第二个附加参数
);
[DllImport("user32.dll")]
private static extern int GetWindowText(int hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindowEx(int hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
#endregion
private static int WMPGetHandle()
{
return FindWindow("WMPlayerApp", "Windows Media Player"); //windows media player
}
//暂停
public static void Pause()
{
int playerHandle = WMPGetHandle();
if (playerHandle != 0)
{
SendMessage(playerHandle, WM_APPCOMMAND, 0x00000000, APPCOMMAND_MEDIA_PAUSE << 16);
}
}
//播放
public static void Play()
{
int playerHandle = WMPGetHandle();
if (playerHandle != 0)
{
SendMessage(playerHandle, WM_APPCOMMAND, 0x00000000, APPCOMMAND_MEDIA_PLAY << 16);
}
}
/// <summary>
/// 还有些命令,自己去添加吧
/// </summary>
/// <param name="action"></param>
public static void ControlWMP(ControlAction action)
{
int command = 0;
switch (action)
{
case ControlAction.Next:
command = WMP_NEXT;
break;
case ControlAction.PlayPause: //播放/暂停两个状态的切换
command = WMP_PLAY;
break;
case ControlAction.PlayFast:
command = WMP_PLAY_FAST;
break;
case ControlAction.Prev:
command = WMP_PREV;
break;
case ControlAction.Repeat: // Repeat
command = WMP_REPEAT;
break;
case ControlAction.Shuffle: // shuffle
command = WMP_SHUFFLE;
break;
case ControlAction.Stop: // stop
command = WMP_STOP;
break;
case ControlAction.VolumeDown: // volume down
command = WMP_VOLUME_DOWN;
break;
case ControlAction.VolumeUp: // volume up
command = WMP_VOLUME_UP;
break;
case ControlAction.VolumeMute: // mute/sound
command = WMP_VOLUME_MUTE;
break;
}
int playerHandle = WMPGetHandle();
if (playerHandle != 0)
{
SendMessage(playerHandle, WM_COMMAND, command, 0);
}
}
}
public enum ControlAction
{
PlayPause,
Stop,
VolumeUp,
VolumeDown,
VolumeMute,
Shuffle,
Repeat,
Next,
Prev,
PlayFast
}
}