diesen Code habe ich geschrieben um erstmal den Aufbau der Mixerabfragen zu verstehen.
Die Ausgabe beinhaltet eigentlich alle Wichtigen Informationen wie Lautstärke Name, usw..
KEIN VISTA! Außer ihr stellt den Kompatibiltätsmodus (ist ja logisch) auf XP...
viel spaß damit
PS:über diverse verbesserungen würde ich mich freuen ^^
Code: Alles auswählen
EnableExplicit
Define err.l;
Define HMIXER.l;
Define iNumDevs.l, i.l,mixerhandle.l,mixerID.l,numSRC.l,n;
Define mixcaps.MIXERCAPS ;
Define mixerline.MIXERLINE ;
Define mixerLineControls.MIXERLINECONTROLS;
Define value.MIXERCONTROLDETAILS_UNSIGNED;
Define mixerControlDetails.MIXERCONTROLDETAILS
Structure MIXERCONTROL
cbStruct.l
dwControlID.l
dwControlType.l
fdwControl.l
cMultipleItems.l
szShortName.b[#MIXER_SHORT_NAME_CHARS]
szName.b[#MIXER_LONG_NAME_CHARS];
lMinimum.l
lMaximum.l
dwMinimum.l
dwMaximum.l
Reserved.l[6];
cSteps.l
cbCustomData.l;
dwReserved.l[6];
EndStructure
Dim mixcont.mixercontrol(0)
Declare.s GetType(Value)
err = mixerOpen_(@HMIXER, 0, 0, 0, 0);
If err
Debug "ERROR: Can't open Mixer Device! -- "+Str(err)
Else
mixerhandle = err
err = mixerGetID_(mixerhandle, @mixerID, #MIXER_OBJECTF_HMIXER);
If err
Debug "ERROR: Can't get Mixer Device ID! -- "+Str(err)
Else
iNumDevs = mixerGetNumDevs_()
For i = 0 To iNumDevs
If Not mixerGetDevCaps_(i, @mixcaps, SizeOf(MIXERCAPS))
Debug "Device ID "+Str(i)
Debug "Name: "+PeekS(@mixcaps\szPname,mixcaps\szPname)
Debug "----------------------------"
For i = 0 To mixcaps\cDestinations
mixerline\cbStruct = SizeOf(MIXERLINE)
mixerline\dwDestination = i;
err = mixerGetLineInfo_(mixerHandle, @mixerline, #MIXER_GETLINEINFOF_DESTINATION)
If Not err
Debug "|--Destination "+Str(i)+" = "+PeekS(@mixerline\szName)
numSrc = mixerline\cConnections;
ReDim mixcont.mixercontrol(numSrc)
For n = 0 To numSrc
mixerline\cbStruct = SizeOf(MIXERLINE);
mixerline\dwDestination = i;
mixerline\dwSource = n;
err = mixerGetLineInfo_(mixerHandle, @mixerline, #MIXER_GETLINEINFOF_SOURCE)
If Not err
Debug " |-- "+PeekS(@mixerline\szName)
Debug " |-- Source "+Str(n)
Debug " |-- LineID: "+Str(mixerline\dwlineID.l)
Debug " |-- Controls: "+Str(mixerline\cControls)
Debug " |-- SRC_Type: "+GetType(mixerline\dwComponentType)
ReDim mixcont.mixercontrol(mixerline\cControls)
mixerLineControls\cbStruct = SizeOf(MIXERLINECONTROLS)
mixerLineControls\cControls = mixerline\cControls
mixerLineControls\dwLineID = mixerline\dwlineID.l
mixerLineControls\pamxctrl = @mixcont(0)
mixerLineControls\cbmxctrl = SizeOf(MIXERCONTROL)
err = mixerGetLineControls_(mixerHandle, @mixerLineControls, #MIXER_GETLINECONTROLSF_ALL)
If Not err
Debug " |-- ControlID:"+Str(mixcont(0)\dwControlID)
mixerControlDetails\cbStruct = SizeOf(MIXERCONTROLDETAILS)
mixerControlDetails\dwControlID = mixcont(0)\dwControlID
mixerControlDetails\cChannels = 1
mixerControlDetails\paDetails = @value
mixerControlDetails\cbDetails = SizeOf(MIXERCONTROLDETAILS_UNSIGNED);
err = mixerGetControlDetails_(mixerHandle, @mixerControlDetails, #MIXER_GETCONTROLDETAILSF_VALUE)
If err
Debug " |-- Error #%d calling mixerGetControlDetails() "+Str(err)
Else
If Not value\dwValue < 31
Debug " |-- Volume: "+Str( (value\dwValue/31) / (mixcont(0)\lMaximum.l/31/100))+"%"
Else
Debug " |-- Volume: 0%"
EndIf
EndIf
Else
Debug " |-- Error calling mixerGetLineControls() "+Str(err)
EndIf
EndIf
Next
Debug ""
EndIf
Next
EndIf
Next
EndIf
EndIf
Procedure.s GetType(Value)
Select Value
Case #MIXERLINE_COMPONENTTYPE_SRC_DIGITAL
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_DIGITAL"
Case #MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE"
Case #MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER"
Case #MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC"
Case #MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE"
Case #MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER"
Case #MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT"
Case #MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY"
Case #MIXERLINE_COMPONENTTYPE_SRC_ANALOG
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_ANALOG"
Case #MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED
ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED"
Case #MIXERLINE_COMPONENTTYPE_DST_DIGITAL
ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_DIGITAL"
Case #MIXERLINE_COMPONENTTYPE_DST_LINE
ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_LINE"
Case #MIXERLINE_COMPONENTTYPE_DST_MONITOR
ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_MONITOR"
Case #MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_SPEAKERS"
Case #MIXERLINE_COMPONENTTYPE_DST_HEADPHONES
ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_HEADPHONES"
Case #MIXERLINE_COMPONENTTYPE_DST_TELEPHONE
ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_TELEPHONE"
Case #MIXERLINE_COMPONENTTYPE_DST_WAVEIN
ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_WAVEIN"
Case #MIXERLINE_COMPONENTTYPE_DST_VOICEIN
ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_VOICEIN"
Case #MIXERLINE_COMPONENTTYPE_DST_UNDEFINED
ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_UNDEFINED"
Default
ProcedureReturn "?"
EndSelect
EndProcedure