屏蔽WebBrowser页面中的声音 问题:屏蔽WebBrowser页面中传出来的声音。条件:不能屏蔽其它程序中的声音,因为我想听音乐(通过IE或本地软件)分不多,请高手们不吝赐教。^_^ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道你指的聲音是哪類如果是播放器的歌聲音可以試下這個wb.OleObject.document.all.tags('object').item(0).controls.stop;如果你是用 TEmbeddedWB它可以直接屏蔽 JS 圖片 背景音樂 框架 activex 等等很多東西wb.DownloadOptions := [DontExecuteScripts,DontDownloadFrame,DownloadAndIgnoreCache]; 1,声音有可能是页面中发的歌,也有可能是广告的声音。 wb.OleObject.document.all.tags('object').item(0).controls.stop; 这样做能屏蔽页面框架中的声音?? 2,不知道您说的TEmbeddedWB是什么。见笑了。我是想在窗体上放一个CheckBox,选中了就没声音了,不选就有声音,呵呵能不能通过拦截消息的方式处理这个问题?怎么处理? 谢谢。 IE的工具菜单中的“Internet选项”功能中,有“高级”一栏,里面有多媒体:播放网页中的声音,将这个功能选项的前面的勾去掉,网页就不会播放声音了。而其他软件不会受到影响 你若通过编程来控制的话,要修改注册表:其键为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\MULTIMEDIA\SOUNDS子键为CheckedValue,默认值为yes,要将其改为no WebBrowser不就是个IE吗?楼主说话自相矛盾! “你若通过编程来控制的话,要修改注册表:其键为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\MULTIMEDIA\SOUNDS子键为CheckedValue,默认值为yes,要将其改为no”我想您误会了我的意思了。我只是想屏蔽用我程序中的WebBrowser打开的页面中的声音,并不是要屏蔽所有IE中的声音。我的意思是我在我的程序中打开了一个网页,网页中有播放的声音,但是我不想听,所以要屏蔽掉。同时我还想用IE打开网站听歌。 楼主试着去捞水中的月亮,能捞得着吗?因为WebBrowser和IE就是同一个东西。你也太雷人了吧 WebBrowser和IE是同一个东东,这个您不说大家也知道。但是我想我问的问题应该不是不可能解决的问题。您说这样的话也挺雷人的。希望高手们不吝赐教谢谢。 您说的对,WebBrowser和IE确实是一样的。但我说的话也不是自相矛盾。我不是想要所有的网页都没有声音,我只是要想控制从我程序窗体上的WebBrowser中打开的网页的声音开关,这样说您明白了吧?? procedure TForm1.FormCreate(Sender: TObject);var hDSound: Cardinal; pDirectSoundCreate: Pointer; hWinmm: Cardinal; pmidiStreamOpen: 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;end; 大概沒有什麼解決不了的。只是看有沒有找到正確的方法如果你程序不是相當於瀏覽器一類的東西,那完全可以用它 TEmbeddedWB 將JS,框架(沒JS沒框架,不執行ACtivex,自然不會播放MP3,也不會下載FALSE,背景音樂) 以及指定框架網址屏蔽掉,功能比自帶的webbrowser 要強多了http://www.bsalsa.com/downloads.html 我试了您的方法,它只对程序播放的声音有用。如TMediaPlayer播放的声音。但是对WebBrowser中发出来的声音不用作用。 页面。就比如说下面这个博客吧http://blog.sina.com.cn/u/1196084612 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#$18#$00, pwaveOutWrite^, 3); end;end; 搞错了个参数。用这个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; pathletboy,我终于发现了,你就是传说中的高手。你的方法的确可以达到我的目的,我把原的来函数地址保存下来还可以随时恢愎(恢愎完要刷新网页)。真是太好了,十分感谢你。另外:1,Move(#$C2#$0C#$00, pDirectSoundCreate^, 3);//这句里的#$C2#$0C#$00参数有没有什么讲究,难道不怕正好是另一个函数的地址吗? 2,我给您网页之后您就找到了waveOutWrite这个函数,请问您是用什么工具找的,谢谢! 1、是机器码,对应汇编语言是retn 0c。2、可通过反汇编工具,如windbg或者ollydbg找出。 楼上的是属于挂接API 了 只不过是没有转发 而已。 有是一种方法啊 【调查】经常被拖欠工资,你是怎么对待的? panel中的panel显示问题? 请问delphi中有类似cookie的实现方式吗? 我不關閉ADOQuery,但是窗體關閉中寫入action:=cafree,會不會出現內存洩漏?請指教!謝謝 请教 lxpbuaa(桂枝香在故国晚秋) ,Canvas.Rectangle的一个问题~ 请教一个问题 金碟软件中的帐套如何做的? 送分但需要给出解答,在线等待,急急急! 如何用函数返回一个动态数组? 问一个很弱的问题。在线急等。 困扰了几天的问题 关于斑马打印机打印条码的问题
wb.OleObject.document.all.tags('object').item(0).controls.stop;如果你是用 TEmbeddedWB它可以直接屏蔽 JS 圖片 背景音樂 框架 activex 等等很多東西
wb.DownloadOptions := [DontExecuteScripts,DontDownloadFrame,DownloadAndIgnoreCache];
2,不知道您说的TEmbeddedWB是什么。见笑了。我是想在窗体上放一个CheckBox,选中了就没声音了,不选就有声音,呵呵能不能通过拦截消息的方式处理这个问题?怎么处理? 谢谢。
你若通过编程来控制的话,要修改注册表:
其键为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\MULTIMEDIA\SOUNDS
子键为CheckedValue,默认值为yes,要将其改为no
WebBrowser不就是个IE吗?楼主说话自相矛盾!
其键为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\MULTIMEDIA\SOUNDS
子键为CheckedValue,默认值为yes,要将其改为no”我想您误会了我的意思了。我只是想屏蔽用我程序中的WebBrowser打开的页面中的声音,并不是要屏蔽所有IE中的声音。我的意思是我在我的程序中打开了一个网页,网页中有播放的声音,但是我不想听,所以要屏蔽掉。同时我还想用IE打开网站听歌。
您说的对,WebBrowser和IE确实是一样的。但我说的话也不是自相矛盾。
我不是想要所有的网页都没有声音,我只是要想控制从我程序窗体上的WebBrowser中打开的网页的声音开关,这样说您明白了吧??
var
hDSound: Cardinal;
pDirectSoundCreate: Pointer;
hWinmm: Cardinal;
pmidiStreamOpen: 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;
end;
以及指定框架網址屏蔽掉,功能比自帶的webbrowser 要強多了
http://www.bsalsa.com/downloads.html
我试了您的方法,它只对程序播放的声音有用。如TMediaPlayer播放的声音。但是对WebBrowser中发出来的声音不用作用。
就比如说下面这个博客吧
http://blog.sina.com.cn/u/1196084612
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#$18#$00, pwaveOutWrite^, 3);
end;
end;
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;
2,我给您网页之后您就找到了waveOutWrite这个函数,请问您是用什么工具找的,谢谢!
2、可通过反汇编工具,如windbg或者ollydbg找出。
有是一种方法啊