顧客がラップトップにマイクを持っていなかったため、私は非常に長いテクニカルサポートコールを受けました。(愚かな私:彼らは以前にマイクを使用したと言っていましたが、ラップトップにマイクがないことは聞いたことがありません)。
Windows XP、Vista、7にマイク(録音機能)があるかどうかを検出する方法があるかどうか疑問に思っています。
(エラー処理を有効にして、エラーをログに記録してから関数を終了しますが、マイクがない場合、アプリはWindows 7でクラッシュします。)
顧客がラップトップにマイクを持っていなかったため、私は非常に長いテクニカルサポートコールを受けました。(愚かな私:彼らは以前にマイクを使用したと言っていましたが、ラップトップにマイクがないことは聞いたことがありません)。
Windows XP、Vista、7にマイク(録音機能)があるかどうかを検出する方法があるかどうか疑問に思っています。
(エラー処理を有効にして、エラーをログに記録してから関数を終了しますが、マイクがない場合、アプリはWindows 7でクラッシュします。)
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 ソース コードでは、オーディオ I/O デバイスを列挙する方法の例を示します。
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 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.. を呼び出すこともできます。