ROSTAM2
جمعه 20 مرداد 1402, 09:01 صبح
سلام.
من نیاز به دریافت لیست سخت افزارهای ورودی صدا دارم که این کد دیوایس ها رو بدون اطلاعات وزودی یا خروجی بودن برمی گردونه:
Dim objSearcher As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_SoundDevice")
Dim objCollection As System.Management.ManagementObjectCollection = objSearcher.Get()
For Each obj As System.Management.ManagementObject In objCollection
If GetPropertyValue(obj, "Status") = "OK" Then
DeviceComboBox.Items.Add(obj)
End If
Next
Function GetPropertyValue(obj As System.Management.ManagementObject, PName As String) As Object
Return obj.GetPropertyValue(PName)
End Function
مطمئنا مشخصه ای باید وجود داشته باشه تا بشه اطلاعات کلی رجیستر شده سخت افزار رو از رجیستری فراخواند ولی من مطمئن نیستم کدوم مشخصه لازمه برای گرفتن این اطلاعات.
چیزی که هست من همه دیوایس های رجیستر شده در رجیستری رو که مربوط به Audio می شه رو به یک لیست کشویی اضافه کردم، منتها چون برنامه من یک رکوردر صوتی هست ققط دیوایس های صدای ورودی باید لیست بشه:
Private RegistryDevicesPath As Microsoft.Win32.RegistryKey
Dim DeviceKind As String, DeviceMame As String
RegistryDevicesPath = My.Computer.Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\Enum\SWD\MMDEVAPI", False)
For Each Rk As String In RegistryDevicesPath.GetSubKeyNames
With RegistryDevicesPath.OpenSubKey(Rk, Microsoft.Win32.RegistryKeyPermissionCheck.ReadSub Tree)
'If Me.HardwareList.Contains(.GetValue("ContainerID", "")) = True Then
DeviceKind = .GetValue("ContainerID", "")
DeviceMame = .GetValue("FriendlyName", "")
DeviceComboBox.Items.Add(String.Format("{1}", DeviceKind, DeviceMame))
' End If
End With
Next
If Me.DeviceComboBox.Items.Count > 0 Then
Me.DeviceComboBox.SelectedIndex = 0
End If
154856
و اینکه اون سخت افزار ورودی که در رجیستری موجود هست ممکنه از سیستم حذف شده باشه بنابراین تنها استفاده از رجیستری کارآمد نیست.
اگر اطلاعاتی در این زمینه دارید ممنون می شم اینجا به اشتراک بگذارید.
من نیاز به دریافت لیست سخت افزارهای ورودی صدا دارم که این کد دیوایس ها رو بدون اطلاعات وزودی یا خروجی بودن برمی گردونه:
Dim objSearcher As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_SoundDevice")
Dim objCollection As System.Management.ManagementObjectCollection = objSearcher.Get()
For Each obj As System.Management.ManagementObject In objCollection
If GetPropertyValue(obj, "Status") = "OK" Then
DeviceComboBox.Items.Add(obj)
End If
Next
Function GetPropertyValue(obj As System.Management.ManagementObject, PName As String) As Object
Return obj.GetPropertyValue(PName)
End Function
مطمئنا مشخصه ای باید وجود داشته باشه تا بشه اطلاعات کلی رجیستر شده سخت افزار رو از رجیستری فراخواند ولی من مطمئن نیستم کدوم مشخصه لازمه برای گرفتن این اطلاعات.
چیزی که هست من همه دیوایس های رجیستر شده در رجیستری رو که مربوط به Audio می شه رو به یک لیست کشویی اضافه کردم، منتها چون برنامه من یک رکوردر صوتی هست ققط دیوایس های صدای ورودی باید لیست بشه:
Private RegistryDevicesPath As Microsoft.Win32.RegistryKey
Dim DeviceKind As String, DeviceMame As String
RegistryDevicesPath = My.Computer.Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\Enum\SWD\MMDEVAPI", False)
For Each Rk As String In RegistryDevicesPath.GetSubKeyNames
With RegistryDevicesPath.OpenSubKey(Rk, Microsoft.Win32.RegistryKeyPermissionCheck.ReadSub Tree)
'If Me.HardwareList.Contains(.GetValue("ContainerID", "")) = True Then
DeviceKind = .GetValue("ContainerID", "")
DeviceMame = .GetValue("FriendlyName", "")
DeviceComboBox.Items.Add(String.Format("{1}", DeviceKind, DeviceMame))
' End If
End With
Next
If Me.DeviceComboBox.Items.Count > 0 Then
Me.DeviceComboBox.SelectedIndex = 0
End If
154856
و اینکه اون سخت افزار ورودی که در رجیستری موجود هست ممکنه از سیستم حذف شده باشه بنابراین تنها استفاده از رجیستری کارآمد نیست.
اگر اطلاعاتی در این زمینه دارید ممنون می شم اینجا به اشتراک بگذارید.