从CSCore音频流中获取进程名称或ID [英] Get processname or ID from CSCore audiostream

查看:205
本文介绍了从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