Получить имя процесса или идентификатор из аудиопотока CSCore
Я отфильтровал все аудиопотоки из моих программ с помощью CSCore lib. Это работает нормально, но я не знаю, какой поток принадлежит какому процессу. Есть ли способ получить processId или имя процесса для каждого потока?
мой код:
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;
}
}
}
}
большое спасибо!
1 ответ
Решение
Вы должны запросить экземпляр AudioSessionControl2
объект:
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;
}
}
}
}