基本上,窗口句柄与其代码中正在播放的声音之间没有任何关系......声卡无法分辨谁想要播放。
从理论上讲,可以选择在Web浏览器上执行您想要的操作,但这并不容易,而不是100%。它是这样的:
从浏览器播放的大部分音频来自wmp / quick time / vlc / flash /等已知对象。
当用户选择将来自firefox的所有音频静音时,您的应用程序将搜索firefox选项卡中的那些已知对象,并使用其api将其静音/取消静音。
为此,您需要为firefox编写扩展名,这样您就可以从应用程序访问选项卡内存。
顺便问一下,os是什么?
并检查出来:
http://www.indev.no/?p=projects#flashmute(flashmute)我相信它会做什么 - 仅适用于闪光灯。
在Vista / Windows 7上
我希望有一些API可以改变音频管理器使用的每个进程的音量。应该比较直接使用。
在XP上
我认为没有任何内置功能可以满足您的需求。我建议不要在XP上提供该功能。但如果你真的想要,那就有一些黑客的解决方案:
- Usermode API挂钩。使用您自己的功能拦截对audioapis的调用。这些可以改变音量或操纵音频信号,从而获得您想要的效果。对于几个可用的audio-apis,您需要以不同的方式执行此操作。我猜DirectSound和DirectShow特别烦人。这需要将dll注入到您想要操作的任何进程中。而这个DLL最好不要求.net运行时。搜索IAT(导入地址表)或EAT(导出地址表)挂钩。
- 内核模式音频挂钩。编写一个拦截内核中音频的驱动程序,并在每个进程的基础上更改它。不知道怎么做。
但是你可以看到两种解决方案都不好。