Jak wyłączyć WebBrowser „Kliknij dźwięk” tylko w swojej aplikacji

„Dźwięk kliknięcia”, o którym mowa, jest w rzeczywistości preferencją dla całego systemu, więc chcę, aby był wyłączony tylko wtedy, gdy moja aplikacja ma fokus, a następnie ponownie ją włącza, gdy aplikacja zamyka / traci fokus.

Pierwotnie chciałem zadać to pytanie tutaj na temat stackoverflow, ale nie byłem jeszcze w wersji beta. Tak więc, po wyszukaniu odpowiedzi na pytanie i znalezieniu tylko niewielkiej ilości informacji na jej temat, wymyśliłem następujące i zdecydowałem się opublikować to tutaj, ponieważ jestem w fazie 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>

Następnie w formularzu głównym używamy powyższego kodu w tych 3 wydarzeniach:

AktywowanyDezaktywowany

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>

Jedynym problemem, który widzę obecnie, jest to, że program zawiesza się i nie będzie miał dźwięku kliknięcia, dopóki nie uruchomi ponownie mojej aplikacji, ale nie będzie wiedział, jak to zrobić.

Co myślicie? Czy to dobre rozwiązanie? Jakie ulepszenia można wprowadzić?

questionAnswers(5)

yourAnswerToTheQuestion