// 允许/禁止静音
// 63 63 72 75 6E 2E 63 6F 6D
#include <mmsystem.h>
bool SetMicrophoneVolumeMute(bool bMute)
{
HMIXER hMixer;
MIXERLINECONTROLS mxlc;
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;
MIXERCONTROL mxc;
MIXERLINE mxl;
MIXERCONTROLDETAILS_BOOLEAN mcdb;
// Check if Mixer is available
int nMixerDevs = mixerGetNumDevs();
if(nMixerDevs < 1)
return false;
bool bRet = false;
// open the mixer
UINT uRet = mixerOpen(&hMixer, 0, 0, 0, 0);
if(uRet == MMSYSERR_NOERROR)
{
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
mxl.cbStruct = sizeof(mxl);
// mixerline info
uRet = mixerGetLineInfo(hMixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxlc, sizeof(mxlc));
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(mxc);
mxlc.pamxctrl = &mxc;
// Get the mute control
uRet = mixerGetLineControls(hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = mxc.dwControlID;
mxcd.cChannels = 1;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails = &mcdb;
mcdb.fValue = bMute;
// set, unset mute
uRet = mixerSetControlDetails(
hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
// mixerGetControlDetails(hMixer, &mxcd,
// MIXER_GETCONTROLDETAILSF_VALUE);
// Result = Boolean(mcdMute.fValue);
bRet = uRet == MMSYSERR_NOERROR;
}
else
ShowMessage("GetLineInfo Error");
}
uRet = mixerClose(hMixer);
}
return bRet;
}
// 使用举例:
// SetMicrophoneVolumeMute(false);
// 63 63 72 75 6E 2E 63 6F 6D
#include <mmsystem.h>
bool SetMicrophoneVolumeMute(bool bMute)
{
HMIXER hMixer;
MIXERLINECONTROLS mxlc;
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;
MIXERCONTROL mxc;
MIXERLINE mxl;
MIXERCONTROLDETAILS_BOOLEAN mcdb;
// Check if Mixer is available
int nMixerDevs = mixerGetNumDevs();
if(nMixerDevs < 1)
return false;
bool bRet = false;
// open the mixer
UINT uRet = mixerOpen(&hMixer, 0, 0, 0, 0);
if(uRet == MMSYSERR_NOERROR)
{
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
mxl.cbStruct = sizeof(mxl);
// mixerline info
uRet = mixerGetLineInfo(hMixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxlc, sizeof(mxlc));
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(mxc);
mxlc.pamxctrl = &mxc;
// Get the mute control
uRet = mixerGetLineControls(hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = mxc.dwControlID;
mxcd.cChannels = 1;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails = &mcdb;
mcdb.fValue = bMute;
// set, unset mute
uRet = mixerSetControlDetails(
hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
// mixerGetControlDetails(hMixer, &mxcd,
// MIXER_GETCONTROLDETAILSF_VALUE);
// Result = Boolean(mcdMute.fValue);
bRet = uRet == MMSYSERR_NOERROR;
}
else
ShowMessage("GetLineInfo Error");
}
uRet = mixerClose(hMixer);
}
return bRet;
}
// 使用举例:
// SetMicrophoneVolumeMute(false);
解决方案 »
- TerminateThread(hThread,0);这个函数出错了
- 有关带对话框DLL再调用带对话框DLL的问题。
- VC2008怎么才能不用#include"stdafx.h"
- 找工作中……每天散100分
- VC 6.0 平台下如何更改Tab control标签颜色
- 急聘图形开发设计人员!(没能力者勿扰!)
- QQ网络视频、音频 技术讨论
- 怎样对两张表进行一致性检查?(包括字段名称,字段类别.)
- 请教:怎样设置Win2000 PRO ,屏蔽Application Popup传递消息的骚扰???送高分还有一个帖子,送100分,共150分
- 如何实现对其他应用程序的调用
- 众位帮忙!vs2005环境下的资源与类关联的诡异问题
- DLL 能使用 线程类吗,需要什么头文件
// 63 63 72 75 6E 2E 63 6F 6D
#include <mmsystem.h>
bool SetMicrophoneVolumeMute(bool bMute)
{
HMIXER hMixer;
MIXERLINECONTROLS mxlc;
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;
MIXERCONTROL mxc;
MIXERLINE mxl;
MIXERCONTROLDETAILS_BOOLEAN mcdb;
// Check if Mixer is available
int nMixerDevs = mixerGetNumDevs();
if(nMixerDevs < 1)
return false;
bool bRet = false;
// open the mixer
UINT uRet = mixerOpen(&hMixer, 0, 0, 0, 0);
if(uRet == MMSYSERR_NOERROR)
{
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
mxl.cbStruct = sizeof(mxl);
// mixerline info
uRet = mixerGetLineInfo(hMixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxlc, sizeof(mxlc));
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(mxc);
mxlc.pamxctrl = &mxc;
// Get the mute control
uRet = mixerGetLineControls(hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = mxc.dwControlID;
mxcd.cChannels = 1;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails = &mcdb;
mcdb.fValue = bMute;
// set, unset mute
uRet = mixerSetControlDetails(
hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
// mixerGetControlDetails(hMixer, &mxcd,
// MIXER_GETCONTROLDETAILSF_VALUE);
// Result = Boolean(mcdMute.fValue);
bRet = uRet == MMSYSERR_NOERROR;
}
else
ShowMessage("GetLineInfo Error");
}
uRet = mixerClose(hMixer);
}
return bRet;
}
// 使用举例:
// SetMicrophoneVolumeMute(false);
// 63 63 72 75 6E 2E 63 6F 6D
#include <mmsystem.h>
bool SetMicrophoneVolumeMute(bool bMute)
{
HMIXER hMixer;
MIXERLINECONTROLS mxlc;
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;
MIXERCONTROL mxc;
MIXERLINE mxl;
MIXERCONTROLDETAILS_BOOLEAN mcdb;
// Check if Mixer is available
int nMixerDevs = mixerGetNumDevs();
if(nMixerDevs < 1)
return false;
bool bRet = false;
// open the mixer
UINT uRet = mixerOpen(&hMixer, 0, 0, 0, 0);
if(uRet == MMSYSERR_NOERROR)
{
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
mxl.cbStruct = sizeof(mxl);
// mixerline info
uRet = mixerGetLineInfo(hMixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxlc, sizeof(mxlc));
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(mxc);
mxlc.pamxctrl = &mxc;
// Get the mute control
uRet = mixerGetLineControls(hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = mxc.dwControlID;
mxcd.cChannels = 1;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails = &mcdb;
mcdb.fValue = bMute;
// set, unset mute
uRet = mixerSetControlDetails(
hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
// mixerGetControlDetails(hMixer, &mxcd,
// MIXER_GETCONTROLDETAILSF_VALUE);
// Result = Boolean(mcdMute.fValue);
bRet = uRet == MMSYSERR_NOERROR;
}
else
ShowMessage("GetLineInfo Error");
}
uRet = mixerClose(hMixer);
}
return bRet;
}
// 使用举例:
// SetMicrophoneVolumeMute(false);
1.flash 里面的声音都是WAVE类型 HOOK waveOutWrite
2.WMP,迅雷看看,PPLIVE什么的是dsound HOOK DirectSoundCreate,CreateSoundBuffer,SetVolume我已经实现了
http://blog.csdn.net/farcall/article/details/6337638
函数封装好了 可以直接使用