내 앱에 플러그인 시스템이 있는데이 플러그인이 소리를 내지 않도록하고 싶습니다. 플러그인으로 오버라이드 할 수없는 완벽한 솔루션 일 필요는 없습니다.전체 응용 프로그램에서 사운드를 전체적으로 끄려면 어떻게합니까?
편집 : 사운드가 대답을 플러그인
에 MediaElement를 통해감사 재생됩니다!
내 앱에 플러그인 시스템이 있는데이 플러그인이 소리를 내지 않도록하고 싶습니다. 플러그인으로 오버라이드 할 수없는 완벽한 솔루션 일 필요는 없습니다.전체 응용 프로그램에서 사운드를 전체적으로 끄려면 어떻게합니까?
편집 : 사운드가 대답을 플러그인
에 MediaElement를 통해감사 재생됩니다!
Window의 모든 MediaElements에서 사운드를 비활성화하는 것은 쉽습니다. 적용되는 모든 MediaElement에서 IsMuted = false를 적용하는 연결된 상속 된 속성을 만듭니다. 속성은 다음과 같이 사용됩니다 :
public class Silencer : DependencyObject
{
// Silence
public static bool GetSilence(DependencyObject obj) { return (bool)obj.GetValue(SilenceProperty); }
public static void SetSilence(DependencyObject obj, bool value) { obj.SetValue(SilenceProperty, value); }
public static readonly DependencyProperty SilenceProperty = DependencyProperty.RegisterAttached("Silence", typeof(bool), typeof(Silencer), new FrameworkPropertyMetadata
{
Inherits = true,
PropertyChangedCallback = (obj, e) =>
{
var element = obj as MediaElement; if(element==null) return;
if((bool)e.NewValue)
{
element.SetBinding(UnmuteDetectedProperty, new Binding("IsMuted") { RelativeSource = RelativeSource.Self });
element.IsMuted = true;
}
else
{
element.ClearValue(UnmuteDetectedProperty);
element.IsMuted = false;
}
}
});
// UnmuteDetected
public static readonly DependencyProperty UnmuteDetectedProperty = DependencyProperty.RegisterAttached("UnmuteDetected", typeof(bool), typeof(Silencer), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
((MediaElement)obj).IsMuted = GetSilence(obj);
}
});
}
그것이 작동하는 방법 :
여기<Window my:Silencer.Silence="true" ...>
...
</Window>
는 구현 될 것이다 어떻게 소음기가 창에 true로 설정하면, 모든 자손은 속성 변경을 얻을 공고. 여기에는 이미 윈도우에 있거나 나중에 윈도우에 추가되는 모든 MediaElement가 포함됩니다. 속성 변경 알림을 통해 MediaElement의 UnmuteDetected 속성이 IsMuted에 바인딩되고 IsMuted가 true로 설정됩니다. 플러그인의 코드가 IsMuted = false로 설정하면 두 번째 PropertyChangedCallback이 트리거되어 다시 True로 설정됩니다.
MediaElements에만 해당되며 비주얼 트리에 추가 된 경우에만 작동합니다.
이상을 차단하는 것은 단지 MediaElement에이
응용 프로그램에서 모든 소리를 차단하는보다 포괄적 인 방법 소리를하는 것은 비스타의 core audio APIs (윈도우 7도 가능), 특히 ISimpleAudioVolume 인터페이스입니다. 이것은 PlaySound() 및 출력을 시스템 알림 오디오 세션으로 라우팅하는 다른 기술을 제외하고 응용 프로그램이 오디오를 생성 할 수있는 거의 모든 방법을 차단하는 데 사용할 수 있습니다. 시스템 알림 세션으로 지정된 소리를 차단하려면 기본 코드를 사용하여 Windows 호출을 차단해야합니다.
자세한 답변 해 주셔서 감사합니다. –