Как определить наличие микрофона - PullRequest
5 голосов
/ 09 февраля 2010

Мне только что позвонили в службу технической поддержки, потому что у клиента не было микрофона на ноутбуке. (Глупо: они сказали, что раньше использовали микрофон, и я никогда не слышал о ноутбуке , а не с микрофоном).

Мне интересно, есть ли способ определить, есть ли микрофон (возможность записи) в Windows XP, Vista, 7.

(У меня включена обработка ошибок, и она регистрирует ошибку и затем выходит из функции, но приложение просто падает на Windows 7, если нет микрофона.)

Ответы [ 4 ]

1 голос
/ 25 сентября 2014

в 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;
}
1 голос
/ 15 февраля 2010

Я бы использовал 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 голос
/ 16 февраля 2010

Оформить Переключатель аудио устройства в системном трее

В этом исходном коде VB приведен пример перечисления аудиоустройств ввода-вывода.

0 голосов
/ 09 февраля 2010

Я думаю, что единственный способ сделать это в 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 ..

...