如何仅在您的应用中禁用 Web 浏览器“点击声音”

     2023-03-31     22

关键词:

【中文标题】如何仅在您的应用中禁用 Web 浏览器“点击声音”【英文标题】:HowTo Disable WebBrowser 'Click Sound' in your app only 【发布时间】:2010-09-05 20:15:33 【问题描述】:

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

本来我想在***上问这个问题,但我还没有进入测试版。因此,在谷歌搜索答案并仅找到一点点信息后,我想出了以下内容,并决定在我处于测试阶段后将其发布在这里。

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;
            
        
    

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

已激活 已停用

窗体关闭

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;

我目前看到的一个问题是,如果程序崩溃了,他们在重新启动我的应用程序之前不会有点击声,但他们不知道这样做。

你们怎么看?这是一个好的解决方案吗?可以做哪些改进?

【问题讨论】:

这行有问题:isEnabled = value;我刚刚评论了它,但我想知道它的意图是什么 【参考方案1】:
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】:

我注意到,如果您使用 WebBrowser.Document.Write 而不是 WebBrowser.DocumentText,则不会出现点击声音。

所以不要这样:

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

试试这个:

webBrowser1.Document.OpenNew(true);
webBrowser1.Document.Write("<h1>Hello, world!</h1>");

【讨论】:

您建议的解决方案可以防止控件发出咔哒声,但另一方面,这种方法会导致控件出现严重的焦点问题。在我的例子中,webbrowser 控件在事件循环结束时夺回了焦点。据我所知,没有解决方法。就我而言,我需要回到 DocumentText 解决方案——但我仍在寻找禁用那种烦人的声音。还有其他想法吗? 刚刚发现,James 在这个线程:***.com/questions/393166/… 有一个很好的解决方案 - 至少对于 IE7 和 IE8。我可以使用 DocumentText 属性,没有焦点问题,最重要的是,我没有点击声音。【参考方案3】:

您可以通过将 Internet Explorer 的导航声音注册表值更改为“NULL”来禁用它:

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

并通过将 Internet Explorer 的导航声音注册表值更改为“C:\Windows\Media\Cityscape\Windows Navigation Start.wav”来启用它:

Registry.SetValue("HKEY_CURRENT_USER\\AppEvents\\Schemes\\Apps\\Explorer\\Navigating\\.Current","","C:\Windows\Media\Cityscape\Windows Navigation Start.wav");

【讨论】:

【参考方案4】:

绝对感觉像是一个 hack,但很久以前对此进行了一些研究,但没有找到任何其他解决方案,这可能是您最好的选择。

更好的是设计您的应用程序,这样它就不需要许多烦人的页面重新加载。例如,如果您正在刷新 iframe 以检查服务器上的更新,请改用 XMLHttpRequest。 (你能告诉我在“AJAX”这个词被创造出来之前的日子里我正在处理这个问题吗?)

【讨论】:

【参考方案5】:

如果您想使用替换 Windows 注册表,请使用:

// 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);

【讨论】:

如何在您的应用中禁用 HealthKit 集成?

】如何在您的应用中禁用HealthKit集成?【英文标题】:HowcanIdisableHealthKitintegrationinyourapp?【发布时间】:2017-09-2519:30:25【问题描述】:我有一个应用程序来请求授权以将HealthKit数据用于tableView。我使用此代码请求获取HealthKit数据... 查看详情

如何在 Kivy 应用程序中禁用 Windows 热键 ALT+F4?

】如何在Kivy应用程序中禁用Windows热键ALT+F4?【英文标题】:HowtodisablewindowshotkeyALT+F4inKivyapp?【发布时间】:2018-01-2512:18:21【问题描述】:Kivy是否为您的应用提供任何禁用Windows热键(ALT+F4)的功能?或者我可以通过python3.5+做到这一... 查看详情

在您的 Web 应用程序中管理执行优先级和请求到期时间

】在您的Web应用程序中管理执行优先级和请求到期时间【英文标题】:Managingexecutionprioritiesandrequestexpirytimeinyourwebapplication【发布时间】:2011-01-2802:34:48【问题描述】:运行我们的应用程序的某些安装在忙碌的一天可能会承受巨... 查看详情

如何阻止我的 Web 应用程序仅在某个浏览器中不受支持? [关闭]

】如何阻止我的Web应用程序仅在某个浏览器中不受支持?[关闭]【英文标题】:Howtoblockmywebapplicationtobenotsupportedinonecertainbrowseralone?[closed]【发布时间】:2013-10-2117:42:10【问题描述】:我想限制我的Web应用程序仅在某个浏览器中不... 查看详情

您如何在您的网站中实施 quickblox?

】您如何在您的网站中实施quickblox?【英文标题】:Howdoyouimplementquickbloxinyourwebsite?【发布时间】:2018-10-1213:36:40【问题描述】:我只是Web开发的初学者。所以,这可能是一个非常愚蠢的问题。我想使用javascript将quickblox包含到我... 查看详情

