2010-02-09 24 views
5

Acabo de recibir una llamada de soporte técnico muy larga porque un cliente no tenía un micrófono en su computadora portátil. (Estúpido de mí: dijeron que habían usado el micrófono antes y nunca he oído hablar de una computadora portátil no que tiene un micrófono).Cómo detectar si un micrófono está presente

Me pregunto si hay una manera de detectar si hay un micrófono (capacidad de grabación) en Windows XP, Vista, 7

(Tengo manejo de errores habilitado y se registra el error y a continuación, sale de la función, pero la aplicación sólo se bloquea en Windows 7 si no hay un micrófono)

+0

similares: http://stackoverflow.com/questions/1559542/detecting-if-the-microphone-is-on –

+0

hicieron intentado utilizar *** *** Direct X ? – Kiquenet

Respuesta

0

creo que la única forma en que será capaz de hacer esto en VB 6 es a través de Direct X:.

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

Puede verificar esto:

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

CaptureDevices Class Collection (Microsoft.DirectX.DirectSound)

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

también puede llamar dxdiag ..

+0

No he probado esto, pero parece ser la mejor respuesta (para VB6). –

+0

@ClayNichols ¿Has probado? – Kiquenet

1

que haría uso de IMMDeviceEnumerator::GetDefaultAudioEndpoint - Esto devuelve el dispositivo de audio predeterminado para el rol y el flujo de datos especificados.

En particular, se debería utilizar:

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 
    } 
+0

Original post etiquetado VB6 .... –

1

en 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

cuidado de explicar? –

Cuestiones relacionadas