从CSCore音频流中获取进程名称或ID [英] Get processname or ID from CSCore audiostream
本文介绍了从CSCore音频流中获取进程名称或ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经使用CSCore lib过滤了程序中的所有音频流.它工作正常,但是我不知道哪个流属于哪个进程. 有没有一种方法来获取每个流的processId oder进程名?
I have filtered all audio streams from my programs with CSCore lib. It works fine, but I have no idear which stream belong to which process. Is there a way to get the processId oder processname per stream?
我的代码:
public class Audio
{
public static void start(ListBox device, ListBox process)
{
using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))
{
using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
{
foreach (var session in sessionEnumerator)
{
using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
{
device.Items.Add(audioMeterInformation.GetPeakValue());
process.Items.Add("here I need the processname or ID");
}
}
}
}
}
private static AudioSessionManager2 GetDefaultAudioSessionManager2(DataFlow dataFlow)
{
using (var enumerator = new MMDeviceEnumerator())
{
using (var device = enumerator.GetDefaultAudioEndpoint(dataFlow, Role.Multimedia))
{
var sessionManager = AudioSessionManager2.FromMMDevice(device);
return sessionManager;
}
}
}
}
非常感谢!
推荐答案
您必须查询AudioSessionControl2
对象的实例:
You have to query an instance of the AudioSessionControl2
object:
public class Audio
{
public static void start(ListBox device, ListBox process)
{
using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))
{
using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
{
foreach (var session in sessionEnumerator)
{
using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
using(var session2 = session.QueryInterface<AudioSessionControl2>())
{
device.Items.Add(audioMeterInformation.GetPeakValue());
var processID = session2.ProcessID;
process.Items.Add("here I need the processname or ID");
}
}
}
}
}
private static AudioSessionManager2 GetDefaultAudioSessionManager2(DataFlow dataFlow)
{
using (var enumerator = new MMDeviceEnumerator())
{
using (var device = enumerator.GetDefaultAudioEndpoint(dataFlow, Role.Multimedia))
{
var sessionManager = AudioSessionManager2.FromMMDevice(device);
return sessionManager;
}
}
}
}
这篇关于从CSCore音频流中获取进程名称或ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文