Flutter Web:如何在 Flutter Web 应用程序中禁用浏览器的后退按钮

】FlutterWeb:如何在FlutterWeb应用程序中禁用浏览器的后退按钮【英文标题】:FlutterWeb:Howtodisablebackwardbuttonofbrowserinflutterwebapplication【发布时间】:2020-05-0222:48:01【问题描述】:成功登录后,用户重定向到主页,但当用户单击浏览... 查看详情

如何在您的应用程序中获取 Elastic Beanstalk 应用程序版本?

】如何在您的应用程序中获取ElasticBeanstalk应用程序版本?【英文标题】:HowcanyougettheElasticBeanstalkApplicationVersioninyourapplication?【发布时间】:2013-11-2312:52:15【问题描述】:我们希望能够在我们的PHP代码中检索弹性beanstalk应用程序... 查看详情

如何获取标准 Mac OS X 图标以在您的应用程序中使用?

】如何获取标准MacOSX图标以在您的应用程序中使用?【英文标题】:HowtogetstandardMacOSXiconstouseinyourapp?【发布时间】:2015-09-2619:40:16【问题描述】:如何在您的设计/应用程序中使用标准MacOSX图标?我所说的标准图标是指此屏幕截... 查看详情

如何仅使用代码在您的 iOS 应用程序中显示 ViewController?

】如何仅使用代码在您的iOS应用程序中显示ViewController?【英文标题】:HowtoshowaViewControllerinyouriOSappbyonlyusingCode?【发布时间】:2020-04-0610:42:23【问题描述】:我想在我的应用程序中显示一个ViewController而不使用情节提要入口点。... 查看详情

如何在您的应用程序中登录 facebook 上的其他用户?

】如何在您的应用程序中登录facebook上的其他用户?【英文标题】:howtologinsomeotheruseronfacebookinyourapp?【发布时间】:2011-03-0112:48:31【问题描述】:我在我的应用程序中的用户Facebook墙上发布了一些故事。它工作正常,但我想知道... 查看详情

如何在您的 Android 应用程序中使用 Intent 打开 WhatsApp

】如何在您的Android应用程序中使用Intent打开WhatsApp【英文标题】:HowtoopenWhatsAppusinganIntentinyourAndroidApp【发布时间】:2016-11-2005:02:18【问题描述】:我想要一个Intent将您直接控制到WhatsApp。所以当用户点击按钮的那一刻,意图应该... 查看详情

本网站需要在您的浏览器中启用 Javascript

】本网站需要在您的浏览器中启用Javascript【英文标题】:ThissiterequiresJavascriptenabledinyourbrowser【发布时间】:2020-04-1801:49:43【问题描述】:我需要从服务器下载一些文件我使用Retrofit、Voelly和DownLoadManager是从android中的服务器下载... 查看详情

在android中禁用按钮单击声音

...ksoundinandroid【发布时间】:2013-03-0812:04:41【问题描述】:如何在Android应用中禁用特定按钮的点击声音?这是我的代码:more1after.setOnClickListener(newOnClickListener()publicvoidonClick(Viewv)sc.scrollTo(sc.getScrollX 查看详情

如何在您的 iOS 应用收到新评分或评论时收到通知

】如何在您的iOS应用收到新评分或评论时收到通知【英文标题】:HowtogetnotifiedwhenyouriOSappreceivesanewratingorcomment【发布时间】:2012-11-3017:32:52【问题描述】:当我的iOS应用在AppStore中收到新的评分或评论时,我希望收到某种通知。i... 查看详情

如何在web浏览器中启用java?

请按照以下说明通过您的Web浏览器启用Java:适用于Windows的浏览器InternetExplorer单击工具,然后单击Internet选项选择安全选项卡,选择自定义级别按钮向下滚动到Java小应用程序脚本确保选中启用单选按钮单击确定保存您的首选设置... 查看详情

如何在web浏览器中启用java?

请按照以下说明通过您的Web浏览器启用Java:适用于Windows的浏览器InternetExplorer单击工具,然后单击Internet选项选择安全选项卡,选择自定义级别按钮向下滚动到Java小应用程序脚本确保选中启用单选按钮单击确定保存您的首选设置... 查看详情

如何在 Web 应用程序的浏览器上禁用按钮关闭?

】如何在Web应用程序的浏览器上禁用按钮关闭?【英文标题】:HowToDisableButtonCloseOnBrowserForWebApplication?【发布时间】:2011-09-2121:53:12【问题描述】:我有基于应用程序Web的ASP.NetFramework1.0,为了安全,我希望浏览器(即,firefox、op... 查看详情

如何在 Flutter Web 中禁用默认浏览器快捷方式?

】如何在FlutterWeb中禁用默认浏览器快捷方式?【英文标题】:HowdoIdisableDefaultBrowserShortcutsinFlutterWeb?【发布时间】:2021-07-0610:01:04【问题描述】:问题如果我在FlutterWeb应用程序中实现CTRL++和CTRL+-的快捷方式,浏览器仍会默认缩放... 查看详情