2012-03-04 4 views
1

Я пытаюсь отключить динамик ПК от моего приложения консоли C#. Я пробовал код, предложенный on this site, и он не влияет на громкость на моей машине. Мне нужен код для работы с Win7, и я предполагаю, что код работает только на XP. Я также попытался это:Отключить систему от кода

[DllImport("winmm.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] 
public static extern int waveOutSetVolume(IntPtr uDeviceID, int dwVolume); 

waveOutSetVolume(IntPtr.Zero, 0); 

Но когда метод waveOutSetVolume называется, система не отключается, и никакой ошибки не выбрасываются. Есть ли способ отключить ПК от C# в Win7?

+0

вы хотите для вашего приложения или только для всей системы заглушены? –

+0

Вызовы Windows API не генерируют исключения. Попробуйте проверить Marshal.GetLastWin32Error(); – luksan

+0

@JohnRiselvato - Вся система. – XSL

ответ

2

Я считаю, что this - это то, что вы ищете. это был тест с окнами 7, а также этот вопрос, как было задано на SO before. Что, вероятно, поможет вам получить то, что вы ищете.

+1

Спасибо. К сожалению, DLL слишком раздута для моих нужд, и источник довольно сложный, поэтому я сначала попытаюсь выбрать его, так как мне просто нужен объемный аспект. – XSL

+0

Я думаю, это то, с чем вы идете? –

+0

Да, я не мог конденсировать его, поэтому я просто использовал библиотеку как есть. – XSL

0

Вы не можете отключить динамик ПК. Это основное устройство, не имеет микшера и т. Д. Из этого получается постоянный объем.

Что вы показываете в своем примере - это код для управления микшером вашей звуковой карты, который является совершенно другим устройством.

+1

Пример Джона Реселвато, написанный на моей машине, и я полагаю, что он управляет микшером звуковой карты. Это то, что я хотел бы достичь (хотя образец размещен очень раздутый и несколько сложный, чтобы рассекать только часть объема). – XSL

+0

@SSL, О, я думал, что вы хотите управлять динамиком ПК. Да, API winmm имеет довольно много. – Brad

0

Вы можете использовать расширение для AudioSwitcher. Просто установите его в качестве пакета NuGet с помощью диспетчера пакетов консоли:

Install-Package AudioSwitcher.AudioApi.CoreAudio

Он имеет такие методы, как Mute, ToggleMute и Volume свойства, так что вы можете установить значение, которое вы хотите.

Вот пример:

using (var audio = new CoreAudioController()) 
{ 
    audio.DefaultPlaybackDevice.Volume = 50; 
}