Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 列出音频输入设备-VBA_Winapi_Ms Access_Vba_Audio - Fatal编程技术网

Winapi 列出音频输入设备-VBA

Winapi 列出音频输入设备-VBA,winapi,ms-access,vba,audio,Winapi,Ms Access,Vba,Audio,我有一个复杂的Access数据库,我需要用它做一些音频录制。我几乎所有的东西都使用外部解决方案工作,但我不得不从Access中选择输入设备 我所需要的只是从Windows获取一组设备或其他东西,我可以从那里获取。除了输出而不是输入之外,做一些与我正在寻找的接近的事情。我知道没有非常简单的方法来实现这一点,但我知道这是可能的,我只是不知道如何实现。嗯,这不是最简单的问题:-)我认为您确实需要调用本机函数 也许是这样的: VB在底层实现。 祝你好运 嗯,这不是最简单的问题:-)我认为您确实需要调用

我有一个复杂的Access数据库,我需要用它做一些音频录制。我几乎所有的东西都使用外部解决方案工作,但我不得不从Access中选择输入设备


我所需要的只是从Windows获取一组设备或其他东西,我可以从那里获取。除了输出而不是输入之外,做一些与我正在寻找的接近的事情。我知道没有非常简单的方法来实现这一点,但我知道这是可能的,我只是不知道如何实现。

嗯,这不是最简单的问题:-)我认为您确实需要调用本机函数

也许是这样的:

VB在底层实现。
祝你好运

嗯,这不是最简单的问题:-)我认为您确实需要调用本机函数

也许是这样的:

VB在底层实现。
祝你好运

链接的代码创建一个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

链接的代码创建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

我不明白为什么这么难!基本上,每一个进行任何类型记录的软件都需要具备选择输入设备的功能。这真的没有什么不同。声明是在VB.Net(VB 9)中吗?它看起来并不比任何Windows API调用更难。您应该感谢您正在使用一个开发平台,该平台可以通过使用Windows API调用来扩展功能。我不知道有哪种类似的数据库开发工具可以做到这一点(真正可以与Access相比的工具只有FileMaker Pro和OpenOffice Base)。我很想听听他们是否可以。我并不害怕Windows API调用,我只是找不到关于它们是什么以及如何使用它们的示例或文档。我不明白为什么这么难!基本上,每一个进行任何类型记录的软件都需要具备选择输入设备的功能。这真的没有什么不同。声明是在VB.Net(VB 9)中吗?它看起来并不比任何Windows API调用更难。您应该感谢您正在使用一个开发平台,该平台可以通过使用Windows API调用来扩展功能。我不知道有哪种类似的数据库开发工具可以做到这一点(真正可以与Access相比的工具只有FileMaker Pro和OpenOffice Base)。我很想听听他们是否可以。我并不害怕Windows API调用,我只是找不到关于它们是什么以及如何使用它们的示例或文档。下面列出了我系统上的声卡。那不是我需要的。我需要的是列出声卡上的物理输入端口,如麦克风、线路输入等。这将列出我系统上的声卡。那不是我需要的。我需要的是列出声卡上的物理输入端口,如麦克风、线路输入等。