gpt4 book ai didi

c# - 仅针对我的应用将 SoundPlayer 静音

转载 作者:行者123 更新时间:2023-12-02 22:19:54 30 4
gpt4 key购买 nike

我希望仅为我的 WPF 应用程序静音,并让整个混音器保持用户设置的状态。

我可以使用以下代码使系统范围内的声音静音/取消静音。

但是我注意到当我的应用程序正在运行并且正在播放声音时,我的应用程序会出现在 Windows 混音器中,我可以通过混音器的用户界面将我的应用程序静音/取消静音,所以我的应用程序似乎应该可以这样做它以编程方式。

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

SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr) APPCOMMAND_VOLUME_MUTE);

最佳答案

这适用于 Vista/7/8,其中每个应用程序都有音量控制

DllImport("winmm.dll")]
private static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

[DllImport("winmm.dll")]
private static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);

/// <summary>
/// Returns volume from 0 to 10
/// </summary>
/// <returns>Volume from 0 to 10</returns>
public static int GetVolume()
{
uint CurrVol = 0;
waveOutGetVolume(IntPtr.Zero, out CurrVol);
ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
int volume = CalcVol / (ushort.MaxValue / 10);
return volume;
}

/// <summary>
/// Sets volume from 0 to 10
/// </summary>
/// <param name="volume">Volume from 0 to 10</param>
public static void SetVolume(int volume)
{
int NewVolume = ((ushort.MaxValue / 10) * volume);
uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}

关于c# - 仅针对我的应用将 SoundPlayer 静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14463655/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com