亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? volumeinxxx.cpp

?? vc++實現的音量設置代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	MMRESULT mmResult;

	MIXERLINE lineDestination;
	memset( &lineDestination, 0, sizeof(MIXERLINE) );
	lineDestination.cbStruct = sizeof(MIXERLINE);
	lineDestination.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
	mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &lineDestination, MIXER_GETLINEINFOF_COMPONENTTYPE );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		TRACE(".InputXxxVolume: FAILURE: Could not get the Destination Line while enabling. mmResult=%d\n", mmResult );
		return;
	}
	// Getting all line's controls
	int nControlCount = lineDestination.cControls;
	int nChannelCount = lineDestination.cChannels;
	MIXERLINECONTROLS LineControls;
	memset( &LineControls, 0, sizeof(MIXERLINECONTROLS) );
	MIXERCONTROL* aControls = (MIXERCONTROL*)malloc( nControlCount * sizeof(MIXERCONTROL) );
	if ( !aControls )
	{
		TRACE(".InputXxxVolume: FAILURE: Out of memory while enabling the line.\n" );
		return;
	}
	memset( &aControls[0], 0, sizeof(nControlCount * sizeof(MIXERCONTROL)) );
	for ( int i = 0; i < nControlCount; i++ )
	{
		aControls[i].cbStruct = sizeof(MIXERCONTROL);
	}
	LineControls.cbStruct = sizeof(MIXERLINECONTROLS);
	LineControls.dwLineID = lineDestination.dwLineID;
	LineControls.cControls = nControlCount;
	LineControls.cbmxctrl = sizeof(MIXERCONTROL);
	LineControls.pamxctrl = &aControls[0];
	mmResult = mixerGetLineControls( (HMIXEROBJ)m_dwMixerHandle, &LineControls, MIXER_GETLINECONTROLSF_ALL );
	if ( mmResult == MMSYSERR_NOERROR )
	{
		for ( i = 0; i < nControlCount; i++ )
		{
			if ( aControls[i].dwControlType & MIXERCONTROL_CT_UNITS_BOOLEAN )
			{
				MIXERCONTROLDETAILS_BOOLEAN* aDetails = NULL;
				int nMultipleItems = aControls[i].cMultipleItems;
				int nChannels = nChannelCount;
				// MIXERCONTROLDETAILS
				MIXERCONTROLDETAILS ControlDetails;
				memset( &ControlDetails, 0, sizeof(MIXERCONTROLDETAILS) );
				ControlDetails.cbStruct = sizeof(MIXERCONTROLDETAILS);
				ControlDetails.dwControlID = aControls[i].dwControlID;
				if ( aControls[i].fdwControl & MIXERCONTROL_CONTROLF_UNIFORM )
				{
					nChannels = 1;
				}
				if ( aControls[i].fdwControl & MIXERCONTROL_CONTROLF_MULTIPLE )
				{
					nMultipleItems = aControls[i].cMultipleItems;
					aDetails = (MIXERCONTROLDETAILS_BOOLEAN*)malloc(nMultipleItems*nChannels*sizeof(MIXERCONTROLDETAILS_BOOLEAN));
					if ( !aDetails )
					{
						TRACE(".InputXxxVolume: FAILURE: Out of memory while enabling the line.\n" );
						continue;
					}
					for ( int nItem = 0; nItem < nMultipleItems; nItem++ )
					{
						LONG lValue = FALSE;
						if ( nItem == (int)m_uSourceLineIndex )
							lValue = TRUE;
						for ( int nChannel = 0; nChannel < nChannels; nChannel++ )
						{
							aDetails[nItem+nChannel].fValue = lValue;
						}
					}
				} else {
					nMultipleItems = 0;
					aDetails = (MIXERCONTROLDETAILS_BOOLEAN*)malloc(nChannels*sizeof(MIXERCONTROLDETAILS_BOOLEAN));
					if ( !aDetails )
					{
						TRACE(".InputXxxVolume: FAILURE: Out of memory while enabling the line.\n" );
						continue;
					}
					for ( int nChannel = 0; nChannel < nChannels; nChannel++ )
					{
						aDetails[nChannel].fValue = (LONG)TRUE;
					}
				}
				ControlDetails.cChannels = nChannels;
				ControlDetails.cMultipleItems = nMultipleItems;
				ControlDetails.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
				ControlDetails.paDetails = &aDetails[0];
				mmResult = mixerSetControlDetails( (HMIXEROBJ)m_dwMixerHandle, &ControlDetails, 0L );
				if ( mmResult == MMSYSERR_NOERROR )
				{
					TRACE(".InputXxxVolume: Enabling Line: Line control \"%s\" has been enabled.\n", aControls[i].szShortName );
					bAnyEnabled = true;
				}
				free( aDetails );
			}
		}
	} else {
		TRACE(".InputXxxVolume: FAILURE: Could not get the line's controls while enabling. mmResult=%d\n", mmResult );
	}
	free( aControls );
	if ( !bAnyEnabled )
	{
		TRACE(".InputXxxVolume: WARNING: No controls were found for enabling the line.\n" );
	}
}
//////////////
void CVolumeInXXX::Disable()
{
	TRACE(".InputXxxVolume: WARNING: Disable line has no sense. The function not implemented.\n" );
}
//////////////
DWORD CVolumeInXXX::GetVolumeMetric()
{
	if ( !m_bAvailable )
		return BAD_DWORD;
	return m_dwVolumeStep;
}
//////////////
DWORD CVolumeInXXX::GetMinimalVolume()
{
	if ( !m_bAvailable )
		return BAD_DWORD;
	return m_dwMinimalVolume;
}
//////////////
DWORD CVolumeInXXX::GetMaximalVolume()
{
	if ( !m_bAvailable )
		return BAD_DWORD;
	return m_dwMaximalVolume;
}
//////////////
DWORD CVolumeInXXX::GetCurrentVolume()
{
	if ( !m_bAvailable )
		return BAD_DWORD;
	MIXERCONTROLDETAILS_UNSIGNED* aDetails = (MIXERCONTROLDETAILS_UNSIGNED*)malloc(m_nChannelCount*sizeof(MIXERCONTROLDETAILS_UNSIGNED));
	if ( !aDetails )
		return BAD_DWORD;
	MIXERCONTROLDETAILS ControlDetails;
	memset( &ControlDetails, 0, sizeof(MIXERCONTROLDETAILS) );
	ControlDetails.cbStruct = sizeof(MIXERCONTROLDETAILS);
	ControlDetails.dwControlID = m_dwVolumeControlID;
	ControlDetails.cChannels = m_nChannelCount;
	ControlDetails.cMultipleItems = 0;
	ControlDetails.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
	ControlDetails.paDetails = &aDetails[0];
	MMRESULT mmResult = mixerGetControlDetails( (HMIXEROBJ)m_dwMixerHandle, &ControlDetails, MIXER_GETCONTROLDETAILSF_VALUE );
	DWORD dw = aDetails[0].dwValue;
	free( aDetails );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		TRACE(".InputXxxVolume: FAILURE: Could not get volume. mmResult=%d\n", mmResult );
		return BAD_DWORD;
	}
	return dw;
}
//////////////
void CVolumeInXXX::SetCurrentVolume( DWORD dwValue )
{
	if ( !m_bAvailable || (dwValue<m_dwMinimalVolume) || (dwValue>m_dwMaximalVolume) )
		return;
	MIXERCONTROLDETAILS_UNSIGNED* aDetails = (MIXERCONTROLDETAILS_UNSIGNED*)malloc(m_nChannelCount*sizeof(MIXERCONTROLDETAILS_UNSIGNED));
	if ( !aDetails )
		return;
	for ( int i = 0; i < m_nChannelCount; i++ )
	{
		aDetails[i].dwValue = dwValue;
	}
	MIXERCONTROLDETAILS ControlDetails;
	memset( &ControlDetails, 0, sizeof(MIXERCONTROLDETAILS) );
	ControlDetails.cbStruct = sizeof(MIXERCONTROLDETAILS);
	ControlDetails.dwControlID = m_dwVolumeControlID;
	ControlDetails.cChannels = m_nChannelCount;
	ControlDetails.cMultipleItems = 0;
	ControlDetails.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
	ControlDetails.paDetails = &aDetails[0];
	MMRESULT mmResult = mixerSetControlDetails( (HMIXEROBJ)m_dwMixerHandle, &ControlDetails, MIXER_SETCONTROLDETAILSF_VALUE );
	free( aDetails );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		TRACE(".InputXxxVolume: FAILURE: Could not set volume(%d) mmResult=%d\n", dwValue, mmResult );
	}
}
//////////////
void CVolumeInXXX::RegisterNotificationSink( PONMICVOULUMECHANGE pfUserSink, DWORD dwUserValue )
{
	m_pfUserSink = pfUserSink;
	m_dwUserValue = dwUserValue;
}
////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK CVolumeInXXX::MixerWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	if ( uMsg == MM_MIXM_CONTROL_CHANGE )
	{
		if ( g_pThis )
		{
			g_pThis->OnControlChanged( (DWORD)lParam );
		}
	}
	return ::DefWindowProc( hwnd, uMsg, wParam, lParam);
}
////////////////////////////////////////////////////////////////////////
bool CVolumeInXXX::EnumerateInputLines( PINPUTLINEPROC pUserCallback, DWORD dwUserValue )
{
	if ( !pUserCallback )
		return false;
	MMRESULT mmResult;
	HWAVEIN hwaveIn;
	WAVEFORMATEX WaveFmt;
	SetDeviceType( &WaveFmt );
	mmResult = waveInOpen( &hwaveIn, WAVE_MAPPER, &WaveFmt, 0L, 0L, CALLBACK_NULL );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		TRACE(".InputXxxVolume: FAILURE: Could not open WaveIn Mapper. mmResult=%d\n", mmResult );
		return false;
	}
	UINT uMixerID;
	DWORD dwMixerHandle;
	mmResult = mixerGetID( (HMIXEROBJ)hwaveIn, &uMixerID, MIXER_OBJECTF_HWAVEIN );
	waveInClose( hwaveIn );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		TRACE(".InputXxxVolume: FAILURE: WaveIn Mapper in Mixer is not available. mmResult=%d\n", mmResult );
		return false;
	}
	mmResult = mixerOpen( (LPHMIXER)&dwMixerHandle, uMixerID, 0L, 0L, 0L );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		mixerClose( (HMIXER)dwMixerHandle );
		TRACE(".InputXxxVolume: FAILURE: Could not open Mixer. mmResult=%d\n", mmResult );
		return false;
	}
	MIXERLINE MixerLine;
	memset( &MixerLine, 0, sizeof(MIXERLINE) );
	MixerLine.cbStruct = sizeof(MIXERLINE);
	MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
	mmResult = mixerGetLineInfo( (HMIXEROBJ)dwMixerHandle, &MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		mixerClose( (HMIXER)dwMixerHandle );
		TRACE(".InputXxxVolume: FAILURE: Could not get WaveIn Destionation Line for the requested source while enumerating. mmResult=%d\n", mmResult );
		return false;
	}
	MIXERLINE Line;
	for ( UINT uLineIndex = 0; uLineIndex < MixerLine.cConnections; uLineIndex++ )
	{
		memset( &Line, 0, sizeof(MIXERLINE) );
		Line.cbStruct = sizeof(MIXERLINE);
		Line.dwDestination = MixerLine.dwDestination;
		Line.dwSource = uLineIndex;
		mmResult = mixerGetLineInfo( (HMIXEROBJ)dwMixerHandle, &Line, MIXER_GETLINEINFOF_SOURCE );
		if ( mmResult != MMSYSERR_NOERROR )
		{
			mixerClose( (HMIXER)dwMixerHandle );
			TRACE(".InputXxxVolume: FAILURE: Could not get the interated Source Line while enumerating. mmResult=%d\n", mmResult );
			return false;
		}
		if ( !((*pUserCallback)( uLineIndex, &Line, dwUserValue )) )
		{
			break;
		}
	}
	mixerClose( (HMIXER)dwMixerHandle );
	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲三级电影全部在线观看高清| 国产精品久久久久影视| 欧美亚洲国产一卡| 91福利国产精品| 欧美在线观看一二区| 色琪琪一区二区三区亚洲区| 91久久精品网| 欧美日韩一本到| 欧美乱熟臀69xxxxxx| 欧美一级国产精品| 欧美精品一区二区三区四区 | 91精品婷婷国产综合久久| 欧美区一区二区三区| 欧美一级国产精品| 欧美精品一区二| 国产精品传媒在线| 亚洲va在线va天堂| 麻豆91精品视频| 成人白浆超碰人人人人| 在线亚洲一区二区| 91精品国产手机| 国产欧美一区二区精品仙草咪| 国产精品国产a| 亚洲h精品动漫在线观看| 另类成人小视频在线| 丰满白嫩尤物一区二区| 一本到不卡精品视频在线观看 | 午夜影视日本亚洲欧洲精品| 免费欧美高清视频| 成人国产精品视频| 欧美吻胸吃奶大尺度电影| 精品国产三级a在线观看| 亚洲欧洲成人精品av97| 免费高清在线一区| 91亚洲永久精品| 久久先锋资源网| 一区二区三区欧美亚洲| 久久国产麻豆精品| 欧美在线一二三四区| 日韩午夜电影av| 亚洲一区二区三区四区的| 国内成+人亚洲+欧美+综合在线| 日本乱码高清不卡字幕| 久久九九久精品国产免费直播| 亚洲大片在线观看| av午夜一区麻豆| 欧美精品一区二区久久久| 亚洲一区二区欧美日韩| 菠萝蜜视频在线观看一区| 日韩一区二区三区在线| 亚洲人成网站在线| 国产成人aaaa| 久久精品一二三| 久88久久88久久久| 制服丝袜国产精品| 亚洲国产视频网站| 日本精品一区二区三区高清| 欧美国产激情二区三区| 国产美女在线观看一区| 欧美一级片免费看| 性欧美疯狂xxxxbbbb| 在线亚洲精品福利网址导航| 日韩伦理免费电影| 99久久精品国产导航| 中文字幕精品一区二区精品绿巨人| 九九精品一区二区| 日韩一区二区高清| 理论电影国产精品| 欧美mv日韩mv国产网站| 久久丁香综合五月国产三级网站| 欧美日韩免费不卡视频一区二区三区| 亚洲女女做受ⅹxx高潮| 欧洲中文字幕精品| 午夜精品久久久久久久99樱桃| 欧美日韩在线一区二区| 视频在线观看一区二区三区| 91精品在线一区二区| 久久99精品久久久久久| 久久综合久久综合九色| 国产一区二区福利视频| 久久美女艺术照精彩视频福利播放| 经典三级一区二区| 久久美女高清视频| 91色综合久久久久婷婷| 亚洲午夜国产一区99re久久| 欧美日韩国产影片| 免费观看91视频大全| 久久精品一二三| 色悠悠亚洲一区二区| 三级成人在线视频| 2014亚洲片线观看视频免费| www.色精品| 天天影视涩香欲综合网| 欧美不卡123| 99精品久久只有精品| 亚洲成人av中文| 久久久久久99久久久精品网站| 99久久久精品| 日本在线不卡视频| 国产精品久久久久久亚洲毛片 | 久久一区二区三区四区| 波多野结衣欧美| 午夜久久久久久久久| 亚洲欧洲日本在线| 91麻豆精品91久久久久久清纯| 国产精品白丝jk黑袜喷水| 亚洲乱码精品一二三四区日韩在线| 欧美日本在线视频| 成人免费视频网站在线观看| 丝袜美腿亚洲一区| 亚洲欧洲精品一区二区精品久久久| 在线看一区二区| 国产精品69久久久久水密桃| 亚洲综合清纯丝袜自拍| 欧美经典一区二区| 7777精品伊人久久久大香线蕉最新版| 国产成人午夜电影网| 日韩国产在线观看| 亚洲伦理在线精品| 欧美国产亚洲另类动漫| 91精品国产一区二区人妖| 91免费版在线| 国产美女精品在线| 秋霞午夜鲁丝一区二区老狼| 综合久久综合久久| 国产欧美一区二区精品仙草咪| 91精品国产一区二区三区蜜臀| 91首页免费视频| 成人avav在线| 国产黄色成人av| 久久国产日韩欧美精品| 日本在线不卡视频一二三区| 亚洲一线二线三线视频| 亚洲视频一区在线| 国产精品久久99| 日本一区二区三区国色天香 | 国产美女娇喘av呻吟久久| 日一区二区三区| 亚洲va欧美va人人爽午夜 | 欧美美女激情18p| 91麻豆成人久久精品二区三区| 国产成人综合在线观看| 精品系列免费在线观看| 91香蕉视频污在线| 亚洲成人在线观看视频| 国产精品久线观看视频| 91在线观看下载| 国产成人精品www牛牛影视| 日韩精品综合一本久道在线视频| 天堂va蜜桃一区二区三区| 亚洲国产精品成人综合色在线婷婷 | 国模冰冰炮一区二区| 理论片日本一区| 韩国v欧美v亚洲v日本v| 国产在线国偷精品产拍免费yy | 久久美女艺术照精彩视频福利播放| 日韩视频一区二区三区| 欧美成人video| 日韩天堂在线观看| proumb性欧美在线观看| 国产乱色国产精品免费视频| 国产真实乱子伦精品视频| 国产精品一卡二卡| 成人99免费视频| 日本韩国一区二区三区视频| 欧美日韩三级视频| 日韩欧美国产三级| 国产欧美1区2区3区| 国产精品三级久久久久三级| 中文字幕欧美一| 午夜不卡av在线| 狠狠色丁香久久婷婷综| 成人高清视频在线| 欧美在线综合视频| 精品国产精品网麻豆系列| 国产精品久久久爽爽爽麻豆色哟哟| 一区二区三区电影在线播| 午夜精品123| 国产盗摄一区二区| 日本韩国欧美在线| 日韩欧美123| 一区二区三区日韩欧美| 久久99精品久久久久婷婷| jizz一区二区| 国产人伦精品一区二区| 欧美精品一区二| 国产网站一区二区三区| 91视频com| 久久久久久久久99精品| 亚洲综合区在线| 高清免费成人av| 在线播放亚洲一区| ...xxx性欧美| 欧美性xxxxxx少妇| 欧美精品一区二区三区在线| 亚洲欧美日韩久久| 国产成人综合精品三级| 精品视频一区二区三区免费| 国产精品亲子伦对白| 美腿丝袜亚洲一区|