Set Master/Mic Volume
Verfasst: 12.01.2007 00:32
Hab ich schnell von hier übertragen:
http://support.microsoft.com/kb/178456/de
Man kann die totale Lautstärke (Summe) und die Mikrofonlautstärke
setzen.
Setzt die Lautstärke auf 20 (kaum hörbar).
http://support.microsoft.com/kb/178456/de
Man kann die totale Lautstärke (Summe) und die Mikrofonlautstärke
setzen.
Code: Alles auswählen
EnableExplicit
Structure MIXERCONTROL
cbStruct.l
dwControlID.l
dwControlType.l
fdwControl.l
cMultipleItems.l
szShortName.s{#MIXER_SHORT_NAME_CHARS}
szName.s{#MIXER_LONG_NAME_CHARS}
lMinimum.l
lMaximum.l
dwReserved.l[10]
EndStructure
Procedure GetVolumeControl(hmixer.l, componentType.l, ctrlType.l, *mxc.MIXERCONTROL)
Protected mxlc.MIXERLINECONTROLS, mxl.MIXERLINE
Protected hmem.l, rc.l, ret.l
mxl\cbStruct = SizeOf(mxl)
mxl\dwComponentType = componentType
rc = mixerGetLineInfo_(hmixer, mxl, #MIXER_GETLINEINFOF_COMPONENTTYPE)
If #MMSYSERR_NOERROR = rc
mxlc\cbStruct = SizeOf(mxlc)
mxlc\dwLineID = mxl\dwLineID
mxlc\dwControlType = ctrlType
mxlc\cControls = 1
mxlc\cbmxctrl = SizeOf(MIXERCONTROL)
hmem = GlobalAlloc_($40, SizeOf(MIXERCONTROL))
mxlc\pamxctrl = GlobalLock_(hmem)
*mxc\cbStruct = SizeOf(MIXERCONTROL) ; oder sizeof)*mxc( ??
rc = mixerGetLineControls_(hmixer, @mxlc, #MIXER_GETLINECONTROLSF_ONEBYTYPE)
If rc = #MMSYSERR_NOERROR
ret = #True
CopyMemory(mxlc\pamxctrl, *mxc, SizeOf(MIXERCONTROL))
Else
ret = #False
EndIf
GlobalFree_(hmem)
ProcedureReturn ret
EndIf
ProcedureReturn #False
EndProcedure
Procedure SetVolumeControl(hmixer.l, *mxc.MIXERCONTROL, volume.l)
Protected mxcd.MIXERCONTROLDETAILS
Protected vol.MIXERCONTROLDETAILS_UNSIGNED
Protected hmem.l, rc.l
mxcd\item = 0
mxcd\dwControlID = *mxc\dwControlID
mxcd\cbStruct = SizeOf(mxcd)
mxcd\cbDetails = SizeOf(vol)
hmem = GlobalAlloc_($40, SizeOf(vol))
mxcd\paDetails = GlobalLock_(hmem)
mxcd\cChannels = 1
vol\dwValue = volume
CopyMemory(@vol, mxcd\paDetails, SizeOf(vol))
rc = mixerSetControlDetails_(hmixer, @mxcd, #MIXER_SETCONTROLDETAILSF_VALUE)
GlobalFree_(hmem)
If #MMSYSERR_NOERROR = rc
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Global hmixer.l, volCtrl.MIXERCONTROL, micCtrl.MIXERCONTROL
Global rc.l, ok.l
Procedure Load()
rc = mixerOpen_(@hmixer, 0, 0, 0, 0)
If rc <> #MMSYSERR_NOERROR
MessageRequester("shit", "Could not open the mixer!")
ProcedureReturn
EndIf
If GetVolumeControl(hmixer, #MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, #MIXERCONTROL_CONTROLTYPE_VOLUME, @volCtrl)
Debug "# "+volCtrl\szName+":"
Debug "Minimum: " + Str(volCtrl\lMinimum)
Debug "Maximum: " + Str(volCtrl\lMaximum)
EndIf
If GetVolumeControl(hmixer, #MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, #MIXERCONTROL_CONTROLTYPE_VOLUME, @micCtrl)
Debug "# "+micCtrl\szName+":"
Debug "Minimum: " + Str(micCtrl\lMinimum)
Debug "Maximum: " + Str(micCtrl\lMaximum)
EndIf
If SetVolumeControl(hmixer, volCtrl, 20)
Debug "Set to 20"
EndIf
EndProcedure
Load()