2009-10-06 18 views
8

मैं चाहूँगा सी # में उपकरणों पता है कि कैसे एक मशीन पर स्थापित ऑडियो बाहर उपकरणों (waveOut) की एक सूची प्राप्त करने के लिएऑडियो बाहर की गणना करने में कैसे

ओएस: विंडोज (XP, विस्टा, 7) फ्रेमवर्क: .NET 3.5 भाषा: सी #

इस सूची के माध्यम से पुन: प्रयास करते समय मैं प्रति डिवाइस पहचानकर्ता, निर्माता, ... जैसे जानकारी प्राप्त करना चाहता हूं।

कोई संकेत?

+0

जांच WMI ... –

उत्तर

15

के लिए एक संदर्भ जोड़ें यहाँ सी # में ऑडियो उपकरणों की गणना करने में कोड है, WMI (संदर्भ System.Management) का उपयोग कर।

ManagementObjectSearcher objSearcher = new ManagementObjectSearcher(
      "SELECT * FROM Win32_SoundDevice"); 

    ManagementObjectCollection objCollection = objSearcher.Get(); 

    foreach (ManagementObject obj in objCollection) 
    { 
     foreach (PropertyData property in obj.Properties) 
     { 
      Console.Out.WriteLine(String.Format("{0}:{1}", property.Name, property.Value)); 
     } 
    } 

कौन सा की तरह उत्पादन कुछ में परिणाम:

 
Availability: 
Caption:USB Audio Device 
ConfigManagerErrorCode:0 
ConfigManagerUserConfig:False 
CreationClassName:Win32_SoundDevice 
Description:USB Audio Device 
DeviceID:USB\VID_047F&PID_0CA1&MI_00\6&2C037688&0&0000 
DMABufferSize: 
ErrorCleared: 
ErrorDescription: 
InstallDate: 
LastErrorCode: 
Manufacturer:(Generic USB Audio) 
MPU401Address: 
Name:USB Audio Device 
PNPDeviceID:USB\VID_047F&PID_0CA1&MI_00\6&2C037688&0&0000 
PowerManagementCapabilities: 
PowerManagementSupported:False 
ProductName:USB Audio Device 
Status:OK 
StatusInfo:3 
SystemCreationClassName:Win32_ComputerSystem 
SystemName: 
Availability: 

Caption:Realtek AC'97 Audio for VIA (R) Audio Controller 
ConfigManagerErrorCode:0 
ConfigManagerUserConfig:False 
CreationClassName:Win32_SoundDevice 
Description:Realtek AC'97 Audio for VIA (R) Audio Controller 
DeviceID:PCI\VEN_1106&DEV_3059&SUBSYS_09011558&REV_60\3&61AAA01&1&8D 
DMABufferSize: 
ErrorCleared: 
ErrorDescription: 
InstallDate: 
LastErrorCode: 
Manufacturer:Realtek 
MPU401Address: 
Name:Realtek AC'97 Audio for VIA (R) Audio Controller 
PNPDeviceID:PCI\VEN_1106&DEV_3059&SUBSYS_09011558&REV_60\3&61AAA01&1&8D 
PowerManagementCapabilities: 
PowerManagementSupported:False 
ProductName:Realtek AC'97 Audio for VIA (R) Audio Controller 
Status:OK 
StatusInfo:3 
SystemCreationClassName:Win32_ComputerSystem 
SystemName: 
Availability: 

WMI annoyingly ऑडियो के लिए इनपुट और आउटपुट डिवाइस के बीच बस भेद करने के लिए प्रकट नहीं होता। हालांकि, डायरेक्टसाउंड में प्रबंधित इंटरफ़ेस का उपयोग करके, और डिवाइस कोलेक्शन क्लास, जैसा कि नीचे है (संदर्भ Microsoft.DirectX.DirectSound), हम बहुत अधिक ध्वनि उन्मुख जानकारी प्राप्त कर सकते हैं।

 DevicesCollection devColl = new DevicesCollection(); 
     foreach (DeviceInformation devInfo in devColl) 
     { 
      Device dev = new Device(devInfo.DriverGuid); 

      //use dev.Caps, devInfo to access a fair bit of info about the sound device 
     } 
+0

क्या आप जानते हैं अगर यह कुछ ऑडियो डिवाइस के जैक सूचना प्राप्त करने के लिए संभव है? –

+0

मुझे यकीन नहीं है, शायद https://msdn.microsoft.com/en-us/library/windows/desktop/dd370793(v=vs.85).aspx पर देखें - अंधेरे में बस एक स्टैब। – Kazar

+0

प्रबंधित डायरेक्टएक्स को कुछ समय से बहिष्कृत कर दिया गया है। –

3

यहाँ एक उदाहरण

है System.Management

ManagementObjectSearcher mo = new ManagementObjectSearcher("select * from Win32_SoundDevice"); 

foreach (ManagementObject soundDevice in mo.Get()) 
{ 
    Console.WriteLine(soundDevice.GetPropertyValue("DeviceId")); 
    Console.WriteLine(soundDevice.GetPropertyValue("Manufacturer")); 
    // etc      
} 
-2

चेक waveOutGetNumDevs एपीआई

[DllImport("winmm.dll", SetLastError = true)] 
public static extern uint waveOutGetNumDevs(); 

उपकरणों की संख्या देता है। शून्य का एक वापसी मान का अर्थ है कि कोई डिवाइस मौजूद नहीं है या कोई त्रुटि हुई है। http://msdn.microsoft.com/en-us/library/dd743860(v=vs.85).aspx

+1

यह केवल आपको डिवाइस की संख्या देता है। आप उन्हें कैसे समझाते हैं? –

0
 /// <summary> 
     /// The DirectSoundEnumerate function enumerates the DirectSound Odrivers installed in the system. 
     /// </summary> 
     /// <param name="lpDSEnumCallback">callback function</param> 
     /// <param name="lpContext">User context</param> 
     [DllImport("dsound.dll", EntryPoint = "DirectSoundEnumerateA", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
     static extern void DirectSoundEnumerate(DevicesEnumCallback lpDSEnumCallback, IntPtr lpContext); 

और कॉलबैक इस तरह करने चाहिए:

private static bool DevicesEnumCallbackHandler(IntPtr lpGuid, IntPtr lpcstrDescription, IntPtr lpcstrModule, IntPtr lpContext) 
5

Windows Vista में और आप IMMDeviceEnumerator जो आदेश ऑडियो endpoint उपकरणों की गणना करने में NAudio द्वारा आप के लिए लपेटा जाता है का उपयोग कर सकते ऊपर। उदाहरण के लिए:

var enumerator = new MMDeviceEnumerator(); 
foreach (var endpoint in 
     enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active)) 
{ 
    Console.WriteLine(endpoint.FriendlyName); 
} 
+0

क्या आप जानते हैं कि कुछ ऑडियो डिवाइस की जैक जानकारी प्राप्त करना संभव है? –

संबंधित मुद्दे