C#静音/取消静音特定的窗口?

时间:2010-11-20 16:02:36

标签: c# .net

我想知道是否可以仅将特定的窗口静音。例如,我打开了Firefox,还有两个窗口。我想把与Firefox有关的所有内容都静音,但不是我电脑的整个声音。

这可能吗?如果是这样,怎么办呢?

2 个答案:

答案 0 :(得分:1)

基本上,窗口句柄与其代码中正在播放的声音之间没有任何关系......声卡无法分辨谁想要播放。 从理论上讲,可以选择在Web浏览器上执行您想要的操作,但这并不容易,而不是100%。它是这样的: 从浏览器播放的大部分音频来自wmp / quick time / vlc / flash /等已知对象。 当用户选择将来自firefox的所有音频静音时,您的应用程序将搜索firefox选项卡中的那些已知对象,并使用其api将其静音/取消静音。 为此,您需要为firefox编写扩展名,这样您就可以从应用程序访问选项卡内存。

顺便问一下,os是什么? 并检查出来:http://www.indev.no/?p=projects#flashmute(flashmute)我相信它会做什么 - 仅适用于闪光灯。

答案 1 :(得分:0)

在Vista / Windows 7上 我希望有一些API可以改变音频管理器使用的每个进程的音量。应该比较直接使用。

在XP上
我认为没有任何内置功能可以满足您的需求。我建议不要在XP上提供该功能。但如果你真的想要,那就有一些黑客的解决方案:

  • Usermode API挂钩。使用您自己的功能拦截对audioapis的调用。这些可以改变音量或操纵音频信号,从而获得您想要的效果。对于几个可用的audio-apis,您需要以不同的方式执行此操作。我猜DirectSound和DirectShow特别烦人。这需要将dll注入到您想要操作的任何进程中。而这个DLL最好不要求.net运行时。搜索IAT(导入地址表)或EAT(导出地址表)挂钩。
  • 内核模式音频挂钩。编写一个拦截内核中音频的驱动程序,并在每个进程的基础上更改它。不知道怎么做。

但是你可以看到两种解决方案都不好。