2011-03-31 152 views
1

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

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

回答

0

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

莫比是这样的:在底部

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

VB实现。 祝你好运!

+0

我想不通为什么这么难!基本上,每一种做任何记录的软件都需要具有选择输入设备的功能。这确实没有什么不同。 – Icode4food 2011-03-31 11:58:49

+0

是VB.Net(VB 9)中的声明吗? – Oneide 2011-03-31 12:39:06

+0

它看起来不比任何Windows API调用困难。您应该感谢您使用开发平台,通过使用Windows API调用来扩展功能。我不知道任何可比较的数据库开发工具都可以做到这一点(与Access完全可比的唯一工具是FileMaker Pro和OpenOffice Base)。我有兴趣听到他们是否可以。 – 2011-04-02 02:17:27

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 
+0

这列出了我系统上的声卡。这不是我需要的。我需要的是在声卡上物理地列出输入端口,例如麦克风,线路等。 – Icode4food 2011-04-04 18:17:05