2013-03-30 16 views
10

My przeglądarki internetowej:Przeglądarka internetowa wyłączyć wszystkie wyjścia audio - z radia internetowego YouTube

XAML:

//... 
xmlns:my="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" 
//... 
<my:WindowsFormsHost Name="windowsFormsHost"/> 

kod za C#:

System.Windows.Forms.WebBrowser Browser = new System.Windows.Forms.WebBrowser(); 
windowsFormsHost.Child = Browser; 

Moje pytanie brzmi, jak wyłączyć wszystkie wyjścia audio .

Znalazłem to:

C#:

private const int Feature = 21; //FEATURE_DISABLE_NAVIGATION_SOUNDS 
private const int SetFeatureOnProcess = 0x00000002; 

[DllImport("urlmon.dll")] 
[PreserveSig] 
[return: MarshalAs(UnmanagedType.Error)] 
static extern int CoInternetSetFeatureEnabled(int featureEntry, 
    [MarshalAs(UnmanagedType.U4)] int dwFlags, 
    bool fEnable); 

grzywny, ale ten kod wyłącz tylko dźwięk "kliknięcia", więc jej rodzaju bezużyteczny w tej sprawie.

Po prostu chcę z mojej aplikacji 100% wyciszenia, żadnych dźwięków.

Przeczytałem, że w tej przeglądarce internetowej trzeba to zrobić za pomocą Windows Sounds, ale nie mogę naprawdę wierzyć, że nie mogę tego zrobić w kodzie.

Odpowiedz

9

Oto, jak możesz to zrobić z łatwością. Nie dotyczy to jednak WebBrowser, ale robi to, o co prosiłeś: Po prostu chcę z mojej aplikacji 100% wyciszenia, bez dźwięków.

using System; 
using System.Runtime.InteropServices; 
using System.Windows.Forms; 

namespace WinformsWB 
{ 
    public partial class Form1 : Form 
    { 
     [DllImport("winmm.dll")] 
     public static extern int waveOutGetVolume(IntPtr h, out uint dwVolume); 

     [DllImport("winmm.dll")] 
     public static extern int waveOutSetVolume(IntPtr h, uint dwVolume); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      // save the current volume 
      uint _savedVolume; 
      waveOutGetVolume(IntPtr.Zero, out _savedVolume); 

      this.FormClosing += delegate 
      { 
       // restore the volume upon exit 
       waveOutSetVolume(IntPtr.Zero, _savedVolume); 
      }; 

      // mute 
      waveOutSetVolume(IntPtr.Zero, 0); 
      this.webBrowser1.Navigate("http://youtube.com"); 
     } 
    } 
} 
+2

Niestety brakowało mi części w pytaniu OP o wyciśnięciu całej aplikacji; Zaproponowałem nagrodę w nadziei na rozwiązanie specyficzne dla kontroli przeglądarki (ponieważ moja aplikacja ma inne źródła dźwięku). Nie wiedziałbyś, że bardziej ukierunkowana metoda byłaby dla ciebie odpowiednia? Tak czy inaczej, to * nie * dość dobrze odpowiada na pytanie OP. – JYelton

+0

Spoglądam na to. Nie jestem pewien, czy da się to zrobić. – Noseratio

+0

Nie sądzę, że to możliwe. Próbowałem wysyłać [APPCOMMAND_VOLUME_MUTE] (http://stackoverflow.com/questions/154089/mute-windows-volume-using-c-sharp) do całego drzewa okna dziecka 'WebBrowser', a najlepszym wynikiem był globalne wyciszenie. – Noseratio

0

Można spróbować także użyć DISPID_AMBIENT_DLCONTROL

DLCTL_DLIMAGES, DLCTL_VIDEOS i DLCTL_BGSOUNDS: zdjęcia, filmy i dźwięki tła zostaną pobrane z serwera i wyświetlone lub odtworzone, jeśli te flagi są zestaw. Nie będą one pobierane i wyświetlane, jeśli flagi nie są ustawione.

Powiązane problemy