列出音频输入设备 - VBA

时间:2011-03-31 02:30:07

标签: winapi ms-access vba audio

我有一些复杂的Access数据库,我需要进行一些录音。我几乎所有人都使用外部解决方案,但我被迫从Access中选择我的输入设备。

我需要的是从Windows获取设备或东西的一些方法,我可以从那里获取它。 http://www.vbmonster.com/Uwe/Forum.aspx/vb/32848/listing-all-audio-devices做了一些接近我正在寻找的东西,除了那是输出而不是输入。我知道没有非常简单的方法来实现这一目标,但我知道这是可能的,我似乎无法找到如何。

2 个答案:

答案 0 :(得分:1)

您链接的代码会创建一个SWbemObjectSet,然后列出其成员的属性(声音设备)。据我所知,你想要那个对象,但不想列出属性(“输出”)。

如果这是正确的,创建一个剥离输出语句的函数,只返回SWbemObjectSet对象。

Public Function getSoundDevices(Optional strComputer As String = ".") As Object
    Const cstrQuery As String = "Select * from Win32_SoundDevice"
    Dim objWMIService As Object 'TypeName = SWbemServicesEx '

    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set getSoundDevices = objWMIService.ExecQuery(cstrQuery, , 48)
    Set objWMIService = Nothing
End Function

然后调用该函数以使用SWbemObjectSet作为其他代码的输入。

Public Sub test_getSoundDevices()
    Dim objSoundDevices As Object 'TypeName = SWbemObjectSet '
    Dim objDevice As Object 'TypeName = SWbemObjectEx '
    Set objSoundDevices = getSoundDevices()
    For Each objDevice In objSoundDevices
        '* do what you want for each sound device here *'
        Debug.Print "ProductName: " & objDevice.ProductName
    Next objDevice
    Set objDevice = Nothing
    Set objSoundDevices = Nothing
End Sub

答案 1 :(得分:0)

嗯,不是最简单的问题:-)我认为你确实需要调用原生函数。

Maby是这样的:

http://msdn.microsoft.com/en-us/library/ms645598(v=vs.85).aspx

VB底层实现。 祝你好运!