2011-03-31 84 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