我刚刚打了一个很长的技术支持电话,因为客户的笔记本电脑上没有麦克风。(愚蠢的我:他们说他们之前使用过麦克风,而我从未听说过没有麦克风的笔记本电脑)。
我想知道是否有一种方法可以检测 Windows XP、Vista、7 上是否有麦克风(录音功能)。
(我启用了错误处理,它会记录错误,然后退出函数,但如果没有麦克风,应用程序只会在 Windows 7 上崩溃。)
我刚刚打了一个很长的技术支持电话,因为客户的笔记本电脑上没有麦克风。(愚蠢的我:他们说他们之前使用过麦克风,而我从未听说过没有麦克风的笔记本电脑)。
我想知道是否有一种方法可以检测 Windows XP、Vista、7 上是否有麦克风(录音功能)。
(我启用了错误处理,它会记录错误,然后退出函数,但如果没有麦克风,应用程序只会在 Windows 7 上崩溃。)
我会使用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
}
在这个VB 源代码中,您将举例说明如何枚举音频 I/O 设备。
在 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;
}
我认为您在 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 ..