Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to disable click sound in WebBrowser Control

I use Javascript to click a link in the webbrowser control. But I don't want to hear IE's "click" sound.

Is there any way to do this?

P.S.

  • I don't want to change system settings.
  • I've seen this one (HowTo Disable WebBrowser 'Click Sound' in your app only) but Document.Write is not an option for me.
like image 403
dr. evil Avatar asked Dec 25 '08 20:12

dr. evil


3 Answers

For IE7 and above, you can use this:

int feature = FEATURE_DISABLE_NAVIGATION_SOUNDS; CoInternetSetFeatureEnabled(feature, SET_FEATURE_ON_PROCESS, true); 

using the following DLL imports

private const int FEATURE_DISABLE_NAVIGATION_SOUNDS = 21; private const int SET_FEATURE_ON_THREAD = 0x00000001; private const int SET_FEATURE_ON_PROCESS = 0x00000002; private const int SET_FEATURE_IN_REGISTRY = 0x00000004; private const int SET_FEATURE_ON_THREAD_LOCALMACHINE = 0x00000008; private const int SET_FEATURE_ON_THREAD_INTRANET = 0x00000010; private const int SET_FEATURE_ON_THREAD_TRUSTED = 0x00000020; private const int SET_FEATURE_ON_THREAD_INTERNET = 0x00000040; private const int SET_FEATURE_ON_THREAD_RESTRICTED = 0x00000080;  ...  [DllImport("urlmon.dll")] [PreserveSig] [return:MarshalAs(UnmanagedType.Error)] static extern int CoInternetSetFeatureEnabled( int FeatureEntry, [MarshalAs(UnmanagedType.U4)] int dwFlags, bool fEnable); 

(found on the MS feedback site as a solution from the WPF team: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345528&wa=wsignin1.0)

like image 66
James Crowley Avatar answered Oct 06 '22 01:10

James Crowley


I have wrapped this functionality into a ready-to-use class. I used part of the information from the selected answer and the MSDN reference.

Hope this is useful to someone.

Usage

URLSecurityZoneAPI.InternetSetFeatureEnabled(URLSecurityZoneAPI.InternetFeaturelist.DISABLE_NAVIGATION_SOUNDS, URLSecurityZoneAPI.SetFeatureOn.PROCESS, false); 

URLSecurityZoneAPI

  /// <summary>   /// Enables or disables a specified Internet Explorer feature control   /// Minimum availability: Internet Explorer 6.0   /// Minimum operating systems: Windows XP SP2   /// </summary>   internal class URLSecurityZoneAPI   {      /// <summary>     /// Specifies where to set the feature control value     /// http://msdn.microsoft.com/en-us/library/ms537168%28VS.85%29.aspx     /// </summary>     public enum SetFeatureOn : int     {       THREAD = 0x00000001,       PROCESS = 0x00000002,       REGISTRY = 0x00000004,       THREAD_LOCALMACHINE = 0x00000008,       THREAD_INTRANET = 0x00000010,       THREAD_TRUSTED = 0x00000020,       THREAD_INTERNET = 0x00000040,       THREAD_RESTRICTED = 0x00000080     }      /// <summary>     /// InternetFeaturelist     /// http://msdn.microsoft.com/en-us/library/ms537169%28v=VS.85%29.aspx     /// </summary>     public enum InternetFeaturelist : int     {       OBJECT_CACHING = 0,       ZONE_ELEVATION = 1,       MIME_HANDLING = 2,       MIME_SNIFFING = 3,       WINDOW_RESTRICTIONS = 4,       WEBOC_POPUPMANAGEMENT = 5,       BEHAVIORS = 6,       DISABLE_MK_PROTOCOL = 7,       LOCALMACHINE_LOCKDOWN = 8,       SECURITYBAND = 9,       RESTRICT_ACTIVEXINSTALL = 10,       VALIDATE_NAVIGATE_URL = 11,       RESTRICT_FILEDOWNLOAD = 12,       ADDON_MANAGEMENT = 13,       PROTOCOL_LOCKDOWN = 14,       HTTP_USERNAME_PASSWORD_DISABLE = 15,       SAFE_BINDTOOBJECT = 16,       UNC_SAVEDFILECHECK = 17,       GET_URL_DOM_FILEPATH_UNENCODED = 18,       TABBED_BROWSING = 19,       SSLUX = 20,       DISABLE_NAVIGATION_SOUNDS = 21,       DISABLE_LEGACY_COMPRESSION = 22,       FORCE_ADDR_AND_STATUS = 23,       XMLHTTP = 24,       DISABLE_TELNET_PROTOCOL = 25,       FEEDS = 26,       BLOCK_INPUT_PROMPTS = 27,       MAX = 28     }      /// <summary>     /// Enables or disables a specified feature control.      /// http://msdn.microsoft.com/en-us/library/ms537168%28VS.85%29.aspx     /// </summary>                 [DllImport("urlmon.dll", ExactSpelling = true), PreserveSig, SecurityCritical, SuppressUnmanagedCodeSecurity]     [return: MarshalAs(UnmanagedType.Error)]     static extern int CoInternetSetFeatureEnabled(int featureEntry, [MarshalAs(UnmanagedType.U4)] int dwFlags, bool fEnable);      /// <summary>     /// Determines whether the specified feature control is enabled.      /// http://msdn.microsoft.com/en-us/library/ms537164%28v=VS.85%29.aspx     /// </summary>     [DllImport("urlmon.dll", ExactSpelling = true), PreserveSig, SecurityCritical, SuppressUnmanagedCodeSecurity]     [return: MarshalAs(UnmanagedType.Error)]     static extern int CoInternetIsFeatureEnabled(int featureEntry, int dwFlags);      /// <summary>     /// Set the internet feature enabled/disabled     /// </summary>     /// <param name="feature">The feature from <c>InternetFeaturelist</c></param>     /// <param name="target">The target from <c>SetFeatureOn</c></param>     /// <param name="enabled">enabled the feature?</param>     /// <returns><c>true</c> if [is internet set feature enabled] [the specified feature]; otherwise, <c>false</c>.</returns>     public static bool InternetSetFeatureEnabled(InternetFeaturelist feature, SetFeatureOn target, bool enabled)     {       return (CoInternetSetFeatureEnabled((int)feature, (int)target, enabled) == 0);     }      /// <summary>     /// Determines whether the internet feature is enabled.     /// </summary>     /// <param name="feature">The feature from <c>InternetFeaturelist</c></param>     /// <param name="target">The target from <c>SetFeatureOn</c></param>     /// <returns><c>true</c> if the internet feature is enabled; otherwise, <c>false</c>.     /// </returns>     public static bool IsInternetSetFeatureEnabled(InternetFeaturelist feature, SetFeatureOn target)     {       return (CoInternetIsFeatureEnabled((int)feature, (int)target) == 0);     }    } 
like image 40
Dennis Avatar answered Oct 05 '22 23:10

Dennis


As noted by the comments, and the answer by @James Crowley, it is indeed possible.


If you navigate in IE, and thus that control, you'll get the click. Unless you change the settings, or fake it like that link, then no, you can't get rid of the click.

like image 36
Lasse V. Karlsen Avatar answered Oct 06 '22 00:10

Lasse V. Karlsen