如何检测是否存在麦克风

时间:2010-02-09 19:09:46

标签: vb6 windows-7 windows-vista windows-xp microphone

我刚接到一个非常长的技术支持电话,因为客户的笔记本电脑上没有麦克风。 (愚蠢的我:他们说他们之前使用过麦克风,我从来没有听说过笔记本电脑没有有麦克风)。

我想知道是否有办法检测Windows XP,Vista,7上是否有麦克风(录音功能)。

(我已启用错误处理并记录错误,然后退出该功能,但如果没有麦克风,应用程序只会在Windows 7上崩溃。)

4 个答案:

答案 0 :(得分:1)

我使用IMMDeviceEnumerator::GetDefaultAudioEndpoint - 这将返回指定角色和数据流的默认音频设备。

特别是,你会使用:

    CComPtr<IMMDeviceEnumerator> pEnumerator;
    CComPtr<IMMDevice> pDevice;

    hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
           CLSCTX_ALL, IID_PPV_ARGS(&pEnumerator));
    if (SUCCEEDED(hr))
    {
        hr = pEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &pDevice);
    }
    if (!pDevice || hr == ERROR_NOT_FOUND)
    {
           // no microphone
    }

答案 1 :(得分:1)

查看System Tray Audio Device Switcher

在这个VB source code中,您将举例说明如何枚举音频I / O设备。

答案 2 :(得分:1)

在C ++中

#include "stdafx.h"
#include "Mmdeviceapi.h"
#include <atlbase.h>


int _tmain(int argc, _TCHAR* argv[])
{
    CoInitializeEx(NULL, COINIT_MULTITHREADED);

    CComPtr<IMMDeviceEnumerator> pEnumerator = NULL;
    CComPtr<IMMDevice> pDevice;
    const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
    const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
    HRESULT hr = CoCreateInstance(
        CLSID_MMDeviceEnumerator, NULL,
        CLSCTX_ALL, IID_IMMDeviceEnumerator,
        (void**)&pEnumerator);

    if (FAILED(hr))
    {
        printf("failed");
    }
    else
    {
        hr = pEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &pDevice);

        if (!pDevice || hr == ERROR_NOT_FOUND)
        {
            printf("no microphone");
        }
        else
        {
            printf("microphone present");
        }

    }

    return 0;
}

答案 3 :(得分:0)

我认为你能在VB 6中做到这一点的唯一方法是通过Direct X:

http://msdn.microsoft.com/en-us/library/bb318770(VS.85).aspx

你可以看看:

http://msdn.microsoft.com/en-us/library/bb280815(VS.85).aspx

CaptureDevices集合类(Microsoft.DirectX.DirectSound)

http://msdn.microsoft.com/en-us/library/ms810619.aspx

你也可以打电话给dxdiag ..