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:
AktywowanyDezaktywowanyFormClosing
<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ć?