- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目标是使可以播放 Flash 视频的 WebBrowser 控件静音。所以我发现这段代码非常有用:https://stackoverflow.com/a/14322736/990618
问题是当您期望来自 GetDisplayName
的某种 id 时,一些枚举为空。 ,我会得到 3-4 个空白和 2 个可以的,例如“Mozilla Firefox”和 "@%SystemRoot%\System32\AudioSrv.Dll,-202"
这是系统声音。
所以继续尝试GetProcessId、GetSessionIdentifier 和GetSessionInstanceIdentifier。GetProcessId
将只返回零和一,GetSessionIdentifier
与 GetDisplayName
相同的结果, GetSessionInstanceIdentifier
所有空白。
为什么这些空白和零和一?
这是修改后的 EnumerateApplications
:
public static IEnumerable<string> EnumerateApplications()
{
// get the speakers (1st render + multimedia) device
IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());
IMMDevice speakers;
deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers);
// activate the session manager. we need the enumerator
Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID;
object o;
speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o);
IAudioSessionManager2 mgr = (IAudioSessionManager2)o;
// enumerate sessions for on this device
IAudioSessionEnumerator sessionEnumerator;
mgr.GetSessionEnumerator(out sessionEnumerator);
int count;
sessionEnumerator.GetCount(out count);
for (int i = 0; i < count; i++)
{
IAudioSessionControl ctl;
IAudioSessionControl2 ctl2;
sessionEnumerator.GetSession(i, out ctl);
ctl2 = ctl as IAudioSessionControl2;
string dn;
UInt32 pid = 0;
string sout = "";
if (ctl2 != null)
ctl2.GetSessionIdentifier(out sout);
//ctl.GetDisplayName(out dn);
// ctl2.GetProcessId(out pid);
//yield return pid.ToString();
yield return sout;
if (ctl != null)
Marshal.ReleaseComObject(ctl);
if (ctl2 != null)
Marshal.ReleaseComObject(ctl2);
}
Marshal.ReleaseComObject(sessionEnumerator);
Marshal.ReleaseComObject(mgr);
Marshal.ReleaseComObject(speakers);
Marshal.ReleaseComObject(deviceEnumerator);
}
[Guid("bfb7ff88-7239-4fc9-8fa2-07c950be9c6d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IAudioSessionControl2
{
[PreserveSig]
int GetProcessId([Out] [MarshalAs(UnmanagedType.U4)] out UInt32 processId);
[PreserveSig]
int GetSessionIdentifier([Out] [MarshalAs(UnmanagedType.LPWStr)] out string pRetVal);
[PreserveSig]
int GetSessionInstanceIdentifier([Out] [MarshalAs(UnmanagedType.LPWStr)] out string pRetVal);
}
最佳答案
正确声明 CoreAudio
界面让一切变得不同......
我使用了您的代码,但使用了 CoreAudioNET 中的接口(interface)声明图书馆,一切都按预期工作:
由于代码比较丰富,这里就不贴了,你可以从这个链接下载:Source Code
关于c# - IAudioSessionControl2 出现问题,使 WebBrowser 控件静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16139911/
几个小时以来,我一直在为这个问题而发疯。从本质上讲,我已经开始开发一项服务,该服务允许用户通过通过 TCP 向服务器应用程序发送数据包来控制单个应用程序的音量。这是一个业余爱好者项目,可以进一步加深我
我是一名优秀的程序员,十分优秀!