Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Вместо этого используйте API датчика UWP .
API датчика на основе COM не рекомендуется использовать в новых приложениях. Никаких дополнительных функций или улучшений не планируется, а поддержка будет ограничена.
В этом разделе описывается, как извлекать данные из датчика, синхронно и асинхронно.
Получение данных синхронно
Данные датчика можно получить синхронно, вызвав ISensor::GetData.
В следующем примере кода извлекается отчет о данных датчика, а затем извлекается три отдельных значения поля данных. Пример датчика предоставляет специальные данные о текущем местном времени в полях данных часов, минут и секунд. Переменная с именем pSensor содержит указатель на ISensor, представляющий датчик, предоставляющий данные.
if(SUCCEEDED(hr))
{
// Get the data report.
hr = pSensor->GetData(&pReport);
}
if(SUCCEEDED(hr))
{
PROPVARIANT var = {};
hr = pReport->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_HOUR, &var);
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulHour = var.ulVal;
}
}
PropVariantClear(&var);
hr = pReport->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_MINUTE, &var);
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulMinute = var.ulVal;
}
}
PropVariantClear(&var);
hr = pReport->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_SECOND, &var);
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulSecond = var.ulVal;
}
}
PropVariantClear(&var);
if(SUCCEEDED(hr))
{
// Print the local time to the console window.
wprintf_s(L"\nCurrent local time is: \n");
wprintf_s(L"%02d:%02d:%02d (synchronous)\n\n", ulHour, ulMinute, ulSecond);
}
Получение данных асинхронно
Вы можете получать данные датчиков асинхронно, зарегистрировавшись для получения события ISensorEvents::OnDataUpdated. Сведения о том, как получать обратные вызовы событий датчика, см. в статье Использование событий API датчика.
В следующем примере кода показана реализация ISensorEvents::OnDataUpdated, которая извлекает значения данных из отчета данных, предоставленного событием. Пример датчика предоставляет специальные данные о текущем местном времени в полях данных часов, минут и секунд.
STDMETHODIMP OnDataUpdated(
ISensor *pSensor,
ISensorDataReport *pNewData)
{
HRESULT hr = S_OK;
if(NULL == pNewData ||
NULL == pSensor)
{
return E_INVALIDARG;
}
ULONG ulHour = 0;
ULONG ulMinute = 0;
ULONG ulSecond = 0;
PROPVARIANT var = {};
hr = pNewData->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_HOUR, &var);
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulHour = var.ulVal;
}
}
PropVariantClear(&var);
if(SUCCEEDED(hr))
{
hr = pNewData->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_MINUTE, &var);
}
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulMinute = var.ulVal;
}
}
PropVariantClear(&var);
if(SUCCEEDED(hr))
{
hr = pNewData->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_SECOND, &var);
}
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulSecond = var.ulVal;
}
}
PropVariantClear(&var);
if(SUCCEEDED(hr))
{
// Print
wprintf_s(L"Current local time is: \n");
wprintf_s(L"%02d:%02d:%02d (asynchronous)\n", ulHour, ulMinute, ulSecond);
}
return hr;
}