Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.
If you understand Visual Basic try Set the master volume level at http://www.devx.com/vb2themax/Tip/19040. Note: you could try converting this Vb code to WinBatch code.
OR
Check out QuickMix from Martin Saxon Systems http://www.ptpart.co.uk/quickmix/. Does everything I wanted, and a few things I didn't know I wanted to boot.
OR
Following is not a "solution" but can be a hint into the right direction. I have a file with some collected code and cut some lines out. I have tried it some time ago, but did not come to a final solution. There are some wheels to turn to handle the speaker volume.
You have to look into and play with the "Mixer API Support (winmm.dll)"
; *************************************************************************** ; Mixer API Support (winmm.dll) ; *************************************************************************** #DefineSubRoutine udsDefineConstants () MMSYSERR_NOERROR = 0 MX_SHORT_NAME_CHARS = 16 MX_LONG_NAME_CHARS = 64 MAXPNAMELEN = 32 ; max product name length (including NULL) MAXERRORLENGTH = 128 ; max error text length (including final NULL) MM_MIXM_LINE_CHANGE = 976 ; mixer line change notify ; &H3D0 MM_MIXM_CONTROL_CHANGE = 977 ; mixer control change notify ; &H3D1 ; ; MMRESULT error return values specific to the mixer API ; MX_BASE = 1024 MX_INVALLINE = (MX_BASE + 0) MX_INVALCONTROL = (MX_BASE + 1) MX_INVALVALUE = (MX_BASE + 2) MX_LASTERROR = (MX_BASE + 2) MX_OBJECTF_HANDLE = -2147483648 ; &H80000000 MX_OBJECTF_MIXER = 0 ; &H0& MX_OBJECTF_HMIXER = (MX_OBJECTF_HANDLE | MX_OBJECTF_MIXER) MX_OBJECTF_WAVEOUT = 268435456 ; &H10000000 MX_OBJECTF_HWAVEOUT = (MX_OBJECTF_HANDLE | MX_OBJECTF_WAVEOUT) MX_OBJECTF_WAVEIN = 536870912 ; &H20000000 MX_OBJECTF_HWAVEIN = (MX_OBJECTF_HANDLE | MX_OBJECTF_WAVEIN) MX_OBJECTF_MIDIOUT = 805306368 ; &H30000000 MX_OBJECTF_HMIDIOUT = (MX_OBJECTF_HANDLE | MX_OBJECTF_MIDIOUT) MX_OBJECTF_MIDIIN = 1073741824 ; &H40000000 MX_OBJECTF_HMIDIIN = (MX_OBJECTF_HANDLE | MX_OBJECTF_MIDIIN) MX_OBJECTF_AUX = 1342177280 ; &H50000000 ; ; MXLINE.fdwLine ; MXLN_LINEF_ACTIVE = 1 ; &H1& MXLN_LINEF_DISCONNECTED = 32768 ; &H8000& MXLN_LINEF_SOURCE = -2147483648 ; &H80000000 ; ; MXLINE.dwComponentType ; MXLN_COMPTYPE_DST_FIRST = 0 ; &H0& MXLN_COMPTYPE_DST_UNDEFINED = (MXLN_COMPTYPE_DST_FIRST + 0) MXLN_COMPTYPE_DST_DIGITAL = (MXLN_COMPTYPE_DST_FIRST + 1) MXLN_COMPTYPE_DST_LINE = (MXLN_COMPTYPE_DST_FIRST + 2) MXLN_COMPTYPE_DST_MONITOR = (MXLN_COMPTYPE_DST_FIRST + 3) MXLN_COMPTYPE_DST_SPEAKERS = (MXLN_COMPTYPE_DST_FIRST + 4) MXLN_COMPTYPE_DST_HEADPHONES = (MXLN_COMPTYPE_DST_FIRST + 5) MXLN_COMPTYPE_DST_TELEPHONE = (MXLN_COMPTYPE_DST_FIRST + 6) MXLN_COMPTYPE_DST_WAVEIN = (MXLN_COMPTYPE_DST_FIRST + 7) MXLN_COMPTYPE_DST_VOICEIN = (MXLN_COMPTYPE_DST_FIRST + 8) MXLN_COMPTYPE_DST_LAST = (MXLN_COMPTYPE_DST_FIRST + 8) MXLN_COMPTYPE_SRC_FIRST = 4096 ; &H1000& MXLN_COMPTYPE_SRC_UNDEFINED = (MXLN_COMPTYPE_SRC_FIRST + 0) MXLN_COMPTYPE_SRC_DIGITAL = (MXLN_COMPTYPE_SRC_FIRST + 1) MXLN_COMPTYPE_SRC_LINE = (MXLN_COMPTYPE_SRC_FIRST + 2) MXLN_COMPTYPE_SRC_MICROPHONE = (MXLN_COMPTYPE_SRC_FIRST + 3) MXLN_COMPTYPE_SRC_SYNTHESIZER = (MXLN_COMPTYPE_SRC_FIRST + 4) MXLN_COMPTYPE_SRC_COMPACTDISC = (MXLN_COMPTYPE_SRC_FIRST + 5) MXLN_COMPTYPE_SRC_TELEPHONE = (MXLN_COMPTYPE_SRC_FIRST + 6) MXLN_COMPTYPE_SRC_PCSPEAKER = (MXLN_COMPTYPE_SRC_FIRST + 7) MXLN_COMPTYPE_SRC_WAVEOUT = (MXLN_COMPTYPE_SRC_FIRST + 8) MXLN_COMPTYPE_SRC_AUXILIARY = (MXLN_COMPTYPE_SRC_FIRST + 9) MXLN_COMPTYPE_SRC_ANALOG = (MXLN_COMPTYPE_SRC_FIRST + 10) MXLN_COMPTYPE_SRC_LAST = (MXLN_COMPTYPE_SRC_FIRST + 10) ; ; MXLINE.Target.dwType ; MXLN_TARGETTYPE_UNDEFINED = 0 MXLN_TARGETTYPE_WAVEOUT = 1 MXLN_TARGETTYPE_WAVEIN = 2 MXLN_TARGETTYPE_MIDIOUT = 3 MXLN_TARGETTYPE_MIDIIN = 4 MXLN_TARGETTYPE_AUX = 5 MX_GETLINEINFOF_DESTINATION = 0 ; &H0& MX_GETLINEINFOF_SOURCE = 1 ; &H1& MX_GETLINEINFOF_LINEID = 2 ; &H2& MX_GETLINEINFOF_COMPONENTTYPE = 3 ; &H3& MX_GETLINEINFOF_TARGETTYPE = 4 ; &H4& MX_GETLINEINFOF_QUERYMASK = 15 ; &HF& ; ; MXCONTROL.fdwControl ; MXCTRL_CTRLF_UNIFORM = 1 ; &H1& MXCTRL_CTRLF_MULTIPLE = 2 ; &H2& MXCTRL_CTRLF_DISABLED = -2147483648 ; &H80000000 ; ; MXCTRL_CTRLTYPE_xxx building block defines ; MXCTRL_CT_CLASS_MASK = -268435456 ; &HF0000000 MXCTRL_CT_CLASS_CUSTOM = 0 ; &H0& MXCTRL_CT_CLASS_METER = 268435456 ; &H10000000 MXCTRL_CT_CLASS_SWITCH = 536870912 ; &H20000000 MXCTRL_CT_CLASS_NUMBER = 805306368 ; &H30000000 MXCTRL_CT_CLASS_SLIDER = 1073741824 ; &H40000000 MXCTRL_CT_CLASS_FADER = 1342177280 ; &H50000000 MXCTRL_CT_CLASS_TIME = 1610612736 ; &H60000000 MXCTRL_CT_CLASS_LIST = 1879048192 ; &H70000000 MXCTRL_CT_SUBCLASS_MASK = 251658240 ; &HF000000 MXCTRL_CT_SC_SWITCH_BOOLEAN = 0 ; &H0& MXCTRL_CT_SC_SWITCH_BUTTON = 16777216 ; &H1000000 MXCTRL_CT_SC_METER_POLLED = 0 ; &H0& MXCTRL_CT_SC_TIME_MICROSECS = 0 ; &H0& MXCTRL_CT_SC_TIME_MILLISECS = 16777216 ; &H1000000 MXCTRL_CT_SC_LIST_SINGLE = 0 ; &H0& MXCTRL_CT_SC_LIST_MULTIPLE = 16777216 ; &H1000000 MXCTRL_CT_UNITS_MASK = 16711680 ; &HFF0000 MXCTRL_CT_UNITS_CUSTOM = 0 ; &H0& MXCTRL_CT_UNITS_BOOLEAN = 65536 ; &H10000 MXCTRL_CT_UNITS_SIGNED = 131072 ; &H20000 MXCTRL_CT_UNITS_UNSIGNED = 196608 ; &H30000 MXCTRL_CT_UNITS_DECIBELS = 262144 ; in 10ths ; &H40000 MXCTRL_CT_UNITS_PERCENT = 327680 ; in 10ths ; &H50000 ; ; Commonly used control types for specifying MXCONTROL.dwControlType ; MXCTRL_CTRLTYPE_CUSTOM = (MXCTRL_CT_CLASS_CUSTOM | MXCTRL_CT_UNITS_CUSTOM) MXCTRL_CTRLTYPE_BOOLEANMETER = (MXCTRL_CT_CLASS_METER | MXCTRL_CT_SC_METER_POLLED | MXCTRL_CT_UNITS_BOOLEAN) MXCTRL_CTRLTYPE_SIGNEDMETER = (MXCTRL_CT_CLASS_METER | MXCTRL_CT_SC_METER_POLLED | MXCTRL_CT_UNITS_SIGNED) MXCTRL_CTRLTYPE_PEAKMETER = (MXCTRL_CTRLTYPE_SIGNEDMETER + 1) MXCTRL_CTRLTYPE_UNSIGNEDMETER = (MXCTRL_CT_CLASS_METER | MXCTRL_CT_SC_METER_POLLED | MXCTRL_CT_UNITS_UNSIGNED) MXCTRL_CTRLTYPE_BOOLEAN = (MXCTRL_CT_CLASS_SWITCH | MXCTRL_CT_SC_SWITCH_BOOLEAN | MXCTRL_CT_UNITS_BOOLEAN) MXCTRL_CTRLTYPE_ONOFF = (MXCTRL_CTRLTYPE_BOOLEAN + 1) MXCTRL_CTRLTYPE_MUTE = (MXCTRL_CTRLTYPE_BOOLEAN + 2) MXCTRL_CTRLTYPE_MONO = (MXCTRL_CTRLTYPE_BOOLEAN + 3) MXCTRL_CTRLTYPE_LOUDNESS = (MXCTRL_CTRLTYPE_BOOLEAN + 4) MXCTRL_CTRLTYPE_STEREOENH = (MXCTRL_CTRLTYPE_BOOLEAN + 5) MXCTRL_CTRLTYPE_BUTTON = (MXCTRL_CT_CLASS_SWITCH | MXCTRL_CT_SC_SWITCH_BUTTON | MXCTRL_CT_UNITS_BOOLEAN) MXCTRL_CTRLTYPE_DECIBELS = (MXCTRL_CT_CLASS_NUMBER | MXCTRL_CT_UNITS_DECIBELS) MXCTRL_CTRLTYPE_SIGNED = (MXCTRL_CT_CLASS_NUMBER | MXCTRL_CT_UNITS_SIGNED) MXCTRL_CTRLTYPE_UNSIGNED = (MXCTRL_CT_CLASS_NUMBER | MXCTRL_CT_UNITS_UNSIGNED) MXCTRL_CTRLTYPE_PERCENT = (MXCTRL_CT_CLASS_NUMBER | MXCTRL_CT_UNITS_PERCENT) MXCTRL_CTRLTYPE_SLIDER = (MXCTRL_CT_CLASS_SLIDER | MXCTRL_CT_UNITS_SIGNED) MXCTRL_CTRLTYPE_PAN = (MXCTRL_CTRLTYPE_SLIDER + 1) MXCTRL_CTRLTYPE_QSOUNDPAN = (MXCTRL_CTRLTYPE_SLIDER + 2) MXCTRL_CTRLTYPE_FADER = (MXCTRL_CT_CLASS_FADER | MXCTRL_CT_UNITS_UNSIGNED) MXCTRL_CTRLTYPE_VOLUME = (MXCTRL_CTRLTYPE_FADER + 1) MXCTRL_CTRLTYPE_BASS = (MXCTRL_CTRLTYPE_FADER + 2) MXCTRL_CTRLTYPE_TREBLE = (MXCTRL_CTRLTYPE_FADER + 3) MXCTRL_CTRLTYPE_EQUALIZER = (MXCTRL_CTRLTYPE_FADER + 4) MXCTRL_CTRLTYPE_SINGLESELECT = (MXCTRL_CT_CLASS_LIST | MXCTRL_CT_SC_LIST_SINGLE | MXCTRL_CT_UNITS_BOOLEAN) MXCTRL_CTRLTYPE_MUX = (MXCTRL_CTRLTYPE_SINGLESELECT + 1) MXCTRL_CTRLTYPE_MULTIPLESELECT = (MXCTRL_CT_CLASS_LIST | MXCTRL_CT_SC_LIST_MULTIPLE | MXCTRL_CT_UNITS_BOOLEAN) MXCTRL_CTRLTYPE_MIXER = (MXCTRL_CTRLTYPE_MULTIPLESELECT + 1) MXCTRL_CTRLTYPE_MICROTIME = (MXCTRL_CT_CLASS_TIME | MXCTRL_CT_SC_TIME_MICROSECS | MXCTRL_CT_UNITS_UNSIGNED) MXCTRL_CTRLTYPE_MILLITIME = (MXCTRL_CT_CLASS_TIME | MXCTRL_CT_SC_TIME_MILLISECS | MXCTRL_CT_UNITS_UNSIGNED) MX_GETLINECONTROLSF_ALL = 0 ; &H0& MX_GETLINECONTROLSF_ONEBYID = 1 ; &H1& MX_GETLINECONTROLSF_ONEBYTYPE = 2 ; &H2& MX_GETLINECONTROLSF_QUERYMASK = 15 ; &HF& MX_GETCTRLDETAILSF_VALUE = 0 ; &H0& MX_GETCTRLDETAILSF_LISTTEXT = 1 ; &H1& MX_GETCTRLDETAILSF_QUERYMASK = 15 ; &HF& MX_SETCTRLDETAILSF_VALUE = 0 ; &H0& MX_SETCTRLDETAILSF_CUSTOM = 1 ; &H1& MX_SETCTRLDETAILSF_QUERYMASK = 15 ; &HF& ;---------------------------------------------------------------------------------------------------------------------- ;; enums to identify mixer volume controls ;Public Enum VOL_CONTROL ; SPEAKER = 0 ; LINEIN = 1 ; MICROPHONE = 2 ; SYNTHESIZER = 3 ; COMPACTDISC = 4 ; WAVEOUT = 5 ; AUXILIARY = 6 ;End Enum ;---------------------------------------------------------------------------------------------------------------------- EM_VOL_CONTROL = "SPEAKER|LINEIN|MICROPHONE|SYNTHESIZER|COMPACTDISC|WAVEOUT|AUXILIARY" EN_VOL_CONTROL = "0|1|2|3|4|5|6" icount = ItemCount(EM_VOL_CONTROL,"|") for i=1 to icount item = ItemExtract(i,EM_VOL_CONTROL,"|") %item% = ItemExtract(i,EN_VOL_CONTROL,"|") next ;---------------------------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------------------------- ;; enums to identify mixer mute controls ;Public Enum MUTE_CONTROL ; SPEAKER_MUTE = 7 ; LINEIN_MUTE = 8 ; MICROPHONE_MUTE = 9 ; SYNTHESIZER_MUTE = 10 ; COMPACTDISC_MUTE = 11 ; WAVEOUT_MUTE = 12 ; AUXILIARY_MUTE = 13 ;End Enum ;---------------------------------------------------------------------------------------------------------------------- EM_MUTE_CONTROL = "SPEAKER_MUTE|LINEIN_MUTE|MICROPHONE_MUTE|SYNTHESIZER_MUTE|COMPACTDISC_MUTE|WAVEOUT_MUTE|AUXILIARY_MUTE" EN_MUTE_CONTROL = "7|8|9|10|11|12|13" icount = ItemCount(EM_MUTE_CONTROL,"|") for i=1 to icount item = ItemExtract(i,EM_MUTE_CONTROL,"|") %item% = ItemExtract(i,EN_MUTE_CONTROL,"|") next ;---------------------------------------------------------------------------------------------------------------------- CALLBACK_WINDOW = 65536 ; &H10000 GWL_WNDPROC = (-4) #EndSubroutine ; Maybe you need an array: ;---------------------------------------------------------------------------------------------------------------------- ;uMXCONTROLs(20) As MXCONTROL ; local array to store mixer controls ;---------------------------------------------------------------------------------------------------------------------- uMXCONTROLs = ArrDimension(20) ;---------------------------------------------------------------------------------------------------------------------- ;You need some UDF's: #DefineFunction OpenMixer (hMixerHandle, MixerNumber) If ( (MixerNumber < 0) | (MixerNumber > (mixerGetNumDevs() - 1)) ) Then Return (@false) udsDefineConstants() ; open the mixer result = mixerOpen(hMixerHandle, MixerNumber, 0, 0, 0) If (result != MMSYSERR_NOERROR) Then Return (@false) ; get the primary line controls by name, (this does not get all of the controls). ; speaker (master) volume result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_DST_SPEAKERS, MXCTRL_CTRLTYPE_VOLUME, uMXCONTROLs(SPEAKER)) ; microphone volume result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_MICROPHONE, MXCTRL_CTRLTYPE_VOLUME, uMXCONTROLs(MICROPHONE)) ; Line volume result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_AUXILIARY, MXCTRL_CTRLTYPE_VOLUME, uMXCONTROLs(AUXILIARY)) ; CD volume result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_COMPACTDISC, MXCTRL_CTRLTYPE_VOLUME, uMXCONTROLs(COMPACTDISC)) ; Synthesizer volume result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_SYNTHESIZER, MXCTRL_CTRLTYPE_VOLUME, uMXCONTROLs(SYNTHESIZER)) ; wave volume result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_WAVEOUT, MXCTRL_CTRLTYPE_VOLUME, uMXCONTROLs(WAVEOUT)) ; Aux volume result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_LINE, MXCTRL_CTRLTYPE_VOLUME, uMXCONTROLs(LINEIN)) ; speaker (master) mute result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_DST_SPEAKERS, MXCTRL_CTRLTYPE_MUTE, uMXCONTROLs(SPEAKER_MUTE)) ; microphone mute result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_MICROPHONE, MXCTRL_CTRLTYPE_MUTE, uMXCONTROLs(MICROPHONE_MUTE)) ; Line mute result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_AUXILIARY, MXCTRL_CTRLTYPE_MUTE, uMXCONTROLs(AUXILIARY_MUTE)) ; CD mute result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_COMPACTDISC, MXCTRL_CTRLTYPE_MUTE, uMXCONTROLs(COMPACTDISC_MUTE)) ; Synthesizer mute result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_SYNTHESIZER, MXCTRL_CTRLTYPE_MUTE, uMXCONTROLs(SYNTHESIZER_MUTE)) ; wave mute result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_WAVEOUT, MXCTRL_CTRLTYPE_MUTE, uMXCONTROLs(WAVEOUT_MUTE)) ; Aux mute result = GetMXCONTROL(hMixerHandle, MXLN_COMPTYPE_SRC_LINE, MXCTRL_CTRLTYPE_MUTE, uMXCONTROLs(LINEIN_MUTE)) Return (@true) #EndFunction ;---------------------------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------------------------- ;Private Function GetMXCONTROL(ByVal hMixer As Long, ByVal componentType As Long, ByVal ctrlType As Long, ByRef mxc As MXCONTROL) As Long ; ; This function attempts to obtain a mixer control. Returns True if successful. ; Dim mxlc As MXLINECONTROLS ; Dim mxl As MXLINE ; Dim hMem As Long ; Dim ret As Long ; ; mxl.cbStruct = Len(mxl) ; mxl.dwComponentType = componentType ; ; Obtain a line corresponding to the component type ; ret = mixerGetLineInfo(hMixer, mxl, MX_GETLINEINFOF_COMPONENTTYPE) ; If ret = MMSYSERR_NOERROR Then ; mxlc.cbStruct = Len(mxlc) ; mxlc.dwLineID = mxl.dwLineID ; mxlc.dwControl = ctrlType ; mxlc.cControls = 1 ; mxlc.cbmxctrl = Len(mxc) ; ; Allocate a buffer for the control ; hMem = GlobalAlloc(64, Len(mxc)) ; &H40 ; mxlc.pamxctrl = GlobalLock(hMem) ; mxc.cbStruct = Len(mxc) ; ; Get the control ; ret = mixerGetLineControls(hMixer, mxlc, MX_GETLINECONTROLSF_ONEBYTYPE) ; If ret = MMSYSERR_NOERROR Then ; GetMXCONTROL = True ; ; Copy the control into the destination structure ; CopyStructFromPtr mxc, mxlc.pamxctrl, Len(mxc) ; Else ; GetMXCONTROL = False ; End If ; GlobalFree (hMem) ; Exit Function ; End If ; GetMXCONTROL = False ;End Function ;---------------------------------------------------------------------------------------------------------------------- #DefineFunction GetMXCONTROL (hMixer, componentType, ctrlType, mxc) ; ... #EndFunction #DefineFunction GetControlValue (hMixer, mxc) ;This function gets the value for a control. ; ... #EndFunction #DefineFunction SetControlValue (hMixer, mxc, NewVolum) ;This function sets the value for a control. Returns True if successful ; ... #EndFunction ;---------------------------------------------------------------------------------------------------------------------- ;Public Function SetVolume(Control As VOL_CONTROL, ByVal NewVolume As Long) As Long ; SetVolume = SetControlValue(hMixerHandle, uMXCONTROLs(Control), NewVolume) ;End Function ;---------------------------------------------------------------------------------------------------------------------- #DefineFunction SetVolume (Control, NewVolume) result = SetControlValue(hMixerHandle, uMXCONTROLs(Control), NewVolume) ; ??? Return (result) #EndFunction ;---------------------------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------------------------- ;Public Function GetVolume(Control As VOL_CONTROL) As Long ; GetVolume = GetControlValue(hMixerHandle, uMXCONTROLs(Control)) ;End Function ;---------------------------------------------------------------------------------------------------------------------- #DefineFunction GetVolume (Control) result = GetControlValue(hMixerHandle, uMXCONTROLs(Control)) ; ??? Return (result) #EndFunction ;---------------------------------------------------------------------------------------------------------------------- ;Public Function CloseMixer() As Long ; CloseMixer = mixerClose(hMixerHandle) ; hMixerHandle = 0 ;End Function ;---------------------------------------------------------------------------------------------------------------------- #DefineFunction CloseMixer (hmx) result = mixerClose(hmx) Drop (hmx) Return (result) #EndFunction ;----------------------------------------------------------------------------------------------------------------------and so on ...
Article ID: W16720
File Created: 2005:02:18:12:22:00
Last Updated: 2005:02:18:12:22:00