Отключение звука Windows с помощью С#
Кто-нибудь знает, как программно отключить Windows XP Volume с помощью С#?
Ответы
Ответ 1
Объявить это для P/Invoke:
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);
Ответ 2
Что вы можете использовать для Windows Vista/7 и, возможно, 8 тоже:
Вы можете использовать NAudio (http://naudio.codeplex.com/releases/view/79035). Загрузите последнюю версию. Извлеките библиотеки DLL и свяжите DLL NAudio в проекте С#.
Затем добавьте следующий код для повторения всех доступных аудиоустройств и приглушите его, если это возможно.
try
{
//Instantiate an Enumerator to find audio devices
NAudio.CoreAudioApi.MMDeviceEnumerator MMDE = new NAudio.CoreAudioApi.MMDeviceEnumerator();
//Get all the devices, no matter what condition or status
NAudio.CoreAudioApi.MMDeviceCollection DevCol = MMDE.EnumerateAudioEndPoints(NAudio.CoreAudioApi.DataFlow.All, NAudio.CoreAudioApi.DeviceState.All);
//Loop through all devices
foreach (NAudio.CoreAudioApi.MMDevice dev in DevCol)
{
try
{
//Show us the human understandable name of the device
System.Diagnostics.Debug.Print(dev.FriendlyName);
//Mute it
dev.AudioEndpointVolume.Mute = true;
}
catch (Exception ex)
{
//Do something with exception when an audio endpoint could not be muted
}
}
}
catch (Exception ex)
{
//When something happend that prevent us to iterate through the devices
}
Ответ 3
Я столкнулся с этот проект, который может представлять интерес, если вы используете Vista.
Ответ 4
См. Как программно отключить Громкость Windows XP с помощью С#?
void SetPlayerMute(int playerMixerNo, bool value)
{
Mixer mx = new Mixer();
mx.MixerNo = playerMixerNo;
DestinationLine dl = mx.GetDestination(Mixer.Playback);
if (dl != null)
foreach (MixerControl ctrl in dl.Controls)
if (ctrl is MixerMuteControl)
{
((MixerMuteControl)ctrl).Value = (value) ? 1 : 0;
break;
}
}
Ответ 5
Возможно, вы захотите использовать команды MCI:
http://msdn.microsoft.com/en-us/library/ms709461(VS.85).aspx
Я должен добавить, что, хотя это даст вам хороший общий контроль над входными и выходными микшерами в окнах, вы можете столкнуться с трудностями при выполнении подробных элементов управления, таких как настройка микрофона и т.д.
О, и если вы на Vista, тогда просто забудьте об этом. Это совершенно другая модель.
Ответ 6
Вы можете использовать P/Invoke, как описано здесь: http://www.microsoft.com/indonesia/msdn/pinvoke.aspx. На самом деле он выполняет шаги в Задаче 1: Отключить звук и включить звук вверху.