How to disable WebBrowser control’s ‘click sound’

0.00 avg. rating (0% score) - 0 votes

Depending on system preferences (in Control Panel/Sounds), the .NET WebBrowser control (just like Internet Explorer) may produce a click sound when certain events are done to it (e.g. back/forward navigation, DocumentText changes, etc.)

To avoid this:

Method 1: Do not changes the web browser document text via the DocumentText property. So instead of this:

webBrowser1.DocumentText = “<h1>Hello, world!</h1>”;

try this:

webBrowser1.Document.OpenNew(true);
webBrowser1.Document.Write(“<h1>Hello, world!</h1>”);

Side-effects: This cause the web browser to steal focus from the active application when OpenNew is called!

Method 2: Use the Document Object Model (DOM)’s InnerHTML property to change the text.

Me.WebSMSView.Document.DomDocument.Body.InnerHTML = text

This doesn’t have any side effects as method 1, and is preferable, but requires the use of Reflection in C#, and Option Strict Off in VB.NET

Method 3: Change system sound preferences from code. Disable it when the application has focus and then re-enable when the application closes/loses focus.

WebClickSound.cs: class to enable/disable the click sound

class WebClickSound
{
/// <summary>
/// Enables or disables the web browser navigating click sound.
/// </summary>
public static bool Enabled
{
get
{
RegistryKey key = Registry.CurrentUser.OpenSubKey(@”AppEventsSchemesAppsExplorerNavigating.Current”);
string keyValue = (string)key.GetValue(null);
return String.IsNullOrEmpty(keyValue) == false && keyValue != “”””;
}
set
{
string keyValue;

if (value)
{
keyValue = “%SystemRoot%\Media\”;
if (Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor > 0)
{
// XP
keyValue += “Windows XP Start.wav”;
}
else if (Environment.OSVersion.Version.Major == 6)
{
// Vista
keyValue += “Windows Navigation Start.wav”;
}
else
{
// Don’t know the file name so I won’t be able to re-enable it
return;
}
}
else
{
keyValue = “”””;
}

// Open and set the key that points to the file
RegistryKey key = Registry.CurrentUser.OpenSubKey(@”AppEventsSchemesAppsExplorerNavigating.Current”, true);
key.SetValue(null, keyValue, RegistryValueKind.ExpandString);
isEnabled = value;
}
}
}

Main form: use the above code in these 3 events: Activated, Deactivated and FormClosing

private void Form1_Activated(object sender, EventArgs e)
{
// Disable the sound when the program has focus
WebClickSound.Enabled = false;
}

private void Form1_Deactivate(object sender, EventArgs e)
{
// Enable the sound when the program is out of focus
WebClickSound.Enabled = true;
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// Enable the sound on app exit
WebClickSound.Enabled = true;
}

This works but is probably an overkill for this task.

Reference:

How To Disable WebBrowser ‘Click Sound’ in your app only, http://stackoverflow.com/questions/10456/howto-disable-webbrowser-click-sound-in-your-app-only

0.00 avg. rating (0% score) - 0 votes
ToughDev

ToughDev

A tough developer who likes to work on just about anything, from software development to electronics, and share his knowledge with the rest of the world.

One thought on “How to disable WebBrowser control’s ‘click sound’

  • June 30, 2013 at 3:15 am
    Permalink

    Thank you! Very usefull artikle!

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>