在Windows中使用WMPLib控制C#中的卷

故事:我正在写一个由声音控制的音乐播放器。 以前这个项目使用winamp音乐 – 我想放弃。 我想将语音控制与音乐播放器集成。 问题是,当更改媒体播放器对象的音量属性(mplayer.settings.volume = 5;)时,它会更改MASTER音量。 这意味着在播放音乐时,任何语音反馈都将完全听不到。 你开车时不酷。 如果我启动Windows媒体播放器,我可以在不影响主音量的情况下改变音乐的音量。所以必须有一种方法。

我想过可能会发现那里是否有一个均衡器控件,但是关于它的文档是可悲的。 – 无论是那个还是我的google-fu都很弱。

那么有谁知道如何用Windows媒体播放器控制分离主音量和音乐音量?

详情:目标机器是XP(sp3),我相信.NET 4.0。 此外,这是一个控制台应用程序。

在此先感谢您的帮助

我发现这样做的唯一方法是使用Interop和WM_APPCOMMAND窗口消息:

private const int APPCOMMAND_VOLUME_MUTE = 0x80000; private const int WM_APPCOMMAND = 0x319; private const int APPCOMMAND_MICROPHONE_VOLUME_UP = 26 * 65536; private const int APPCOMMAND_MICROPHONE_VOLUME_DOWN = 25 * 65536; [DllImport("user32.dll")] public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); private void SetMicVolume() { SendMessageW(new WindowInteropHelper(this).Handle, WM_APPCOMMAND, new (IntPtr)APPCOMMAND_MICROPHONE_VOLUME_UP);//or _DOWN } 

我已经在Windows Media Player VER 12中对此进行了测试,因此我猜对于大多数人来说,比使用“user32.dll”更简单:

 private static WMPLib.WindowsMediaPlayer Player; public static void VolumeUp() { if (Player.settings.volume < 90) { Player.settings.volume = (Player.settings.volume + 10); } } public static void VolumeDown() { if (Player.settings.volume > 1) { Player.settings.volume = (Player.settings.volume - (Player.settings.volume / 2)); } } 

毫无疑问,这已经有一段时间了。 它不会更改主音量,只会更改媒体播放器音量。 Windows Master Volume保持不变。

希望这可以帮助那些不限于XP SP3的人。