4

我正在使用以下内容将计算机上的主音频静音/取消静音。现在,我正在寻找一种方法来确定静音状态。在 C# 中是否有同样简单的方法可以做到这一点?

    private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
    private const int WM_APPCOMMAND = 0x319;
    [DllImport("user32.dll")]
    public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
4

3 回答 3

10

嗨,刚刚偶然发现了这个老话题,但遇到了完全相同的问题。

我使用以下方法解决了:

using System.Runtime.InteropServices;

...

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);


private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int APPCOMMAND_VOLUME_UP = 0xA0000;
private const int APPCOMMAND_VOLUME_DOWN = 0x90000;               
private const int WM_APPCOMMAND = 0x319;        

...

// mute (toggle)
SendMessage(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE);


// unmute
SendMessage(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_UP);
SendMessage(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_DOWN);

Mute will not always mute the audio, it's a toggle - but if you make sure to call "unmute" first you should be golden.

Best regards Kurt

于 2013-06-18T06:50:49.010 回答
0

查看以下教程。我从未在 C#(或任何其他语言)中使用过 Mixer,所以我假设它们在 P/Invoking Win32 API 中是正确的,并且它们没有重新发明轮子。您可以下载示例,我认为 GetMixer() 方法可以满足您的要求。

于 2010-12-30T02:47:39.070 回答
0

在上面的评论中感谢 RRUZ。请参阅 stackoverflow.com/questions/294292。唯一的问题是您需要兼容模式。

于 2010-12-31T01:34:42.987 回答