如何在Powershell中识别默认音频设备?

时间:2019-12-18 13:56:12

标签: powershell audio-device

我正在寻找一种通过Powershell获得默认音频设备的解决方案。 最好的情况是,它可以通过嵌入式C#代码直接使用IMMDeviceEnumerator :: GetDefaultAudioEndpoint(请参见IMMDeviceEnumertor)。

但是,如果更容易通过RegKeys获得此密码,则也可以。 我已经看到几个代码片段,它们从HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ MMDevices \ Audio \ Render或\ Capture中读取密钥,但是我仍然很难识别DEFAULT设备。

似乎,当我确实修改设备的顺序时,我可以简单地搜索活动设备(DeviceState = 1),然后按值“ Level:0”,“ Level:1”和“ Level:2”进行排序”,但级别值在用户未手动修改订单的系统上不可用。在这种情况下,分类标准是什么?

这是通过RegKeys解决该问题的代码段,但如上所述-不适用于所有情况:

$regAudio =  "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio"
$nameId = "{b3f8fa53-0004-438e-9003-51a46e139bfc},6"
$classId = "{a45c254e-df1c-4efd-8020-67d146a850e0},2"
$driverDetails = "{83da6326-97a6-4088-9453-a1923f573b29},3"

function get-DefaultDevice($type) {
    $activeDevices = foreach($key in  Get-ChildItem "$regAudio\$type\") {
        foreach($item in Get-ItemProperty $key.PsPath) { 
            if ($item.DeviceState -eq $activeState) {$item}
        }
    }
    $defaultDevice = $activeDevices | Sort-Object -Property "Level:0","Level:1","Level:2" | select -last 1
    $details = Get-ItemProperty "$($defaultDevice.PSPath)\Properties"
    $name = "$($details.$classId) ($($details.$nameId))"
    return @{
        name   = $name
        driver = $details.$driverDetails
    }
}

$OsRender = get-DefaultDevice "Render"
$OsCapture = get-DefaultDevice "Capture"

有没有办法以“聪明的方式”(当然没有任何外部DLL)来获取此信息?

1 个答案:

答案 0 :(得分:0)

最后,我弄清楚了,很高兴分享工作代码片段:

├── main.py
└── pyf1
    ├── selector.pyc
    ├── selectors
    |   ├── __init__.py
    │   ├── season_selector.py
    │   ├── season_Selector.pyc
    │   ├── selector.py
    │   ├── selector.pyc
    │   └── __init__.pyc
    ├── __init__.py
    ├── __init__.pyc
    ├── __pycache__
    │   └── __init__.cpython-38.pyc
    └── data