디바이스에서 지원하는 기능 범주 검색
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);
}
}
관련 항목