HowTo Zakázat WebBrowser ‚cvaknutí‘ ve vaší aplikaci pouze

hlasů
27

Dále jen ‚cvaknutí‘ v otázce je ve skutečnosti v rámci celého systému preference, takže chci jen to, že máte vypnutý když moje aplikace má fokus a potom znovu povolit, pokud aplikace zavře / ztratí fokus.

Původně jsem se chtěl zeptat na tuto otázku zde na StackOverflow, ale nebyl jsem ještě v beta verzi. Takže po googling za odpověď a najít jen trochu informací o tom jsem přišel s následující a rozhodl se přidat tady, že jsem v beta verzi.

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

Poté v hlavním formuláři využíváme výše uvedený kód v těchto 3 případech:

  • aktivován
  • deaktivován
  • 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;
    }
    

Ten problém vidím v současné době je v případě, že zhroucení programu nebudou mít cvaknutí, dokud znovu spustit mé žádosti, ale nebudou vědět, jak to udělat.

Co si myslíte? Je to dobré řešení? Co lze zlepšit?

Položena 14/08/2008 v 00:01
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
39
const int FEATURE_DISABLE_NAVIGATION_SOUNDS = 21;
const int SET_FEATURE_ON_PROCESS = 0x00000002;

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

static void DisableClickSounds()
{
    CoInternetSetFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS,
                                SET_FEATURE_ON_PROCESS,
                                true);
}
Odpovězeno 11/01/2011 v 10:06
zdroj uživatelem

hlasů
12

Všiml jsem si, že pokud budete používat WebBrowser.Document.Write spíše než WebBrowser.DocumentText pak cvaknutí nestane.

Takže toto místo:

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

Zkuste to:

webBrowser1.Document.OpenNew(true);
webBrowser1.Document.Write("<h1>Hello, world!</h1>");
Odpovězeno 14/08/2008 v 00:10
zdroj uživatelem

hlasů
1

Zakázat to změnou hodnoty registru Internet Explorer navigace zvuk „NULL“:

Registry.SetValue("HKEY_CURRENT_USER\\AppEvents\\Schemes\\Apps\\Explorer\\Navigating\\.Current","","NULL");

A povolit změnou hodnoty registru Internet Explorer navigace zvuk na „C: \ Windows \ Media \ Panoráma \ Windows Navigační Start.wav“:

Registry.SetValue("HKEY_CURRENT_USER\\AppEvents\\Schemes\\Apps\\Explorer\\Navigating\\.Current","","C:\Windows\Media\Cityscape\Windows Navigation Start.wav");
Odpovězeno 23/07/2013 v 23:38
zdroj uživatelem

hlasů
0

Chcete-li používat nahradit Windows Registry, použijte toto:

// backup value
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\Explorer\Navigating\.Current");
string BACKUP_keyValue = (string)key.GetValue(null);

// write nothing
key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\Explorer\Navigating\.Current", true);
key.SetValue(null, "",  RegistryValueKind.ExpandString);

// do navigation ...

// write backup key
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\Explorer\Navigating\.Current", true);
key.SetValue(null, BACKUP_keyValue,  RegistryValueKind.ExpandString);
Odpovězeno 03/01/2011 v 22:01
zdroj uživatelem

hlasů
0

Rozhodně cítí jako hack, ale že udělal nějaký výzkum na to už dávno a ne najít žádné jiné řešení, pravděpodobně nejlepší sázku.

Ještě lepší by měly vytvářet svou aplikaci tak, že nevyžaduje mnoho nepříjemných opětovné načítání stránky .. Například, pokud jste obnovili iframe kontrolovat aktualizace na serveru pomocí XMLHttpRequest místo. (Můžeš říct, že jsem se řešení tohoto problému již v dobách před byl vytvořen termín „AJAX“?)

Odpovězeno 14/08/2008 v 00:13
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more