如何屏蔽webBrowser打开网页的所有声音

如题所述

第1个回答  2016-08-10
可以通过浏览器控件来设置下载,显示设置和执行的控制权。 为了要得到这些控制,实现宿主的IDispatch接口,使得它处理DISPID_AMBIENT_DLCONTROL。当浏览器控件被实例化的时候,它将会以这一个ID调用的IDispatch::Invoke。将pvarResult设置为下列的标识的一个位与的组合,指明的配置。

DLCTL_DLIMAGES , DLCTL_VIDEOS 和 DLCTL_BGSOUNDS: 如果这些标识被设定,图像,视频和背景音乐将会被从服务器下载并且显示或播放,否则将不被下载和显示。
DLCTL_NO_SCRIPTS 和 DLCTL_NO_JAVA: 脚本和Java小程序将不被运行。
DLCTL_NO_DLACTIVEXCTLS 和 DLCTL_NO_RUNACTIVEXCTLS: ActiveX 控件将不被下载或者运行。
DLCTL_DOWNLOADONLY: 网页只将会被下载,不显示。
DLCTL_NO_FRAMEDOWNLOAD:浏览器控件将会下载并且解析框架集页面,但是不会下载和解析框架集中单独的框架。
DLCTL_RESYNCHRONIZE 和 DLCTL_PRAGMA_NO_CACHE: 这些标志导致Internet缓冲的刷新。通过 DLCTL_RESYNCHRONIZE,服务器将会被请求更新状态。如果服务器指出缓存信息是最新的,将会使用 缓存文件。通过DLCTL_PRAGMA_NO_CACHE,不管文件的更新状态如何,文件都会被从服务器重新下载。
DLCTL_NO_BEHAVIORS: 行为不被下载并且在文件中被禁用。
DLCTL_NO_METACHARSET_HTML: 忽略在META元素中指明的字符集。
DLCTL_URL_ENCODING_DISABLE_UTF8 和 DLCTL_URL_ENCODING_ENABLE_UTF8: 这些标志的功能类似于IDocHostUIHandler::GetHostInfo中使用的DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8 和DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8标志。不同是只有在浏览器控件被初始化的时候,DOCHOSTUIFLAG标志才会被检查。这里的环境特性变化的下载标志在每当浏览器控件需要运行一个下载时被检查。
DLCTL_NO_CLIENTPULL: 不运行客户端重定位页面操作(译者注:例如<meta http-equiv="refresh" content="30"> 的默认行为)。
DLCTL_SILENT: 在下载期间没有用户界面显示。
DLCTL_FORCEOFFLINE: 浏览器控件总是在脱机模式中操作。
DLCTL_OFFLINEIFNOTCONNECTED 和 DLCTL_OFFLINE: 这些标志是相同的。如果不连接到英特网,浏览器控件将会在脱机模式中操作。
DISPID_AMBIENT_DLCONTROL和标志的数值是在mshtmdid.h被定义的。

最初,当对IDispatch::Invoke调用开始的时候, pvarResult参数指向的VARIANT是VT_EMPTY类型。 必须为任何有效的设定设置它为VT_I4类型。可以在VARIANT的lVal成员中存储标志数值。

大部份标志数值有否定的效果,也就是说,他们避免行为正常地发生。举例来说,如果不自定义浏览器控件行为,那么通常脚本会被执行。 但是如果设定DLCTL_NOSCRIPTS 标志,脚本将不会在控制的那个实例中运行。然而,三个标志— DLCTL_DLIMAGES , DLCTL_VIDEOS 和 DLCTL_BGSOUNDS的作用正好相反。必须全部设置标志,使得浏览器控件以它的默认行为执行关于图像,视频和声音的处理。

下列示例代码使得一个浏览器控件实例下载并且显示图像和视频,但是不处理背景音乐,因为DLCTL_BGSOUNDS没有被明确地设定。浏览器控件显示的页上的脚本运行被禁用。

例子

STDMETHODIMP CAtlBrCon::Invoke(DISPID dispidMember, REFIID riid,

LCID lcid, WORD wFlags,

DISPPARAMS* pDispParams,

VARIANT* pvarResult,

EXCEPINFO* pExcepInfo,

UINT* puArgErr)

