Red de conocimiento del abogados - Ley de patentes - VB ajusta el código de volumen de una determinada música

VB ajusta el código de volumen de una determinada música

Te doy un ejemplo de cómo ajustar el volumen

'establecer amplificador de volumen silenciar o no

'autor: Hailong

' correo: hailongxl@21cn.com

'qq: 281131020

'msn: antiTears@hotmail.com

'sitio web:

'date:2006-03-28

Opción explícita

Función de declaración privada MixerGetNumDevs Lib "winmm.dll" () Siempre

Función de declaración privada GlobalLock Lib "kernel32" (ByVal hMem As Long) Mientras

Función de declaración privada MixerClose Lib "winmm.dll" (ByVal hmx As Long) Mientras

Función de declaración privada GlobalFree Lib " kernel32 " (ByVal hMem As Long) Mientras

Función de declaración privada GlobalUnlock Lib "kernel32" (ByVal hMem As Long) Mientras

Función de declaración privada GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long

Declaración privada Sub CopyPtrFromStruct Lib "kernel32" Alias ​​​​"RtlMoveMemory" (ByVal ptr As Long, struct As Any, ByVal cb As Long)

Sub declaración privada CopyStructFromPtr Lib "kernel32" Alias ​​​​"RtlMoveMemory" (estructura como cualquier, ByVal ptr As Long, ByVal cb As Long)

Función de declaración privada MixerSetControlDetails Lib "winmm.dll" (ByVal hmxobj Mientras

Declaración privada

Función MixerGetDevCaps Lib "winmm.dll" Alias ​​​​"mixerGetDevCapsA" (ByVal uMxId As Long, pmxcaps As MIXERCAPS, ByVal cbmxcaps As Long) As Long

Función de declaración privada MixerOpen Lib "winmm.dll" (phmx Mientras, ByVal uMxId Mientras, ByVal dwCallback Mientras, ByVal dwInstance Mientras, ByVal fdwOpen Mientras) Mientras

Función de declaración privada MixerGetLineControls Lib "winmm.dll" Alias ​​"mixerGetLineControlsA" (ByVal hmxobj Mientras, pmxlc Como MIXERLINECONTROLS, ByVal fdwControls Mientras) Mientras

Función de declaración privada mezcladorGetControlDetails Lib "winmm.dll" Alias ​​​​"mixerGetControlDetailsA" (ByVal hmxobj Mientras, pmxcd Como MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long

Const privada MAXPNAMElen = 32 ' longitud máxima del nombre del producto (incluido NULL)

Const privada MMSYSERR_NOERROR = 0 ' sin error

Const privada GMEM_ZEROINIT = amp; H40

Const privada CALLBACK_WINDOW = H10000 ' dwCallback es un HWND

Const privada MIXER_OBJECTF_MIXER = H0amp

Const privada MIXER_LONG_NAME_CHARS = 64

Const privada MIXER_SHORT_NAME_CHARS = 16

Const privada MIXER_GETLINEINFOF_SOURCE = amp; =amp;H0amp

Const privada MIXER_GETCONTROLDETAILSF_VALUE = amp; Constante MIXERCONTROL_CT_UNITS_BOOLEAN = a

mp; H10000

Const privada MIXER_GETLINECONTROLSF_ONEBYTYPE = amp; CT_SC_SWITCH_BOOLEAN = H0amp;

Const privada MIXERLINE_COMPONENTTYPE_DST_FIRST = H0amp;

Const privada MIXERCONTROL_CT_CLASS_SWITCH = & H20000000

Const privada MIXER_OBJECTF_HMIXER = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF _MEZCLADOR)

Const privada MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER o MIXERCONTROL_CT_UNITS_UNSIGNED)

Const privada MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER 1)

Const privada TYPE_BOOLEAN = (MIXERCONTROL_CT_CLASS_SWITCH O MIXERCONTROL_CT_SC_SWITCH_BOOLEAN O MIXERCONTROL_CT_UNITS_BOOLEAN)

Const privada MIXERCONTROL_CONTROLTYPE_MUTE = (MIXERCONTROL_ CONTROLTYPE_BOOLEAN 2)

Const privada MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST 4)

Tipo privado MIXERCONTROLDETAILS_SIGNED

lValor Siempre y cuando

Tipo de fin

Tipo privado MIXERCONTROLDETAILS_BOOLEAN

fValor As Long

Tipo de fin

''''''''' '''''''''''''''''''' ''''''''''

'Tipo autodefinido

Tipo privado MIXERCONTROLD

ETAILS_SIGNED_ARRAY_2

v1 Como MIXERCONTROLDETAILS_SIGNED

