Cómo deshabilitar 'Click Sound' de WebBrowser solo en su aplicación

El 'sonido de clic' en cuestión es en realidad una preferencia de todo el sistema, por lo que solo quiero que esté deshabilitada cuando mi aplicación esté enfocada y luego vuelva a habilitarla cuando la aplicación cierre / pierda el enfoque.

Originalmente, quería hacer esta pregunta aquí en stackoverflow, pero aún no estaba en la versión beta. Entonces, después de buscar la respuesta en Google y encontrar solo un poco de información, se me ocurrió lo siguiente y decidí publicarlo aquí ahora que estoy en la versión beta.

<code>using System;
using Microsoft.Win32;

namespace HowTo
{
    class WebClickSound
    {
        /// <summary>
        /// Enables or disables the web browser navigating click sound.
        /// </summary>
        public static bool Enabled
        {
            get
            {
                RegistryKey key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\Explorer\Navigating\.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(@"AppEvents\Schemes\Apps\Explorer\Navigating\.Current", true);
                key.SetValue(null, keyValue,  RegistryValueKind.ExpandString);
                isEnabled = value;
            }
        }
    }
}
</code>

Luego, en el formulario principal, usamos el código anterior en estos 3 eventos:

ActivadoDesactivado

FormClosing

<code>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;
}
</code>

El único problema que veo actualmente es que si el programa falla, no tendrán el sonido de clic hasta que vuelvan a iniciar mi aplicación, pero no sabrían cómo hacerlo.

¿Qué piensan ustedes? ¿Es esta una buena solución? ¿Qué mejoras se pueden hacer?

Respuestas a la pregunta(5)

Su respuesta a la pregunta