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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? volumeinxxx.cpp

?? nettalk
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	m_dwVolumeStep = Control.Metrics.cSteps;

	m_bInitialized = true;
	return true;
}
/*------------------------------------------------------------------------------*/
//////////////////////////////////////////////
bool CVolumeInXXX::GetMicrophoneSourceLineIndex( UINT* puLineIndex )
{
	if ( !puLineIndex || !m_bInitialized || (m_uMicrophoneSourceLineIndex==BAD_DWORD) )
		return false;
	*puLineIndex = m_uMicrophoneSourceLineIndex;
	return true;
}
/*------------------------------------------------------------------------------*/
//////////////////////////////////////////////
// IVolume interface
//////////////

bool CVolumeInXXX::IsAvailable()
{
	return m_bAvailable;
}
/*------------------------------------------------------------------------------*/
//////////////
void CVolumeInXXX::Enable()
{
	if ( !m_bInitialized )
		return;
	bool bAnyEnabled = false;
	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 )
	{
		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 )
	{
		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 )
					{
						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 )
					{
						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 )
				{
					bAnyEnabled = true;
				}
				free( aDetails );
			}
		}
	} else {
	}
	free( aControls );
	if ( !bAnyEnabled )
	{
	}
}
/*------------------------------------------------------------------------------*/
//////////////
void CVolumeInXXX::Disable()
{
}
/*------------------------------------------------------------------------------*/
//////////////
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 )
	{
		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 )
	{
	}
}
/*------------------------------------------------------------------------------*/
//////////////
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 )
	{
		return false;
	}
	UINT uMixerID;
	DWORD dwMixerHandle;
	mmResult = mixerGetID( (HMIXEROBJ)hwaveIn, &uMixerID, MIXER_OBJECTF_HWAVEIN );
	waveInClose( hwaveIn );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		return false;
	}
	mmResult = mixerOpen( (LPHMIXER)&dwMixerHandle, uMixerID, 0L, 0L, 0L );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		mixerClose( (HMIXER)dwMixerHandle );
		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 );
		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 );
			return false;
		}
		if ( !((*pUserCallback)( uLineIndex, &Line, dwUserValue )) )
		{
			break;
		}
	}
	mixerClose( (HMIXER)dwMixerHandle );
	return true;
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产另类精品专区| 日本人妖一区二区| 欧美一区二区三区视频| 国产成人精品网址| 日韩精品成人一区二区在线| 国产精品欧美久久久久无广告 | 国产99久久久国产精品| 亚洲一二三级电影| 国产精品久久久久久久久晋中 | 中文字幕在线不卡| 日韩一区二区免费高清| 欧美伊人久久久久久久久影院| 国产馆精品极品| 久久精品噜噜噜成人av农村| 一区二区三区蜜桃网| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 色狠狠综合天天综合综合| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲国产成人一区二区三区| 国产91精品一区二区麻豆亚洲| 欧美乱妇一区二区三区不卡视频| 日韩成人精品在线观看| 一区二区三区四区不卡在线| 国产精品毛片久久久久久久| 2022国产精品视频| 欧美一区在线视频| 欧美久久久久久蜜桃| 在线精品视频免费观看| 91精品福利在线| 色婷婷综合久久| 色综合天天做天天爱| 91在线丨porny丨国产| 国产成人免费av在线| 国产一区二区免费看| 国内一区二区视频| 国产最新精品精品你懂的| 久久99国内精品| 激情综合网最新| 国模大尺度一区二区三区| 免费日韩伦理电影| 极品少妇xxxx精品少妇偷拍| 激情国产一区二区| 国产精品一二三区| 成人网页在线观看| 色综合天天做天天爱| 欧洲亚洲国产日韩| 91精选在线观看| 精品少妇一区二区三区视频免付费| 欧美一区二区免费| 久久精品一区八戒影视| 国产精品乱码妇女bbbb| 国产精品久久久久久久久搜平片| 成人欧美一区二区三区在线播放| 亚洲天堂av一区| 一区二区三区日本| 蜜桃在线一区二区三区| 国产精品羞羞答答xxdd| www.视频一区| 欧美色老头old∨ideo| 91精品国产综合久久小美女| 日韩精品一区二区三区蜜臀| 久久久久久久久99精品| 亚洲欧洲日产国码二区| 夜夜嗨av一区二区三区网页| 蜜臀av在线播放一区二区三区| 紧缚奴在线一区二区三区| aaa国产一区| 欧美日韩卡一卡二| 精品久久久久久久久久久久久久久 | 欧美在线不卡一区| 欧美一级xxx| 国产欧美一区二区三区鸳鸯浴| 亚洲同性gay激情无套| 视频一区欧美精品| 成人美女在线观看| 欧美精品 日韩| 中文字幕乱码日本亚洲一区二区| 一区二区三区日韩| 国产一区二区成人久久免费影院| av电影一区二区| 91精品国产综合久久精品app | 91丨porny丨蝌蚪视频| 欧美精品九九99久久| 国产清纯白嫩初高生在线观看91 | 国产资源在线一区| 99国产麻豆精品| 日韩一级免费观看| 亚洲欧美日韩成人高清在线一区| 日韩高清不卡一区| 成人av网站大全| 日韩一区二区免费视频| 亚洲人成7777| 国产在线视频精品一区| 欧美亚洲动漫精品| 亚洲国产成人在线| 美女任你摸久久| 91福利精品视频| 精品国产网站在线观看| 亚洲午夜私人影院| 成人高清免费观看| 日韩精品一区二| 午夜伦欧美伦电影理论片| www.亚洲精品| 国产欧美一区二区三区在线看蜜臀 | 日韩欧美精品在线| 亚洲精品你懂的| 粉嫩高潮美女一区二区三区| 欧美妇女性影城| 亚洲精品日韩一| 成人免费视频国产在线观看| 日韩免费高清av| 三级影片在线观看欧美日韩一区二区| 波多野结衣中文字幕一区 | 国产酒店精品激情| 日韩欧美视频一区| 日本欧美一区二区| 欧美亚男人的天堂| 亚洲蜜臀av乱码久久精品| 风间由美一区二区三区在线观看| 精品少妇一区二区三区在线播放 | 亚洲三级在线免费| www.久久久久久久久| 久久精品人人做人人爽人人| 精品一区中文字幕| 日韩精品中文字幕一区| 青椒成人免费视频| 欧美电影免费观看高清完整版在 | 亚洲狠狠爱一区二区三区| 91视频一区二区| 亚洲色大成网站www久久九九| 99久久精品免费看国产 | 欧美激情综合在线| 国产精一区二区三区| 久久久亚洲综合| 国产成人午夜片在线观看高清观看| 久久久亚洲高清| 国产美女精品人人做人人爽| xf在线a精品一区二区视频网站| 精品一二三四区| 久久久久久久久伊人| 丁香天五香天堂综合| 国产精品美女久久福利网站| 99久久精品久久久久久清纯| 亚洲欧洲一区二区在线播放| 99久久免费国产| 一区二区三区日韩| 欧美精品一二三| 麻豆精品在线观看| 久久久久久久国产精品影院| 成人在线一区二区三区| 亚洲三级理论片| 欧美日本一区二区在线观看| 日韩和欧美的一区| 2023国产精品| 99国产精品久| 午夜久久福利影院| 精品999在线播放| 99久久99久久精品免费观看| 一区二区三区91| 日韩欧美黄色影院| 成人亚洲一区二区一| 亚洲摸摸操操av| 日韩一二三四区| 成人不卡免费av| 亚洲国产综合色| 欧美变态tickling挠脚心| 国产91丝袜在线18| 亚洲国产一区二区三区青草影视| 91精品国产入口在线| 国产美女久久久久| 一区二区日韩电影| 精品国产一区二区三区久久影院| 成人福利电影精品一区二区在线观看| 一区二区三区91| 久久久久国产精品人| 91福利在线播放| 久久99精品视频| 亚洲久草在线视频| 日韩久久精品一区| 91猫先生在线| 精品综合久久久久久8888| 亚洲美女视频一区| 2020国产精品| 欧美性高清videossexo| 国产精品69久久久久水密桃| 亚洲二区在线视频| 日本一区二区三区视频视频| 欧美日韩一区二区三区四区五区| 国产在线精品免费| 亚洲va中文字幕| 国产精品成人在线观看| 欧美一区二区三区视频在线| 91伊人久久大香线蕉| 久久97超碰色| 亚洲高清久久久| 亚洲天堂久久久久久久| 久久女同互慰一区二区三区| 欧美精品久久99| 欧美在线观看视频在线| 成人午夜精品在线|