Проверка поддерживаемых полей данных датчика
В этом разделе описывается, как проверить, может ли датчик предоставить определенный набор полей данных.
После получения объекта датчика можно вызвать метод ISensor::GetSupportedDataFields , чтобы определить, может ли датчик предоставить необходимые данные.
В следующем примере кода создается вспомогающая функция, которая проверяет, может ли датчик предоставить все три примера полей данных. Функция принимает указатель на датчик в качестве входных данных и возвращает логическое значение, где ЗНАЧЕНИЕ TRUE указывает, что датчик может предоставить все необходимые поля данных.
BOOL CheckForSupportedDataFields(ISensor* pSensor)
{
assert(pSensor);
HRESULT hr = S_OK;
DWORD cKeys = 0; // Key count.
BOOL bRet = FALSE;
IPortableDeviceKeyCollection* pKeys = NULL; // Output
// CoCreate a key collection to store property keys.
hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pKeys));
if(SUCCEEDED(hr))
{
hr = pSensor->GetSupportedDataFields(&pKeys);
}
if(SUCCEEDED(hr))
{
hr = pKeys->GetCount(&cKeys);
}
if(SUCCEEDED(hr))
{
PROPERTYKEY pk;
BOOL bHour, bMinute, bSecond = FALSE;
for (DWORD i = 0; i < cKeys; i++)
{
hr = pKeys->GetAt(i, &pk);
if(SUCCEEDED(hr))
{
// Test for the data fields.
if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_HOUR))
{
bHour = TRUE;
}
else if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_MINUTE))
{
bMinute = TRUE;
}
else if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_SECOND))
{
bSecond = TRUE;
}
}
}
// Compute the return value.
// If all three properties were found,
// bRet will resolve to TRUE.
bRet = bHour && bMinute && bSecond;
}
SafeRelease(&pKeys);
return bRet;
}
Связанные темы