如何确定哪个 Windows 进程是控制当前进程输出的“音频会话”?

jez*_*jez 5 windows audio mixer process audiosession

我碰巧在这里使用 Python 绑定,但我怀疑这个问题和最终的答案不是 Python 特定的。

在 Windows 10 上,使用Python 绑定到 Windows 的核心音频库,特别是通过pycaw.AudioUtilities.GetAllSessions(),我可以看到有一个名称'conhost.exe'和 pid 为 11512的会话,并且通过基本的猜测/实验,我可以看到这是 (a) 管理的会话我当前进程的音频和 (b) 对应于 Windows 10 音量混合器中的“控制台窗口主机”滑块。这是我想从我的程序中操作的,并pycaw提供绑定来做到这一点。

到现在为止还挺好。我的问题是我没有看到任何从当前进程 ID 向后工作的方法,因此在下次启动时,我的程序可以询问“哪个进程对应于管理我的音频输出的会话?” 我天真地希望该会话 pid 可能出现在当前进程的祖先中,但它没有:

import os, psutil

psutil.Process(os.getpid())
# prints: psutil.Process(pid=3628, name='python.exe', started='14:56:41')

psutil.Process(os.getpid()).parent()
# prints: psutil.Process(pid=16676, name='cmd.exe', started='13:00:57')

psutil.Process(os.getpid()).parent().parent()
# prints: psutil.Process(pid=1356, name='explorer.exe', started='12:21:26')

psutil.Process(os.getpid()).parent().parent().parent()
# prints nothing. It's `None`. We've reached the top.
Run Code Online (Sandbox Code Playgroud)

我应该如何查询控制当前进程的任何音频会话的 pid?(我认为会话不会总是被命名——'conhost.exe有时我会pythonw.exe在没有控制台的情况下运行相同的代码。)