【问题标题】:How turn off microphone in windows c++ [closed]如何在 Windows C++ 中关闭麦克风 [关闭]
【发布时间】:2013-03-24 16:26:16
【问题描述】:

我想制作关闭麦克风的代码(它会产生白噪声),我如何通过 vc++(不是 .NET)来做到这一点?

【问题讨论】:

  • 你为什么不直接用设备管理器禁用它?
  • 或者在声音和音频设备中禁用麦克风回声?
  • 嗯,你试过什么?
  • 我需要一些 WinAPI!我可以使用键盘上的“Win + r”快速禁用它。我没有鼠标

标签: c++ windows visual-studio winapi


【解决方案1】:

你可以使用下面的 sn-p,它应该适合你...

void setVolume(DWORD volume) {
HMIXER mixer;

if (mixerOpen(&mixer, 0, 0, 0, 0) != MMSYSERR_NOERROR) {
    MessageBoxW(NULL, L"Error: mixerOpen()", NULL, MB_ICONHAND);
    return;
}

// Get the line info
MIXERCAPS mixcaps;
MIXERLINE mixerLine;
mixerGetDevCaps(0, &mixcaps, sizeof(MIXERCAPS));
mixerLine.cbStruct = sizeof(MIXERLINE);
mixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
mixerLine.dwSource = 0;
mixerLine.dwDestination = 0;

if (mixerGetLineInfo(reinterpret_cast<HMIXEROBJ>(mixer), &mixerLine, MIXER_GETLINEINFOF_SOURCE)
    != MMSYSERR_NOERROR) {
        MessageBoxW(NULL, L"Error: mixerGetLineInfo()", NULL, MB_ICONHAND);
        return;
}

// Get control for mixerline
MIXERCONTROL mixerCtrl;
MIXERLINECONTROLS mixerLineCtrl;

mixerLineCtrl.cbStruct = sizeof(MIXERLINECONTROLS);
mixerLineCtrl.dwLineID = mixerLine.dwLineID;
mixerLineCtrl.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mixerLineCtrl.cControls = 1;
mixerLineCtrl.pamxctrl = &mixerCtrl;
mixerLineCtrl.cbmxctrl = sizeof(MIXERCONTROL);
mixerLineCtrl.cControls = 5;

if (mixerGetLineControls(reinterpret_cast<HMIXEROBJ>(mixer), &mixerLineCtrl, MIXER_GETLINECONTROLSF_ONEBYTYPE)
    != MMSYSERR_NOERROR) {
        MessageBoxW(NULL, L"Error: mixerGetLineControls()", NULL, MB_ICONHAND);
        return;
}

// Volume..
MIXERCONTROLDETAILS mixerCtrlDetails;
MIXERCONTROLDETAILS_UNSIGNED mixerCtrlDetailsUnsigned;

mixerCtrlDetailsUnsigned.dwValue = volume;
mixerCtrlDetails.dwControlID = mixerCtrl.dwControlID;
mixerCtrlDetails.cbStruct = sizeof(MIXERCONTROLDETAILS);
mixerCtrlDetails.cMultipleItems = 0;
mixerCtrlDetails.paDetails = &mixerCtrlDetailsUnsigned;
mixerCtrlDetails.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mixerCtrlDetails.cChannels = 1;

if (mixerSetControlDetails(reinterpret_cast<HMIXEROBJ>(mixer), &mixerCtrlDetails, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE)
    != MMSYSERR_NOERROR) {
        MessageBoxW(NULL, L"Error: mixerSetControlDetails()", NULL, MB_ICONHAND);
        return;
}

mixerClose(mixer);
}

在 vista 和 7 中 API 有变化,请查看 http://blogs.msdn.com/b/larryosterman/archive/2007/03/06/how-do-i-change-the-master-volume-in-windows-vista.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多