KinkMike,
vielen Dank für die detaillierteren Fehlermeldungen. Da ich PB 3.3 nicht besitze, kann ich nur an Hand der Fehlermeldungen vermuten, was in PB 3.3 an Strukturen noch nicht vordefiniert ist oder welche Anweisungen erst in späteren Versionen hinzugekommen sind.
Daher noch einmal ein neuer Versuch:
Ich habe das Beispiel von KarLKoX aus dem oben zitierten Link einmal modifiziert und versucht an PB 3.3 anzupassen, indem ich alle SizeOf()-Anweisungen (die in PB 3.3 offensichtlich noch nicht existierten) gegen die tatsächliche Strukturgröße ausgetauscht und alle Definitionen von Strings fester Länge, z.B. szName{}, gegen ein Byte-Array der gleichen Länge ersetzt habe. Außerdem habe ich die in PB 3.3 offensichtlich noch nicht definierten Strukturen MIXERLINE und MIXERLINE_TARGET definiert. Für die Benutzung unter PB 4 können die Zeilen 1-35 gelöscht weren. Dann ist der Code-Umfang auch nicht mehr so groß...
Code: Alles auswählen
#MIXERCONTROL_CONTROLTYPE_VOLUME = 1342373889
#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = 4101
#MIXER_GETLINECONTROLSF_ONEBYTYPE = 2
#MIXER_GETLINEINFOF_COMPONENTTYPE = 3
#MIXER_OBJECTF_HMIXER = 2147483648
#MIXER_SETCONTROLDETAILSF_VALUE = 0
#MIXER_LONG_NAME_CHARS = 64
#MIXER_SHORT_NAME_CHARS = 16
#MMSYSERR_NOERROR = 0
Structure MIXERLINE_TARGET
dwType.l
dwDeviceID.l
wMid.w
wPid.w
vDriverVersion.l
szPname.B[32]
EndStructure
Structure MIXERLINE
cbStruct.l
dwDestination.l
dwSource.l
dwLineID.l
fdwLine.l
dwUser.l
dwComponentType.l
cChannels.l
cConnections.l
cControls.l
szShortName.B[16]
szName.B[64]
Target.MIXERLINE_TARGET
EndStructure
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
reserved.l[10]
EndStructure
Procedure MIXER_setVolume(Type.l, NewVolume.l)
ml.MIXERLINE
mlc.MIXERLINECONTROLS
mc.MIXERCONTROL
mcd.MIXERCONTROLDETAILS
mcdu.MIXERCONTROLDETAILS_UNSIGNED
result = mixerOpen_(@hMixer, 0, 0, 0, #MIXER_OBJECTF_HMIXER)
If result = #MMSYSERR_NOERROR
ml\cbStruct = 168
ml\dwComponentType = Type
result = mixerGetLineInfo_(hMixer, @ml, #MIXER_GETLINEINFOF_COMPONENTTYPE)
If result = #MMSYSERR_NOERROR
mlc\cbStruct = 24
mlc\dwLineID = ml\dwLineID
mlc\dwControlType = #MIXERCONTROL_CONTROLTYPE_VOLUME
mlc\cControls = 1
mlc\pamxctrl = @mc
mlc\cbmxctrl = 148
result = mixerGetLineControls_(hMixer, @mlc, #MIXER_GETLINECONTROLSF_ONEBYTYPE)
If result = #MMSYSERR_NOERROR
mcdu\dwValue = NewVolume
mcd\cbStruct = 24
mcd\dwControlID = mc\dwControlID
mcd\paDetails = @mcdu
mcd\cbDetails = 4
mcd\cChannels = 1
result = mixerSetControlDetails_(hMixer, @mcd, #MIXER_SETCONTROLDETAILSF_VALUE)
If result = #MMSYSERR_NOERROR
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndIf
EndIf
EndIf
EndProcedure
NewVolume.L = 5000
If MIXER_setVolume(#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC, NewVolume)
Debug "Neue AudioCD-Lautstärke: " + Str(NewVolume)
EndIf