HowtoDisabletheWebBrowser“ClickSound”inApplication问题中的“点击音”实际上是系统范围的偏好,所以我只是想在我的应用程序获得焦点时禁用它,然后在应用程序关闭/失去焦点时重新启用它。本来想在stackoverflow上问这个问题的,但是还没进入测试。因此,在谷歌搜索答案并找到一些信息后,我想出了以下内容并决定将其发布在这里,因为我处于测试阶段。使用系统;使用Microsoft.Win32;namespaceHowTo{classWebClickSound{//////启用或禁用Web浏览器导航点击声音。///publicstaticboolEnabled{get{RegistryKeykey=Registry.CurrentUser.OpenSubKey(@"AppEventsSchemesAppsExplorerNavigating.Current");字符串键值=(字符串)key.GetValue(null);返回String.IsNullOrEmpty(keyValue)==false&&keyValue!="""";}设置{字符串键值;如果(值){keyValue="%SystemRoot%\Media\";if(Environment.OSVersion.Version.Major==5&&Environment.OSVersion.Version.Minor>0){//XPkeyValue+="WindowsXPStart.wav";}elseif(Environment.OSVersion.Version.Major==6){//VistakeyValue+="WindowsNavigationStart.wav";}else{//不知道文件名所以我不能重新启用它return;}}else{keyValue="""";}//打开并设置指向文件的键RegistryKeykey=Registry.CurrentUser.OpenSubKey(@"AppEventsSchemesAppsExplorerNavigating.Current",true);key.SetValue(null,keyValue,RegistryValueKind.ExpandString);isEnabled=value;}}}}然后在主窗体中我们在这3个事件中使用上面的代码:我目前看到一个问题我我遇到的是,如果程序崩溃了,他们在重新启动我的应用程序之前不会听到点击声音,但他们不知道该怎么做。你们认为如何?这是一个好的解决方案吗?有什么可以进行改进?我注意到,如果您使用WebBrowser.Document.Write而不是WebBrowser.DocumentText,则不会发生单击。所以不是这个:webBrowser1.DocumentText="Hello,world!";试试这个:webBrowser1.Document.OpenNew(true);webBrowser1.Document.Write("你好,世界!");constintFEATURE_DISABLE_NAVIGATION_SOUNDS=21;constintSET_FEATURE_ON_PROCESS=0x00000002;[DllImport("urlmon.dll")][PreserveSig][返回:MarshalAs(UnmanagedType.Error)]staticexternintCoInternetSetFeatureEnabled(intFeatureEntry,[MarshalAs(UnmanagedType.U4)]EnintdwFlagsable,bool;staticvoidDisableClickSounds(){CoInternetSetFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS,SET_FEATURE_ON_PROCESS,true);}通过将导航声音的InternetExplorer注册表值更改为“NULL”来禁用它:Registry.SetValue("HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer\Navigating\.Current","","NULL");并通过将导航声音的InternetExplorer注册表值更改为“C:\WindowsMediaCityscape\WindowsNavigationStart.wav”来启用它:Registry.SetValue("HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer\Navigating\.Current","","C:WindowsMediaCityscapeWindowsNavigationStart.wav");绝对感觉像是一个黑客,但很久以前做了一些研究而没有找到任何其他解决方案,这可能是你最好的选择,更好的是设计你的应用程序,这样它就不需要很多烦人的页面重新加载。例如,如果您正在刷新iframe以检查服务器上的更新,请改用XMLHttpRequest。(在“AJAX”这个词被创造出来的前几天,你能告诉我我正在解决这个问题吗?)如果你想用以下命令替换Windows注册表:详细了解C#学习教程,希望大家多多关注—//backupvalueRegistryKeykey=Registry.CurrentUser.OpenSubKey(@"AppEventsSchemesAppsExplorerNavigating.Current");stringBACKUP_keyValue=(string)key.GetValue(null);//什么都不写做导航...//写备份键RegistryKeykey=Registry.CurrentUser.OpenSubKey(@"AppEventsSchemesAppsExplorerNavigating.Current",true);key.SetValue(null,BACKUP_keyValue,RegistryValueKind.ExpandString);转载请注明出处:
