2010-02-09 37 views
5

Tôi vừa có cuộc gọi hỗ trợ kỹ thuật rất dài vì khách hàng không có Micrô trên máy tính xách tay của họ. (Stupid tôi: họ nói rằng họ đã sử dụng mic trước đó và tôi chưa bao giờ nghe nói về một máy tính xách tay không có một Mic).Cách phát hiện xem Micrô có hiện diện không

Tôi tự hỏi nếu có một cách để phát hiện xem có một Microphone (ghi khả năng) trên Windows XP, Vista, 7.

(Tôi đã có lỗi xử lý kích hoạt và nó ghi lại lỗi và sau đó thoát ra các chức năng nhưng các ứng dụng chỉ treo trên Windows 7 nếu không có Microphone)

+0

tương tự: http://stackoverflow.com/questions/1559542/detecting-if-the-microphone-is-on –

+0

bạn đã cố gắng sử dụng *** Direct X *** ? – Kiquenet

Trả lời

0

tôi nghĩ rằng cách duy nhất bạn sẽ có thể làm điều này trong VB 6 là thông qua Direct X:.

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

Bạn có thể kiểm tra này ra:

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

CaptureDevices Collection Class (Microsoft.DirectX.DirectSound)

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

bạn cũng có thể gọi dxdiag ..

+0

Tôi chưa thử nghiệm điều này nhưng nó trông giống như câu trả lời hay nhất (đối với VB6). –

+0

@ClayNichols bạn đã thử nghiệm chưa? – Kiquenet

1

Tôi muốn sử dụng IMMDeviceEnumerator::GetDefaultAudioEndpoint - lợi nhuận này thiết bị âm thanh mặc định cho vai trò và luồng dữ liệu được chỉ định.

Đặc biệt, bạn sẽ sử dụng:

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

Bài đăng gốc được gắn thẻ VB6 .... –

1

trong 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

cẩn thận để giải thích? –

Các vấn đề liên quan