다음을 통해 공유


디바이스에서 지원하는 기능 범주 검색

Windows 이식 가능한 디바이스는 하나 이상의 기능 범주를 지원할 수 있습니다. 이러한 범주는 다음 표에 설명되어 있습니다.

범주 설명
오디오 캡처 디바이스를 사용하여 오디오를 녹음할 수 있습니다.
렌더링 정보 디바이스는 렌더링할 수 있는 미디어 파일을 설명하는 데이터를 제공합니다.
SMS(짧은 메시지 서비스) 디바이스는 문자 메시지를 지원합니다.
스틸 이미지 캡처 디바이스를 사용하여 스틸 이미지를 캡처할 수 있습니다.
스토리지 디바이스를 사용하여 파일을 저장할 수 있습니다.

 

DeviceCapabilities.cpp 모듈의 ListFunctionalCategories 함수는 선택한 디바이스에 대한 기능 범주 검색을 보여 줍니다.

애플리케이션은 다음 표에 설명된 인터페이스를 사용하여 디바이스에서 지원하는 기능 범주를 검색할 수 있습니다.

인터페이스 Description
IPortableDeviceCapabilities 인터페이스 기능 범주 검색 메서드에 대한 액세스를 제공합니다.
IPortableDevicePropVariantCollection 인터페이스 기능 범주 데이터를 열거하고 저장하는 데 사용됩니다.

 

샘플 애플리케이션에서 수행하는 첫 번째 작업은 선택한 디바이스에서 기능 범주를 검색하는 데 사용되는 IPortableDeviceCapabilities 개체를 검색하는 것입니다.

HRESULT hr = S_OK;
CComPtr<IPortableDeviceCapabilities>            pCapabilities;
CComPtr<IPortableDevicePropVariantCollection>   pCategories;
DWORD dwNumCategories = 0;

if (pDevice == NULL)
{
    printf("! A NULL IPortableDevice interface pointer was received\n");
    return;
}

// Get an IPortableDeviceCapabilities interface from the IPortableDevice interface to
// access the device capabilities-specific methods.
hr = pDevice->Capabilities(&pCapabilities);
if (FAILED(hr))
{
    printf("! Failed to get IPortableDeviceCapabilities from IPortableDevice, hr = 0x%lx\n",hr);
}

// Get all functional categories supported by the device.
if (SUCCEEDED(hr))
{
    hr = pCapabilities->GetFunctionalCategories(&pCategories);
    if (FAILED(hr))
    {
        printf("! Failed to get functional categories from the device, hr = 0x%lx\n",hr);
    }
}

검색된 범주는 IPortableDevicePropVariantCollection 개체에 저장됩니다.

다음 단계는 지원되는 범주의 열거형 및 표시입니다. 샘플 애플리케이션이 수행하는 첫 번째 단계는 지원되는 범주 수를 검색하는 것입니다. 그런 다음 이 개수를 사용하여 지원되는 범주를 포함하는 IPortableDevicePropVariantCollection 개체를 반복합니다.

if (SUCCEEDED(hr))
{
    hr = pCategories->GetCount(&dwNumCategories);
    if (FAILED(hr))
    {
        printf("! Failed to get number of functional categories, hr = 0x%lx\n",hr);
    }
}

printf("\n%d Functional Categories Found on the device\n\n", dwNumCategories);

// Loop through each functional category and display its name
if (SUCCEEDED(hr))
{
    for (DWORD dwIndex = 0; dwIndex < dwNumCategories; dwIndex++)
    {
        PROPVARIANT pv = {0};
        PropVariantInit(&pv);
        hr = pCategories->GetAt(dwIndex, &pv);
        if (SUCCEEDED(hr))
        {
            // We have a functional category.  It is assumed that
            // functional categories are returned as VT_CLSID
            // VarTypes.

            if (pv.puuid != NULL)
            {
                // Display the functional category name
                DisplayFunctionalCategory(*pv.puuid);
                printf("\n");
            }
        }

        PropVariantClear(&pv);
    }
}

IPortableDevice 인터페이스

IPortableDeviceCapabilities 인터페이스

IPortableDevicePropVariantCollection 인터페이스

프로그래밍 가이드