通过MCI系列的API是无法知道当前声卡信息的,有办法取到所有声卡信息的,不记得了,你搜一搜。

解决方案 »

  1.   

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class
    下面依此读取所有的项,直到找到Class键的值为MEDIA(声卡),
    找到后读取下面的键值
    也可以通过WMI来读取
      

  2.   

    下面的代码是我以前用来读SCSI/RAID设备信息的,你把GUID换成相应的设备就可以了
    Display Adapters 
    Class = Display
    ClassGuid = {4d36e968-e325-11ce-bfc1-08002be10318}Multimedia 
    Class = Media
    ClassGuid = {4d36e96c-e325-11ce-bfc1-08002be10318}#include "stdafx.h"
    #include <stdlib.h>
    #include <windows.h>
    #include <setupapi.h>int main(int argc, char* argv[])
    {
    DWORD  dwIdx = 0;
    SP_DEVINFO_DATA adapterData;
    DWORD  dwType = 0;
    DWORD  dwBuflen = 0;
    PUCHAR  pBuf = NULL;
    HDEVINFO  hScsi = INVALID_HANDLE_VALUE;
    GUID  guidScsiRaid = {
    0x4D36E97B,
    0xE325,
    0x11CE,
    {0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}
    };BOOL bret = FALSE;hScsi = SetupDiGetClassDevs(&guidScsiRaid
    , NULL, NULL, DIGCF_PRESENT);adapterData.cbSize = sizeof(SP_DEVINFO_DATA);for(dwIdx = 0; SetupDiEnumDeviceInfo(hScsi, dwIdx, &adapterData); dwIdx++)
    {
    SetupDiGetDeviceRegistryProperty(
    hScsi, 
    &adapterData, 
    SPDRP_DEVICEDESC,
    &dwType,
    NULL,
    0,
    &dwBuflen
    );if(ERROR_INSUFFICIENT_BUFFER == GetLastError())
    {
    pBuf = (PUCHAR)malloc(dwBuflen);
    if(SetupDiGetDeviceRegistryProperty(
    hScsi, 
    &adapterData, 
    SPDRP_DEVICEDESC,
    &dwType,
    pBuf,
    dwBuflen,
    NULL
    ))
    {
    printf("%s\n", pBuf);
    }free(pBuf);
    pBuf = NULL;
    }
    }SetupDiDestroyDeviceInfoList(hScsi);return 0;
    }
      

  3.   

    即使取到了所有声卡信息 也不知道waveInOpen或者waveOutOpen打开的声卡是哪一个声卡啊
      

  4.   

    看来俺错了,可以通过MCI取得声卡的。waveInGetDevCaps
    waveInGetID
    waveInGetNumDevs
    waveInOpen这几个API楼主认真看看。
      

  5.   

    楼上说的对啊  我开始也糊涂了,直接通过waveInGetDevCaps和waveOutGetDevCaps就可以获得声卡的对应信息;通过参数声卡号对应就行了;