我希望仅为我的WPF应用程序静音,并按用户设置的方式离开整个调音台。
我可以使用以下代码将系统范围的声音静音/取消静音。
但是我注意到当我的应用程序正在运行并且正在播放声音时,我的应用程序出现在Windows调音台中,我可以通过调音台的UI将我的应用静音/取消静音,这样我的应用程序似乎应该可以它以编程方式。
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);
答案 0 :(得分:5)
这适用于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);
}
答案 1 :(得分:0)
如果你打电话来播放声音,你可以让这些功能检查一些资源,以指示用户是否选择静音,例如:
public void PlaySoundXYZ()
{
if(!MuteSource.IsMuted())
{
// play sound.
}
}