【问题标题】:Get processname or ID from CSCore audiostream从 CSCore 音频流中获取进程名或 ID
【发布时间】:2015-02-02 13:00:51
【问题描述】:

我已经使用 CSCore 库过滤了我的程序中的所有音频流。它工作正常,但我不知道哪个流属于哪个进程。 有没有办法获取每个流的 processId 或 processname?

我的代码:

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;
            }
        }
    }
}

非常感谢!

【问题讨论】:

    标签: c# cscore


    【解决方案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;
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      相关资源
      最近更新 更多