Ktoś wie, jak programowo wyciszyć wolumin systemu Windows XP przy użyciu C#?Wycisz głośność systemu Windows za pomocą C#
Odpowiedz
Będziesz prawdopodobnie chcesz użyć komendy MCI: http://msdn.microsoft.com/en-us/library/ms709461(VS.85).aspx
należy dodać, że podczas gdy ten daje dobrą ogólną kontrolę nad mikserów wejściowych i wyjściowych w systemie Windows, może masz jakieś problemy z robieniem szczegółowe kontrole, jak ustawienie wzmocnienia mikrofonu itp.
Aha, jeśli jesteś na Vista, to po prostu zapomnij. To zupełnie inny model.
Można użyć P/Invoke, jak wyjaśniono tutaj: http://www.microsoft.com/indonesia/msdn/pinvoke.aspx. W rzeczywistości wykonuje czynności w Zadaniu 1: Wycisz i Włącz dźwięk w pobliżu góry.
Natknąłem się na this project, które mogą być interesujące, jeśli używasz systemu Vista.
Stwierdzenie to dla 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);
a następnie wykorzystać tę linię, aby wyciszyć/wyłączyć wyciszenie dźwięku.
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr) APPCOMMAND_VOLUME_MUTE);
Pracowałem z przyjemnością w XP dzięki. Jednak używam WPF, więc nie ma tego.Handle. Zamiast tego: 'public static void ToggleMute (uchwyt IntPtr) { SendMessageW (uchwyt, WM_APPCOMMAND, uchwyt, (IntPtr) APPCOMMAND_VOLUME_MUTE); } ' w WPF Window: ' VolumeXP.ToggleMute (nowa WindowInteropHelper (this) .Handle); ' –
To ... pracował na Windows 7 - ale jestem w bibliotece, który jest uruchamiany w tle - nie w niczego, co kiedykolwiek będzie miało okno - próbuję wyciszyć inne okno - działa to - ale niezależnie od tego, co przekazuję do obsługi, (uchwyt okna innej aplikacji itp.), po prostu wycisza wielkość systemu głównego ... – BrainSlugs83
Dlaczego używasz '0x80000'? 'APPCOMMAND_VOLUME_MUTE' jest zdefiniowane jako' 8'? Jednak gdy używam '8', to się nie powiedzie, ale kiedy używam twojego' 0x80000', to działa. To jest dziwne. – Noitidart
Co można użyć dla Windows Vista/7 i 8 prawdopodobnie zbyt:
Można użyć NAudio (http://naudio.codeplex.com/releases/view/79035). Pobierz najnowszą wersję. Wyodrębnij pliki DLL i odwołaj się do biblioteki DLL NAudio w swoim projekcie C#.
Następnie dodaj następujący kod, aby przejrzeć wszystkie dostępne urządzenia audio i wyciszyć je, jeśli to możliwe.
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
}
Dziękuję. Ta biblioteka działała, gdy wszystkie inne, które wypróbowałem, zawiodły. Mój problem był podobny do tego, ale nie do końca taki sam. To bardzo dobre znalezisko. Chciałbym móc głosować na ciebie więcej niż raz. – David
Dzięki za przegłosowanie i opinie. Szukałem trochę czasu, zanim znalazłem łatwy sposób na wyciszenie dźwięku. Dlatego pomyślałem, rozpowszechniając wiedzę na temat niektórych pytań stackoverflow :) Cieszę się, że pomógł komuś. –
Zobacz How to programmatically mute the Windows XP Volume using C#?
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;
}
}
Czy jest możliwe w Vista/Win7? – meir
W Vista i wyżej musisz użyć IAudioEndpointVolume. –