Winmm을 통한 사운드 입출력장치 얻어오기
뻘짓

Winmm을 통한 사운드 입출력장치 얻어오기

#include <stdio.h>
#include <locale.h>
#include <mmdeviceapi.h>
#include <Functiondiscoverykeys_devpkey.h>
 
int main()
{
    IMMDeviceEnumerator* pEnumerator;
    IMMDeviceCollection* pCollection;
    unsigned int n, i;
    IMMDevice* device;
    IPropertyStore* store;
    PROPVARIANT varName;
 
    _wsetlocale(LC_ALL, L"korean"); /*정상적인 유니코드 출력을 위한 로케일 명시*/
    CoInitialize(NULL); /*COM 사용을 위한 초기화. 윈속의 WSAStartup과 같은 개념*/
    /*IMM 열거자를 얻어온다*/
    CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pEnumerator);
    pEnumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &pCollection); /*단말 컬렉터를 얻어온다.*/
    pCollection->GetCount(&n); /*단말 갯수 얻기*/
    printf("출력 장치 : \n");
    for (i = 0; i < n; i++) {
        pCollection->Item(i, &device); /*i번 디바이스 얻어오기*/
        device->OpenPropertyStore(STGM_READ, &store); /*디바이스 속성 얻어오기*/
        store->GetValue(PKEY_Device_FriendlyName, &varName); /*디바이스 이름 얻어오기*/
        wprintf(TEXT("%s\n"), varName.pwszVal);
    }
 
    pEnumerator->EnumAudioEndpoints(eCapture, DEVICE_STATE_ACTIVE, &pCollection);
    pCollection->GetCount(&n);
    printf("입력 장치 : \n");
    for (i = 0; i < n; i++) {
        pCollection->Item(i, &device);
        device->OpenPropertyStore(STGM_READ, &store);
        store->GetValue(PKEY_Device_FriendlyName, &varName);
        wprintf(TEXT("%s\n"), varName.pwszVal);
    }
    CoUninitialize(); /*해제*/
    return 0;
}
 
cs

 

실행 결과 : 

PC에 물린 사운드 장비가 모두 열거 되었다.