Systemlautstärke



  • Hallo

    Ist es irgendwie möglich z.B. mit SendMessage die Systemlautstärke zu ändern?
    Wäre toll! Brauche einfach die Funktionen Vol+, Vol- und Mute...

    Merci


  • Mod



  • Diese Links habe ich auch schon gefunden, jedoch verstehe ichs nicht wirklich...
    Gibt es keine "Funktion", mit der ich die Lautstärke lauter und leiser machen kann?

    Hoffentlich gibts das... Ist wirklich wichtig!
    (Arbeite mit BCB6)


  • Mod

    Der Link auf Codeproject macht es doch! Was willst Du eigentlich mehr?



  • Er möchte ein Beispiel, welches er auch versteht und nicht ein für ihn unverständlichen Code.

    Mfg Ominion



  • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_multimedia_functions.asp

    Aus "Program 2" von dem CodeProject Link:

    BOOL CVolumeDlg::amdInitialize()
    {
    	ASSERT(m_hMixer == NULL);
    
    	// get the number of mixer devices present in the system
    	m_nNumMixers = ::mixerGetNumDevs();
    
    	m_hMixer = NULL;
    	::ZeroMemory(&m_mxcaps, sizeof(MIXERCAPS));
    
    	m_strDstLineName.Empty();
    	m_strVolumeControlName.Empty();
    	m_dwMinimum = 0;
    	m_dwMaximum = 0;
    	m_dwVolumeControlID = 0;
    
    	// open the first mixer
    	// A "mapper" for audio mixer devices does not currently exist.
    	if (m_nNumMixers != 0)
    	{
    		if (::mixerOpen(&m_hMixer,
    						0,
    						reinterpret_cast<DWORD>(this->GetSafeHwnd()),
    						NULL,
    						MIXER_OBJECTF_MIXER | CALLBACK_WINDOW)
    			!= MMSYSERR_NOERROR)
    		{
    			return FALSE;
    		}
    
    		if (::mixerGetDevCaps(reinterpret_cast<UINT>(m_hMixer),
    							  &m_mxcaps, sizeof(MIXERCAPS))
    			!= MMSYSERR_NOERROR)
    		{
    			return FALSE;
    		}
    	}
    
    	return TRUE;
    }
    
    BOOL CVolumeDlg::amdUninitialize()
    {
    	BOOL bSucc = TRUE;
    
    	if (m_hMixer != NULL)
    	{
    		bSucc = (::mixerClose(m_hMixer) == MMSYSERR_NOERROR);
    		m_hMixer = NULL;
    	}
    
    	return bSucc;
    }
    
    BOOL CVolumeDlg::amdGetMasterVolumeControl()
    {
    	if (m_hMixer == NULL)
    	{
    		return FALSE;
    	}
    
    	// get dwLineID
    	MIXERLINE mxl;
    	mxl.cbStruct = sizeof(MIXERLINE);
    	mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
    	if (::mixerGetLineInfo(reinterpret_cast<HMIXEROBJ>(m_hMixer),
    						   &mxl,
    						   MIXER_OBJECTF_HMIXER |
    						   MIXER_GETLINEINFOF_COMPONENTTYPE)
    		!= MMSYSERR_NOERROR)
    	{
    		return FALSE;
    	}
    
    	// get dwControlID
    	MIXERCONTROL mxc;
    	MIXERLINECONTROLS mxlc;
    	mxlc.cbStruct = sizeof(MIXERLINECONTROLS);
    	mxlc.dwLineID = mxl.dwLineID;
    	mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
    	mxlc.cControls = 1;
    	mxlc.cbmxctrl = sizeof(MIXERCONTROL);
    	mxlc.pamxctrl = &mxc;
    	if (::mixerGetLineControls(reinterpret_cast<HMIXEROBJ>(m_hMixer),
    							   &mxlc,
    							   MIXER_OBJECTF_HMIXER |
    							   MIXER_GETLINECONTROLSF_ONEBYTYPE)
    		!= MMSYSERR_NOERROR)
    	{
    		return FALSE;
    	}
    
    	// store dwControlID
    	m_strDstLineName = mxl.szName;
    	m_strVolumeControlName = mxc.szName;
    	m_dwMinimum = mxc.Bounds.dwMinimum;
    	m_dwMaximum = mxc.Bounds.dwMaximum;
    	m_dwVolumeControlID = mxc.dwControlID;
    
    	return TRUE;
    }
    
    BOOL CVolumeDlg::amdGetMasterVolumeValue(DWORD &dwVal) const
    {
    	if (m_hMixer == NULL)
    	{
    		return FALSE;
    	}
    
    	MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;
    	MIXERCONTROLDETAILS mxcd;
    	mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
    	mxcd.dwControlID = m_dwVolumeControlID;
    	mxcd.cChannels = 1;
    	mxcd.cMultipleItems = 0;
    	mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
    	mxcd.paDetails = &mxcdVolume;
    	if (::mixerGetControlDetails(reinterpret_cast<HMIXEROBJ>(m_hMixer),
    								 &mxcd,
    								 MIXER_OBJECTF_HMIXER |
    								 MIXER_GETCONTROLDETAILSF_VALUE)
    		!= MMSYSERR_NOERROR)
    	{
    		return FALSE;
    	}
    
    	dwVal = mxcdVolume.dwValue;
    
    	return TRUE;
    }
    
    BOOL CVolumeDlg::amdSetMasterVolumeValue(DWORD dwVal) const
    {
    	if (m_hMixer == NULL)
    	{
    		return FALSE;
    	}
    
    	MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = { dwVal };
    	MIXERCONTROLDETAILS mxcd;
    	mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
    	mxcd.dwControlID = m_dwVolumeControlID;
    	mxcd.cChannels = 1;
    	mxcd.cMultipleItems = 0;
    	mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
    	mxcd.paDetails = &mxcdVolume;
    	if (::mixerSetControlDetails(reinterpret_cast<HMIXEROBJ>(m_hMixer),
    								 &mxcd,
    								 MIXER_OBJECTF_HMIXER |
    								 MIXER_SETCONTROLDETAILSF_VALUE)
    		!= MMSYSERR_NOERROR)
    	{
    		return FALSE;
    	}
    
    	return TRUE;
    }
    

    Was ist daran unverständlich? 😕



  • Bin halt nicht so ein Top-Programmierer....
    Für mich ist das leider nicht verständlich...

    Danke trotzdem für die Hilfe. Hat sich erledigt. Werde die Funktion nicht einsetzen, da sie zu schwierig ist...

    Tja. Merci



  • Lass Dich nicht von den umfangreichen Windows-Strukturen verunsichern, sind nur Sammlungen veränderbarer Parameter.
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_mixercontroldetails_str.asp
    Schau einfach aufs Wesentliche.


Anmelden zum Antworten