v2 Como MIXERCONTROLDETAILS_SIGNED

Tipo de extremo

''''''''''' ''''''''''''''''''''''''''''

Tipo privado MIXERCONTROLDETAILS

cbStruct As Long ' tamaño en bytes de MIXERCONTROLDETAILS

dwControlID As Long ' ID de control para obtener/establecer detalles en

cChannels As Long ' número de canales en la matriz paDetails

item As Long ' hwndOwner o cMultipleItems

cbDetails As Long ' tamaño de _una_ estructura detalles_XX

paDetails As Long ' puntero a una matriz de estructuras detalles_XX

Tipo de fin

Tipo privado MIXERCAPS

wMid As Integer ' ID del fabricante

wPid As Integer ' ID del producto

vDriverVersion As Long ' versión del controlador

szPname As String * MAXPNAMElen ' nombre del producto

fdwSupport As Long ' bits de soporte varios

cDestinations As Long ' recuento de destinos

<. p>Tipo final

Tipo privado Target ' para uso en MIXERLINE y otros (estructura integrada)

dwType As Long ' MIXERLINE_TARGETTYPE_xxxx

dwDeviceID As Long ' dispositivo de destino ID del tipo de dispositivo

wMid As Integer ' del dispositivo de destino

wPid As Integer ' "

vDriverVersion As Long ' "

szPname Como cadena * MAXPNAMElen

Tipo final

Tipo privado MIXERCONTROL

cbStruct As Long ' tamaño en bytes de MIXERCONTROL

dwControlID As Long ' co único

ID de control para el dispositivo mezclador

dwControlType As Long ' MIXERCONTROL_CONTROLTYPE_xxx

fdwControl As Long ' MIXERCONTROL_CONTROLF_xxx

cMultipleItems As Long ' si MIXERCONTROL_CONTROLF_MULTIPLE está configurado

szShortName As String * MIXER_SHORT_NAME_CHARS

szName As String * MIXER_LONG_NAME_CHARS

Bounds(1 To 6) As Long ' Miembro más largo de la unión Bounds

Métricas(1 a 6) As Long ' Miembro más largo de la unión de Métricas

Tipo final

Tipo privado MIXERLINECONTROLS

cbStruct As Long ' tamaño en bytes de MIXERLINECONTROLS

dwLineID As Long ' ID de línea (de MIXERLINE.dwLineID)

' MIXER_GETLINECONTROLSF_ONEBYID o

dwControl As Long ' MIXER_GETLINECONTROLSF_ONEBYTYPE

cControls As Long ' recuento de controla pmxctrl apunta a

cbmxctrl As Long ' tamaño en bytes de _one_ MIXERCONTROL

pamxctrl As Long ' puntero a la primera matriz MIXERCONTROL

Tipo de fin

Tipo privado MIXERLINE

cbStruct As Long ' tamaño de la estructura MIXERLINE

dwDestination As Long ' índice de destino basado en cero

dwSource As Long ' fuente basada en cero índice (si es fuente)

dwLineID As Long ' ID de línea única para el dispositivo mezclador

fdwLine As Long ' estado/información sobre la línea

dwUser As Long ' controlador información específica

dwComponentType As Long ' la línea de tipo de componente se conecta a

cChannels As Long ' número de c

La línea de canales admite

cConnections As Long ' número de conexiones (posibles)

cControls As Long ' número de controles en esta línea

szShortName As String * MIXER_SHORT_NAME_CHARS

szName As String * MIXER_LONG_NAME_CHARS

tTarget As Target

Tipo de finalización

'Volumen máximo y mínimo

Privado m_lMax As Long, m_lMin As Long

'Abrir identificador de dispositivo

Privado m_hMixer As Long

'Número de dispositivo GetDevNum

Privado m_lDeviceNum As Long

'ID del dispositivo

Privado m_lDeviceID As Long

'Función del dispositivo GetDevCaps

Privado m_Caps como MIXERCAPS

'Abra el dispositivo para ajustar el volumen

Función pública OpenDeviceForVolume() As Boolean

OpenDeviceForVolume = False

'El número total de mezcladores en el sistema

Si (mixerGetNumDevs() lt; gt; 0) Entonces

'Abrir dispositivo

Si mezcladorOpen(m_hMixer, 0, 0, 0, MIXER_OBJECTF_MIXER o CALLBACK_WINDOW) lt; gt; MMSYSERR_NOERROR Entonces

Salir de la función

Finalizar si

'Obtener capacidades del dispositivo

Si mezcladorGetDevCaps(m_hMixer, m_Caps, Len (m_Caps )) lt;gt; MMSYSERR_NOERROR Entonces

