Soundkarten lange Namen - waveOutGetDevCaps

04/05/2012 - 16:09 von Martin KoWi | Report spam
Hallo zusammen,

ich brauche die Namen der installierten Audiotreiber.
Das ist soweit kein Problem, allerdings werden die Namen auf 16 zeichen
beschnitten.
Das ist nicht nur unschön, sondern bei langen Namen auch uneindeutig.
Laut MSDN ist aber ProductName(1 To 32) As Byte deklariert.
Selbst wenn ich hier einen größeren Buffer vorsehe, bekomme ich nur die
ersten 32 Bytes/16 Zeichen befüllt.
Weiß wer wie ich an die vollstàndigen Namen komme?

Unten ein Code-Bsp.

danke, martin.

Private Declare Function waveOutGetDevCaps Lib "winmm.dll" _
Alias "waveOutGetDevCapsA" (ByVal uDeviceID As Long, _
lpCaps As WaveOutCaps, ByVal uSize As Long) As Long

Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long

Private Type WaveOutCaps
ManufacturerID As Integer
ProductId As Integer
DriverVersion As Long
ProductName(1 To 32) As Byte
Formats As Long
Channels As Integer
dwSupport As Long
End Type

Private Sub CheckDevs()
Dim Caps As WaveOutCaps
Dim i As Long
Dim sName As String

For i = 0 To waveOutGetNumDevs - 1
Call waveOutGetDevCaps(i, Caps, Len(Caps))
sName = TrimNull(StrConv(Caps.ProductName, vbUnicode))
Debug.Print "Dev " & i & ": " & sName
Next i

End Sub
 

Lesen sie die antworten

#1 Thorsten Albers
04/05/2012 - 23:50 | Warnen spam
Martin KoWi schrieb im Beitrag
<jo0nvj$10c$...
Selbst wenn ich hier einen größeren Buffer vorsehe, bekomme ich nur die
ersten 32 Bytes/16 Zeichen befüllt.



Da Du die ANSI-Version der Funktion verwendest:
32 Bytes/32(!) Zeichen (inkl. terminierendem Null-Zeichen)

Wenn Du die UNICODE-Version verwenden würdest:
64 Bytes/32 Zeichen (inkl. terminierendem Null-Zeichen)

Weiß wer wie ich an die vollstàndigen Namen komme?

Private Declare Function waveOutGetDevCaps Lib "winmm.dll" _
Alias "waveOutGetDevCapsA" (ByVal uDeviceID As Long, _
lpCaps As WaveOutCaps, ByVal uSize As Long) As Long

Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long

Private Type WaveOutCaps
ManufacturerID As Integer
ProductId As Integer
DriverVersion As Long
ProductName(1 To 32) As Byte
Formats As Long
Channels As Integer



Hier fehlt noch ein
Reserved1 As Integer

dwSupport As Long
End Type



Aber beim eigentlichen Problem hilft das natürlich nicht weiter... :-(

Thorsten Albers

gudea at gmx.de

Ähnliche fragen