C# Windows Media Player Controller

这是之前一个项目用到的内容,整理一下,发布出来。
控制系统的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 } }
原文地址:https://www.cnblogs.com/AlvinLiang/p/2660253.html