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

本文关键字:控制 Windows WMPLib | 更新日期: 2023-09-27 18:23:46

故事:我正在写一个由语音控制的音乐播放器。以前,这个项目使用winamp制作音乐——我想取消它。我想把语音控制和音乐播放器结合起来。问题是,当更改媒体播放器对象的音量属性(mplayer.settings.volume=5;)时,它会更改MASTER音量。这意味着在播放音乐时,任何语音反馈都将完全听不见。你开车的时候不太酷。如果我打开windows媒体播放器,我可以在不影响主音量的情况下更改音乐音量。。所以必须有办法。

我曾想过也许会发现是否有均衡器控制埋在里面,但有关这方面的文件很可怜。——要么是这样,要么就是我的谷歌傅很弱。

有人知道我会如何用windows媒体播放器控制来分离主音量和音乐音量吗?

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

提前感谢的任何帮助

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

我已经在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主卷处于单独状态。

希望这能帮助其他不局限于XP SP3的人。

我找到的唯一方法是使用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
    }