读书人

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

发布时间: 2012-12-16 12:02:32 作者: rapoo

怎么屏蔽webBrowser打开网页的所有声音
RT
只关闭 webBrowser 打开网页内容的声音,不能关闭系统声音
[解决办法]
UP
[解决办法]
浏览器控件给你它的下载,显示设置和执行的控制权。 为了要得到这些控制,你实现你的宿主的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成员中存储标志数值。

大部份标志数值有否定的效果,也就是说,他们避免行为正常地发生。举例来说,如果你不自定义浏览器控件行为,那么通常脚本会被执行。 但是如果你设—LCTL_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;

}


这些是蒋老大的经典教材
------解决方案--------------------


mark,好东西
[解决办法]
呃,没看清楚题目就贴么
CoInternetSetFeatureEnabled FEATURE_DISABLE_NAVIGATION_SOUNDS
[解决办法]
IE7开始才有 FEATURE_DISABLE_NAVIGATION_SOUNDS 选项,IE6 没啥好办法。
[解决办法]
学习
[解决办法]
学习下。
[解决办法]
CoInternetSetFeatureEnabled FEATURE_DISABLE_NAVIGATION_SOUNDS
这个只是控制点击声音吧
不能控制网页里其他声音吧,比如FLASH,MEDPLAY
[解决办法]
当然不能,ActiveX使用什么方法输出声音是不告诉浏览器的。
[解决办法]
我也在找方法

waveOutSetVolume 是可以实现。 不过 DeviceID 不知道怎么获取?

waveOutGetID 获取的是音频设备ID 得获取 音频流ID才能单独操作
[解决办法]
哇,哇,哇,,好东西,,, 学习了,,
[解决办法]
感觉这种设置并不能屏蔽声音:
DLCTL_DLIMAGES

读书人网 >VC/MFC

热点推荐