使用WASAPI后,我无法理解使用sndvol32(卷混合器)显示进程名称的策略是什么。
显然“ 0” processId是系统声音
然后,我可以获得一些提示: -如果您在AudioSession中设置了DisplayName,则它将使用显示名。 -如果不是,则使用窗口名称或exe的FileDescription字段。
我无法理解如何选择使用窗口名称或文件描述。例如,对于Steam,即使打开Steam窗口(其MainWindow标题为“ Steam”),它也会使用“ Steam Client Bootstrappeer”。对于Spotify,请始终使用MainWindow标题字段。
还有其他一些问题,例如:当系统应用程序(如屏幕键盘)使用清单文件中设置的名称时。
一团糟,太不一致了。
任何人都更确切地知道它是怎么做的?
有关更多信息,我在c#中为所有COM接口家族使用了自己的自定义包装器(类似于NAudio,但我不想自己构建它来学习)
答案 0 :(得分:0)
最后我会得到一个令人满意的答案。
SndVol32.exe(VolumeMixer)有点混乱。基本工作是:
还有一件事!
这不适用于UWP Apps。对于UWP Apps,sndvol可以读取App的Appxmanifest.xml的“ DisplayName”,即使是资源引用(例如<DisplayName>ms-resource:......</DisplayName>
)
还有一件事!
SndVol32侦听MainWindowTitle的更改(wineventhooks?winhooks?没关系),但不侦听最小化到托盘或从托盘事件重新标准化的窗口(例如):