【问题标题】:How do I tell if the master volume is muted?如何判断主音量是否已静音?
【发布时间】:2010-12-30 02:21:32
【问题描述】:

我正在使用以下方法将计算机上的主音频静音/取消静音。现在,我正在寻找一种方法来确定静音状态。在 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);

【问题讨论】:

  • 检查这个问题stackoverflow.com/questions/294292,在接受的答案中存在一个名为IsMuted的方法
  • 是的,这似乎是答案。如 cmets 中所述,它仅在启用兼容模式时才有效。

标签: c# winapi audio mute


【解决方案1】:

您好,偶然发现了这个老话题,但正在解决完全相同的问题。

我使用以下方法解决了:

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);

静音并不总是使音频静音,它是一个切换 - 但如果您确保首先调用“取消静音”,您应该是黄金。

最好的问候 库尔特

【讨论】:

  • 不错。那是相当聪明的。我将它用于我的小型开源项目,以在 Windows 锁定时使系统音量静音。 github.com/dthompsonza/MuteOnLock
  • 这实际上不是答案。问题是“我如何判断主音量是否静音?”,这里没有回答。
  • 这从字面上回答了这个问题,但它需要您修改状态才能知道它。这个解决方案的答案总是“不”。从那里您可以选择是否更改它。当然,这只对某些用例有用。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    以上以 cmets 计入 RRUZ。请参阅 stackoverflow.com/questions/294292。唯一的问题是您需要兼容模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多