2010-02-09 13 views
5

Ho appena avuto una chiamata di assistenza tecnica molto lunga perché un cliente non aveva un microfono sul proprio laptop. (Stupido: hanno detto che avevano usato il microfono in precedenza e non ho mai sentito parlare di un laptop non con un microfono).Come rilevare se è presente un microfono

Mi chiedo se c'è un modo per rilevare se c'è un microfono (capacità di registrazione) su Windows XP, Vista, 7.

(Ho la gestione degli errori abilitato e si registra l'errore e poi esce dalla funzione, ma l'applicazione si blocca solo su Windows 7 se non c'è microfono)

+0

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

+0

hai provato a usare *** *** Direct X ? – Kiquenet

risposta

0

credo che l'unico modo sarete in grado di fare questo in VB 6 è attraverso Direct X:.

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

Puoi controllare questo fuori:

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

si può anche chiamare dxdiag ..

+0

Non l'ho provato ma sembra la risposta migliore (per VB6). –

+0

@ClayNichols hai provato? – Kiquenet

1

userei IMMDeviceEnumerator::GetDefaultAudioEndpoint - Restituisce il dispositivo audio predefinito per il ruolo e il flusso di dati specificati.

In particolare, si userebbe:

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

Post originale VB6 .... –

1

in 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

cura di spiegare? –

Problemi correlati