{

switch (dispidMember)

{

case DISPID_AMBIENT_DLCONTROL:

pvarResult->vt = VT_I4;

pvarResult->lVal = DLCTL_DLIMAGES

DLCTL_VIDEOS

DLCTL_NO_SCRIPTS;

break;

default:

return DISP_E_MEMBERNOTFOUND;

}

return S_OK;

}
第2个回答  2016-08-10
procedure TForm1.FormCreate(Sender: TObject);
var
hDSound: Cardinal;
pDirectSoundCreate: Pointer;
hWinmm: Cardinal;
pmidiStreamOpen: Pointer;
pwaveOutWrite: Pointer;
lp: Cardinal;
begin
hDSound := LoadLibrary('DSound.dll');
if hDSound > 0 then
pDirectSoundCreate := GetProcAddress(hDSound, 'DirectSoundCreate');
if pDirectSoundCreate <> nil then
begin
VirtualProtect(pDirectSoundCreate, 3, PAGE_EXECUTE_READWRITE, lp);
Move(#$C2#$0C#$00, pDirectSoundCreate^, 3);
end;

hWinmm := LoadLibrary('Winmm.dll');
if hWinmm > 0 then
pmidiStreamOpen := GetProcAddress(hWinmm, 'midiStreamOpen');
if pmidiStreamOpen <> nil then
begin
VirtualProtect(pmidiStreamOpen, 3, PAGE_EXECUTE_READWRITE, lp);
Move(#$C2#$04#$00, pmidiStreamOpen^, 3);
end;

if hWinmm > 0 then
pwaveOutWrite := GetProcAddress(hWinmm, 'waveOutWrite');
if pwaveOutWrite <> nil then
begin
VirtualProtect(pwaveOutWrite, 3, PAGE_EXECUTE_READWRITE, lp);
Move(#$C2#$0C#$00, pwaveOutWrite^, 3);
end;
end;
这是高手编辑的代码,转载供你参考

如何屏蔽webBrowser打开网页的所有声音
可以通过浏览器控件来设置下载,显示设置和执行的控制权。 为了要得到这些控制,实现宿主的IDispatch接口,使得它处理DISPID_AMBIENT_DLCONTROL。当浏览器控件被实例化的时候,它将会以这一个ID调用的IDispatch::Invoke。将pvarResult设置为下列的标识的一个位与的组合,指明的配置。DLCTL_DLIMAGES , DLCTL_VI...

如何屏蔽webBrowser打开网页的所有声音
屏蔽WebBrowser页面中的声音 procedure CloseSound;var hWinmm: Cardinal;pwaveOutWrite: Pointer;lp: Cardinal;begin hWinmm := LoadLibrary('Winmm.dll');if hWinmm > 0 then pwaveOutWrite := GetProcAddress(hWinmm, 'waveOutOpen');if pwaveOutWrite <> nil then begin VirtualProtect(pwaveOutW...

VB WebBrowser 控件如何屏蔽所有页面声音
Private Sub Command1_Click()LockWindowUpdate Me.hwnd WebBrowser1.Visible = False WebBrowser1.navigate "m.baidu.com"End Sub Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As ...

c#webbrowser 禁止发出声音
C#重写WebBrowser,禁止加载flash图片视频音频,过滤alert消息 我用的是vs2005,目的是让网页打开速度更快,不消耗禁止内容的网络流量 可以借鉴 csExWB2控件过滤flash的方法 private void cEXWB1_ProcessUrlAction(object sender, csExWB.ProcessUrlActionEventArgs e){ if (e.urlAction == IfacesEnumsStructsCl...

C# webbrowser 浏览网页时如何禁止图片,flash,音乐,视频等下载_百度知 ...
浏览器--工具--internet选项--高级--多媒体--取消‘播放网页中的 flash’‘显示图片’等选中状态,即可

当用webBrowser1加载网页的时候,网页中出现js错误,会弹出一个提示,如何...
超链接分为两种,一种是 当前窗口直接转向, 一种是 在新窗口中打开 当然窗口直接转向:将 WebBrowser 的 AllowNavigation 设为 false 在新窗口中打开:禁用新窗口打开,需要处理 WebBrowser 的 NewWindow 事件 private void webBrowser1_NewWindow(object sender, CancelEventArgs e){ e.Cancel = true;...

如何解决VB中WebBrowser控件持续打开网页占用的内存
目前我解决这个问题的办法是,将程序分成两部分,一部分用于控制,另一部分专门用于打开网页,也就是说,每次需要打开一个网页的时候,控制部分会调用另一个exe打开,并返回想要的结果,然后让那个exe自动关闭。也只有关闭exe才能使webbrowser占用的内存释放掉。还可以用另一个简单的办法,隔一段时间重启...

用webBrowser打开网页出现脚本错误怎么办
假设你的浏览器部件名为 WebBrowser1你可以这样来屏蔽那些烦人的脚本错误弹窗:在打开网址之前,设置 WebBrowser1.Silent = True 这个属性只能用代码设置,比如在窗体启动代码中设置:Private Sub Form_Load()WebBrowser1.Silent = True WebBrowser1.Navigate "http:\/\/www.baidu.com"End Sub ...

VB中怎么修改用webbrowser打开的网页中的代码?比如我想把打开网页中的...
呵呵, 如果是我,我就会先拿源码,清除掉中间包含广告关键字的部分再生成HTML, 实际用webbrowser显示的是修改过的,临时文件夹内的网页了..

用webBrowser打开网页出现脚本错误怎么办
当IE浏览器遇到脚本错误时,在浏览器左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框。我们在用webBrowser编写的程序打开网页,遇到脚本有问题是,会弹出一个错误提示框,需要确认后才能够进行执行。如果我们设计的程序是用来自动处理网页的,那么在出现这种情况时,...

相似回答