我使用Javascript单击webbrowser控件中的链接。但我不想听到IE的“咔嗒”声。
有没有办法做到这一点?
P.S。
Document.Write
不适合我。答案 0 :(得分:44)
对于IE7及更高版本,您可以使用:
int feature = FEATURE_DISABLE_NAVIGATION_SOUNDS;
CoInternetSetFeatureEnabled(feature, SET_FEATURE_ON_PROCESS, true);
使用以下DLL导入
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);
(在MS反馈网站上找到WPF团队的解决方案:https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345528&wa=wsignin1.0)
答案 1 :(得分:13)
我已将此功能包装到即用型课程中。我使用了所选答案中的部分信息和MSDN reference。
希望这对某人有用。
用法
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);
}
}
答案 2 :(得分:2)
答案 3 :(得分:1)
我无法在VB.net上运行,试过这个:
Private Const FEATURE_DISABLE_NAVIGATION_SOUNDS As Integer = 21
Private Const SET_FEATURE_ON_THREAD As Integer = &H1
Private Const SET_FEATURE_ON_PROCESS As Integer = &H2
Private Const SET_FEATURE_IN_REGISTRY As Integer = &H4
Private Const SET_FEATURE_ON_THREAD_LOCALMACHINE As Integer = &H8
Private Const SET_FEATURE_ON_THREAD_INTRANET As Integer = &H10
Private Const SET_FEATURE_ON_THREAD_TRUSTED As Integer = &H20
Private Const SET_FEATURE_ON_THREAD_INTERNET As Integer = &H40
Private Const SET_FEATURE_ON_THREAD_RESTRICTED As Integer = &H80
Declare Function CoInternetSetFeatureEnabled Lib "urlmon.dll" ( _
ByVal FeatureEntry As Integer, ByVal dwFlags As Long, _
ByVal fEnable As Long) As Long
...
CoInternetSetFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS, SET_FEATURE_ON_PROCESS, True)
编辑:发现问题,其内部声明。真的是:
<SecurityCritical, SuppressUnmanagedCodeSecurity, DllImport("urlmon.dll", ExactSpelling:=True)> _
Public Shared Function CoInternetSetFeatureEnabled(ByVal featureEntry As Integer, ByVal dwFlags As Integer, ByVal fEnable As Boolean) As Integer
End Function
感谢dmex http://msdn.microsoft.com/en-us/library/ms537168%28VS.85%29.aspx
答案 4 :(得分:1)
Imports System.Runtime.InteropServices&lt; 进口System.Security
qxxx使用那些导入
答案 5 :(得分:0)
你唯一的另一个选择是静音电脑,但这不是一个好主意......
答案 6 :(得分:-1)
因此,这是已知的限制......
是否有任何肮脏的黑客/解决方法,例如挂钩ActiveX的声音调用并禁用它们(不确定是否可能不会太深)