Salir de la función

Finalizar si

Finalizar si

'Si la apertura falla

Si m_hMixer = 0, entonces salga de la función

Atenuar mxl como MIXERLINE

Atenuar mxc como MIXERCONTROL

Atenuar mxlc como MIXERLINECONTROLS

Atenuar hMem siempre que

hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxc))

mxl.cbStruct = Len(mxl)

mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS

Si mezcladorGetLineInfo(m_hMixer, m

xl( .cbStruct = Len(mxlc)

mxlc.dwLineID = mxl.dwLineID

mxlc.dwControl = MIXERCONTROL_CONTROLTYPE_VOLUME

mxlc.cControls = 1

mxlc.cbmxctrl = Len(mxc)

mxlc.pamxctrl = GlobalLock(hMem)

Si mezcladorGetLineControls(m_hMixer, mxlc, MIXER_OBJECTF_HMIXER O MIXER_GETLINECONTROLSF_ONEBYTYPE) lt; Luego

GlobalUnlock hMem

GlobalFree hMem

Función de salida

Finalizar si

CopyStructFromPtr mxc, mxlc.pamxctrl , Len (mxc)

m_lDeviceID = mxc.dwControlID

m_lMin = mxc.Bounds(1)

m_lMax = mxc.Bounds(2)

GlobalUnlock hMem

GlobalFree hMem

OpenDeviceForVolume = True

Finalizar función

'Abrir el dispositivo para silenciar

Función pública OpenDeviceForMute() como booleana

OpenDeviceForMute = False

'No entiendo

If (mixerGetNumDevs() lt; gt; 0 ) Luego

p>

'Abrir dispositivo

Si mezcladorOpen(m_hMixer, 0, 0, 0, MIXER_OBJECTF_MIXER Or CALLBACK_WINDOW) lt;gt MMSYSERR_NOERROR Entonces

Salir Función

End If

'Obtener capacidades del dispositivo

If MixerGetDevCaps(m_hMixer, m_Caps, Len(m_Caps)) lt MMSYSERR_NOERROR Then

Salir de la función

Finalizar si

Fin si

'Si la apertura falla

Si m_hMixer = 0 Entonces salir de la función

Dim mxl Como MEZCLA

RLINE

Atenuar mxc como MIXERCONTROL

Atenuar mxlc como MIXERLINECONTROLS

Atenuar hMem mientras

hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxc ; MMSYSERR_NOERROR Entonces

Salir de la función

Finalizar si

m_lDeviceNum = mxl.cChannels

mxlc.cbStruct = Len(mxlc)

p>

mxlc.dwLineID = mxl.dwLineID

mxlc.dwControl = MIXERCONTROL_CONTROLTYPE_MUTE

mxlc.cControls = 1

mxlc .cbmxctrl = Len(mxc )

mxlc.pamxctrl = GlobalLock(hMem)

Si mezcladorGetLineControls(m_hMixer, mxlc, MIXER_OBJECTF_HMIXER o MIXER_GETLINECONTROLSF_ONEBYTYPE) lt;gt; MMSYSERR_NOERROR Entonces

GlobalUnlock hMem

GlobalFree hMem

Función de salida

Finalizar si

CopyStructFromPtr mxc, mxlc.pamxctrl, Len(mxc)

m_lDeviceID = mxc.dwControlID

GlobalUnlock hMem

GlobalFree hMem

OpenDeviceForMute = True

Fin de función

'Cerrar el dispositivo abierto

Función pública CloseDevice() como booleano

CloseDevice = False

Si m_hMixer lt;gt;

mixerClose m_hMixer

m_hMixer = 0

Finalizar si

CloseDevice = True

Finalizar función

' Configuración del volumen

Función pública SetVolume(ByVal lVol As Long, ByVal rVol As Long) Como Boole

an

SetVolume = False

'Si el dispositivo no está abierto

Si m_hMixer = 0, entonces salga de la función

Atenuar mxcdVolume como MIXERCONTROLDETAILS_SIGNED_ARRAY_2

p>

Atenuar mxcd como MIXERCONTROLDETAILS

Atenuar hMem mientras

hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxcdVolume))

mxcdVolume.v1.lValue = lVol

mxcdVolume.v2.lValue = rVol

mxcd.cbStruct = Len(mxcd)

mxcd.dwControlID = m_lDeviceID

mxcd.cChannels = m_lDeviceNum

mxcd.item = 0

mxcd.cbDetails = Len(mxcdVolume.v1)

mxcd. paDetails = GlobalLock(hMem)

CopyPtrFromStruct mxcd.paDetails, mxcdVolume, Len(mxcdVolume)

