分享一个刻印枚举audio设备的函数:
# 导入mixer.dll
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
using System.Text;
public class AudioDevicesEnumerator
{
[DllImport("winmm.dll", CharSet = CharSet.Auto)]
public static extern int mixerGetNumDevs();
[DllImport("winmm.dll", CharSet = CharSet.Auto)]
public static extern int mixerGetDevCaps(int uMxId, ref MIXERCAPS mixerCaps, int cbMixerCaps);
[DllImport("winmm.dll", CharSet = CharSet.Auto)]
public static extern int mixerOpen(out IntPtr phmx, int uMxId, IntPtr dwCallback, IntPtr dwInstance, int fdwOpen);
[DllImport("winmm.dll", CharSet = CharSet.Auto)]
public static extern int mixerClose(IntPtr hmx);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct MIXERCAPS
{
public ushort wMid;
public ushort wPid;
public uint vDriverVersion;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string szPname;
public uint fdwSupport;
public uint cDestinations;
}
}
"@
function audio-enumdevs(){
$deviceCount = [AudioDevicesEnumerator]::mixerGetNumDevs();
for ($i = 0; $i -lt $deviceCount; $i++)
{
$mixerCaps = New-Object AudioDevicesEnumerator+MIXERCAPS
$result = [AudioDevicesEnumerator]::mixerGetDevCaps($i, [ref] $mixerCaps, [System.Runtime.InteropServices.Marshal]::SizeOf($mixerCaps));
$mixerCaps.szPname
}
}
audio-enumdevs