Xp下 Webbrowser 静音解决思路

Xp下 Webbrowser 静音
var
  DllModule:Cardinal;
  dwReserved:DWORD;
begin
// EnableMute(True);
 if Buttoncbl.Hint = '未静音' then
  begin
    DllModule:= loadLibrary('Winmm.dll');
   if DllModule > 0 then
      BaseAddr:= GetProcAddress(DllModule,'waveOutWrite');
   hProcess:=GetCurrentProcess;
   NewAddr.MovEax:=$B8;
   NewAddr.Addr:=DWORD(@_waveOutWrite);
   NewAddr.JmpCode:=$E0FF;
   ReadOK:=ReadProcessMemory(hProcess,BaseAddr,@OldAddr,8,dwReserved);
   (保存原来的地址)
   if ReadOK = False then exit;
   WriteProcessMemory(hProcess,BaseAddr,@NewAddr,8,dwReserved);
  (写入新地址)
   Buttoncbl.Hint:= '已静音';
  end else
  begin
    WriteProcessMemory(hProcess,BaseAddr,@OldAddr,8,dwReserved);
   (恢复原来的地址)
    Buttoncbl.Hint:= '未静音';
 end;

上面的代码可以实现静音,但不能恢复,怎么才可以立即恢复声音?
------解决方案--------------------
取消挂钩不就得了
------解决方案--------------------
引用:
取消挂钩不就得了

估计是哪里copy的代码,楼主自己都看不懂是什么意思吧,你说“取消挂钩”他是不明白的。。。Xp下 Webbrowser 静音解决思路

我以前也弄过一个,可以参考一下,不过后来flash升级后好像是失效了,可能还要挂其他函数吧。
http://blog.csdn.net/aqtata/article/details/8112092
------解决方案--------------------
IE静音除了Winmm.dll的waveOutWrite函数外,还要hook dsound.dll的DirectSoundCreate

引用:
Quote: 引用:

取消挂钩不就得了

估计是哪里copy的代码,楼主自己都看不懂是什么意思吧,你说“取消挂钩”他是不明白的。。。Xp下 Webbrowser 静音解决思路

我以前也弄过一个,可以参考一下,不过后来flash升级后好像是失效了,可能还要挂其他函数吧。
http://blog.csdn.net/aqtata/article/details/8112092

------解决方案--------------------
我自己写了个测试HOOK IE里的优酷视频,静音和恢复静音都没问题,也没有hook DirectSoundCreate,vista\win7才需要hook DirectSoundCreate吧。

需要注意的是hook和unhook时再向目标进程发送一个WM_SETTINGCHANGE消息,不然静音切换会有1,2秒的延时。