2010-07-10 6 views

답변

2

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 호출을 차단해야합니다.

+0

자세한 답변 해 주셔서 감사합니다. –

관련 문제