【问题标题】:GET Master volume in Windows XP/Vista/Seven (the one increased through keyboard wheel normally)GET Windows XP/Vista/Seven 中的主音量(通常通过键盘滚轮增加的那个)
【发布时间】:2011-01-07 20:12:15
【问题描述】:

我知道很多人问过这个问题,但我没有读到任何答案,是否有任何 lib/a 通用方式来获取(未设置,我不需要它)主卷(当前的卷xp/vista/seven 的声音输出源,而不是语音)?

如果没有,xp、vista、七怎么办(我会写我的通用包装器)

我需要显示一个栏(进度条)来显示如何设置当前音量(winform 控件)

编辑:

我找到了一个有用的链接,我正在测试它,但我不会检查答案,直到我得到一些有用的东西 http://www.codeproject.com/KB/audio-video/mixerSetControlDetails.aspx?display=Print

编辑 2:

重要的一点:以前分析音量的方法在 windows vista 或更高版本上不起作用,请改用这个库: http://www.codeproject.com/KB/vista/CoreAudio.aspx

我不知道是否真的很好用,因为我目前没有 vista/7

【问题讨论】:

    标签: c# windows audio


    【解决方案1】:

    mixerGetNumDevs 和相关的 API 有帮助吗? (您必须使用mixerGetLineControls 等浏览所有设备,并查看哪个MIXERCONTROL 为名称显示“音量”;还有一种检查标志的方法。这就是您要寻找的那个。)


    编辑:

    这是我拥有的一些旧代码的 sn-p;我不认为它可以编译,也不是很好的代码(我只需要完成一些事情),但它应该会有所帮助:

    MMRESULT mmResult = mixerOpen(&hMixer, 0, (DWORD_PTR)hWnd, NULL, CALLBACK_WINDOW | MIXER_OBJECTF_MIXER);
    if (MMSYSERR_NOERROR == mmResult)
    {
        MIXERLINE mxl;
        mxl.cbStruct = sizeof(MIXERLINE);
        mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
        MMRESULT mmResult = mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE);
        if (mmResult == MMSYSERR_NOERROR)
        {
            MIXERLINECONTROLS controls;
            memzero(&controls, sizeof(controls));
            controls.cbStruct = sizeof(controls);
            controls.cControls = 1;
            controls.dwLineID = mxl.dwLineID;
            controls.cbmxctrl = sizeof(MIXERCONTROL); //one element only!!
            MIXERCONTROL controlsArray[2]; //First element: volume, second element: mixer
            memzero(&controlsArray, sizeof(controlsArray));
            for (int i = 0; i < sizeof(controlsArray) / sizeof(*controlsArray); i++) { controlsArray[0].cbStruct = sizeof(controlsArray[0]); }
    
            controls.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
            controls.pamxctrl = &controlsArray[0]; //NOTE: this is ZERO
            mmResult = mixerGetLineControls((HMIXEROBJ)hMixer, &controls, MIXER_GETLINECONTROLSF_ONEBYTYPE | MIXER_OBJECTF_HMIXER);
            if (mmResult == MMSYSERR_NOERROR)
            {
                controls.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
                controls.pamxctrl = &controlsArray[1]; //NOTE: this is ONE
                mmResult = mixerGetLineControls((HMIXEROBJ)hMixer, &controls, MIXER_GETLINECONTROLSF_ONEBYTYPE | MIXER_OBJECTF_HMIXER);
                if (mmResult == MMSYSERR_NOERROR)
                {
                    bool isVolume = controls[0].dwControlID == (DWORD)lParam;
                    bool isMute = controls[1].dwControlID == (DWORD)lParam;
                    if (isVolume | isMute)
                    {
                        MIXERCONTROLDETAILS details;
                        memzero(&details, sizeof(details));
                        details.cbStruct = sizeof(details);
                        details.cChannels = 1;
                        details.dwControlID = (DWORD)lParam;
                        MIXERCONTROLDETAILS_UNSIGNED controlDetail;
                        memzero(&controlDetail, sizeof(controlDetail));
                        details.paDetails = &controlDetail;
                        details.cbDetails = sizeof(controlDetail);
                        MMRESULT mmResult = mixerGetControlDetails((HMIXEROBJ)hMixer, &details, MIXER_GETCONTROLDETAILSF_VALUE | MIXER_OBJECTF_HMIXER);
                        if (mmResult == MMSYSERR_NOERROR)
                        {
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 我不知道它是否有效(好吧,我是这个论点的新手),它是否也适用于 vista/seven?
    • 我没有尝试过,但我不明白为什么它不会......它没有被弃用或任何东西。
    • 我应该使用 waveOutGetVolume 来获取波形输出设备的音量吗?
    • 我正在阅读它,顺便说一句,我爱你的大代码示例!我需要像你一样“完成工作”,我只想阅读主卷来展示它......我希望它会更容易
    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多