Si mezcladorSetControlDetails(m_hMixer, mxcd, MIXER_OBJECTF_HMIXER o MIXER_SETCONTROLDETAILSF_VALUE) lt; MMSYSERR_NOERROR Entonces

p >

GlobalUnlock (hMem)

GlobalFree (hMem)

Función de salida

Finalizar si

GlobalUnlock (hMem)

GlobalFree (hMem)

SetVolume = True

Función final

'Obtener el volumen actual

Función pública GetVolume(ByRef lVol As Long, ByRef rVol As Long) Como booleano

GetVolume = False

lVol = -1

rVol = -1

'Si el dispositivo no está encendido

Si m_hMixer = 0, entonces salga de la función

Atenuar mxcdVolume como MIXERCONTROLDETAILS_SIGNED_ARRAY_2

Atenuar mxcd como MIXERCONTROLDETAILS

Atenuar hMem siempre que

hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxcdVolume))

mxcd.cbStruct = Len(mxcd)

mxcd. dwControlID = m_lDevic

eID

mxcd.cChannels = m_lDeviceNum

mxcd.item = 0

mxcd.cbDetails = Len(mxcdVolume.v1)

mxcd .paDetails = GlobalLock(hMem)

Si mezcladorGetControlDetails(m_hMixer, mxcd, MIXER_OBJECTF_HMIXER o MIXER_GETCONTROLDETAILSF_VALUE) lt;gt MMSYSERR_NOERROR Entonces

GlobalUnlock (hMem)

GlobalFree (hMem)

Función de salida

End If

CopyStructFromPtr mxcdVolume, mxcd.paDetails, Len(mxcdVolume)

lVol = mxcdVolume. v1.lValue

Si m_lDeviceNum = 2 Entonces

rVol = mxcdVolume.v2.lValue

Finalizar si

GlobalUnlock (hMem)

GlobalFree (hMem)

GetVolume = True

Función final

'Obtener el estado de silencio actual

Público Función GetMute(ByRef bMute As Boolean) Como booleano

GetMute = False

Si m_hMixer = 0, entonces salga de la función

Atenuar mxcdMute como MIXERCONTROLDETAILS_BOOLEAN

Atenuar mxcd como MIXERCONTROLDETAILS

mxcd.cbStruct = Len(mxcd)

mxcd.dwControlID = m_lDeviceID

mxcd.cChannels = 1

mxcd.item = 0

mxcd.cbDetails = Len(mxcdMute)

mxcd.paDetails = VarPtr(mxcdMute)

Si mezcladorGetControlDetails(m_hMixer, mxcd , MIXER_OBJECTF_HMIXER o MIXER_GETCONTROLDETAILSF_VALUE) lt;gt; MMSYSERR_NOERROR Entonces

Salir de la función

Finalizar si

Si mxcdMute.fValue lt;gt;

bMute = True

Else

bMute = False

Finalizar si

GetMute = True

Función final

en

'Set Mute

'El parámetro es si silenciar o no

Función pública SetMute(ByVal bMute As Boolean) As Boolean

.

SetMute = False

Si m_hMixer = 0, entonces salga de la función

Atenuar hMem mientras

Atenuar mxcdMute como MIXERCONTROLDETAILS_BOOLEAN

Atenuar mxcd Como MIXERCONTROLDETAILS

mxcdMute.fValue = IIf(bMute, 1, 0)

hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxcdMute.fValue))

mxcd .cbStruct = Len (mxcd)

mxcd.dwControlID = m_lDeviceID

mxcd.cChannels = 1

mxcd.item = 0

mxcd.cbDetails = Len(mxcdMute)

mxcd.paDetails = GlobalLock(hMem)

CopyPtrFromStruct mxcd.paDetails, mxcdMute, Len(mxcdMute)

Si mezcladorSetControlDetails (m_hMixer, mxcd, MIXER_OBJECTF_HMIXER o MIXER_SETCONTROLDETAILSF_VALUE) lt;gt; MMSYSERR_NOERROR Luego

GlobalUnlock hMem

GlobalFree hMem

Salir de la función

Fin Si

GlobalUnlock hMem

GlobalFree hMem

SetMute = True

End Function

'Obtener el volumen máximo

Función pública GetMaxVolume() siempre que

GetMaxVolume = IIf(m_hMixer = 0, -1, m_lMax)

Función final

'Obtener el volumen mínimo

Función pública GetMinVolume() siempre

GetMinVolume = IIf(m_hMixer = 0, -1, m_lMin)

Función final

Subclase privada_Initialize()

m_hMixer = 0

m_lMax = -1

m_lMin = -1

Fin Sub