当前位置:  开发笔记 > 编程语言 > 正文

如何在应用程序中禁用WebBrowser"单击声音"

如何解决《如何在应用程序中禁用WebBrowser"单击声音"》经验,为你挑选了2个好方法。

有问题的"点击声音"实际上是系统范围的偏好,因此我只希望在我的应用程序具有焦点时禁用它,然后在应用程序关闭/失去焦点时重新启用它.

最初,我想在stackoverflow上问这个问题,但我还没有进入测试阶段.因此,在谷歌搜索答案并找到一点信息后,我想出了以下内容,并决定在此处发布,因为我已经进入测试版.

using System;
using Microsoft.Win32;

namespace HowTo
{
    class WebClickSound
    {
        /// 
        /// Enables or disables the web browser navigating click sound.
        /// 
        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;
            }
        }
    }
}

然后在主窗体中我们在这3个事件中使用上面的代码:

活性

停用

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

我目前看到的一个问题是,如果程序崩溃,他们将无法获得点击声,直到他们重新启动我的应用程序,但他们不知道这样做.

你们有什么感想?这是一个好的解决方案吗?可以做些什么改进?



1> John black..:
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);
}



2> Matt Hamilto..:

我注意到如果您使用WebBrowser.Document.Write而不是WebBrowser.DocumentText,则不会发生咔嗒声.

所以不是这样的:

webBrowser1.DocumentText = "

Hello, world!

";

试试这个:

webBrowser1.Document.OpenNew(true);
webBrowser1.Document.Write("

Hello, world!

");


您建议的解决方案可以防止控件发出咔嗒声,但另一方面,这种方法会导致控件出现严重的焦点问题.在我的例子中,webbrowser控件在事件循环结束时窃取焦点.据我所知,没有解决办法.在我的情况下,我需要回到DocumentText解决方案 - 但我仍然在寻找禁用那令人讨厌的声音.还有其他想法吗?
刚刚发现,詹姆斯在这个帖子上:http://stackoverflow.com/questions/393166/how-to-disable-click-sound-in-webbrowser-control有一个很好的解决方案 - 至少对于IE7和IE8.我可以使用DocumentText属性,没有焦点问题,最重要的是,我没有咔嗒声.
推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有