如何检测麦克风是否存在

发布于 2024-08-21 15:43:24 字数 217 浏览 7 评论 0原文

我刚刚接到了一个很长的技术支持电话,因为客户的笔记本电脑上没有麦克风。 (愚蠢的我:他们说他们之前使用过麦克风,而我从未听说过笔记本电脑没有有麦克风)。

我想知道是否有一种方法可以检测 Windows XP、Vista、7 上是否有麦克风(录音功能)。

(我已启用错误处理,它会记录错误,然后退出功能,但应用程序只是如果没有麦克风,在 Windows 7 上会崩溃)。

I just had a very long tech support call because a customer didn't have a Mic on their laptop. (Stupid me: they said they'd used the mic earlier and I have never heard of a laptop not having a Mic).

I'm wondering if there is a way to detect whether there is a Microphone (recording capability) on Windows XP, Vista, 7.

(I've got error handling enabled and it logs the error and then exits the Function but the app just crashes on Windows 7 if there's no Microphone. )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

游魂 2024-08-28 15:43:24

我会使用 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
    }

I'd use IMMDeviceEnumerator::GetDefaultAudioEndpoint - this returns the default audio device for the specified role and data flow.

In particular, you would use:

    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
    }
落在眉间の轻吻 2024-08-28 15:43:24

查看系统托盘音频设备切换器

在此VB 源代码 您将获得有关如何枚举音频 I/O 设备的示例。

Check out System Tray Audio Device Switcher

In this VB source code you will an example on how to enumerate audio I/O devices.

韬韬不绝 2024-08-28 15:43:24

在 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;
}

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;
}
小糖芽 2024-08-28 15:43:24

我认为在 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..

I think the only way you will be able to do this in VB 6 is through Direct X:

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

You can check this out:

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

you can also call dxdiag..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文