Получение объекта датчика
Чтобы получить объект датчика, используйте интерфейс ISensorManager . Этот интерфейс можно рассматривать как корневой интерфейс ДЛЯ API датчика. Чтобы использовать ISensorManager, необходимо сначала вызвать метод COM CoCreateInstance .
В следующем примере кода создается экземпляр диспетчера датчиков.
// Create the sensor manager.
hr = CoCreateInstance(CLSID_SensorManager,
NULL, CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pSensorManager));
if(hr == HRESULT_FROM_WIN32(ERROR_ACCESS_DISABLED_BY_POLICY))
{
// Unable to retrieve sensor manager due to
// group policy settings. Alert the user.
}
После успешного получения указателя на ISensorManager можно получить датчики по категории, типу или идентификатору. При извлечении датчиков по типу или категории отображается указатель на интерфейс ISensorCollection , содержащий все доступные датчики, относящиеся к запрошенной категории или типу. Если вы извлекаете датчик по его идентификатору, вы получите указатель на интерфейс ISensor , представляющий уникальный запрошенный датчик.
В следующем примере кода извлекается коллекция датчиков, относящихся к категории с именем SAMPLE_SENSOR_CATEGORY_DATE_TIME. Затем код извлекает первый датчик в коллекции по индексу.
// Get the sensor collection.
hr = pSensorManager->GetSensorsByCategory(SAMPLE_SENSOR_CATEGORY_DATE_TIME, &pSensorColl);
if(SUCCEEDED(hr))
{
ULONG ulCount = 0;
// Verify that the collection contains
// at least one sensor.
hr = pSensorColl->GetCount(&ulCount);
if(SUCCEEDED(hr))
{
if(ulCount < 1)
{
wprintf_s(L"\nNo sensors of the requested category.\n");
hr = E_UNEXPECTED;
}
}
}
if(SUCCEEDED(hr))
{
// Get the first available sensor.
hr = pSensorColl->GetAt(0, &pSensor);
}
Обратите внимание, что все доступные датчики можно получить с помощью SENSOR_CATEGORY_ALL.
Аналогичным образом можно получить датчики определенного типа.
В следующем примере кода извлекается коллекция датчиков типа с именем SAMPLE_SENSOR_TYPE_TIME. Затем код извлекает первый датчик в коллекции по индексу.
// Get the sensor collection.
hr = pSensorManager->GetSensorsByType(SAMPLE_SENSOR_TYPE_TIME, &pSensorColl);
if(SUCCEEDED(hr))
{
ULONG ulCount = 0;
// Verify that the collection contains
// at least one sensor.
hr = pSensorColl->GetCount(&ulCount);
if(SUCCEEDED(hr))
{
if(ulCount < 1)
{
wprintf_s(L"\nNo sensors of the requested type.\n");
hr = E_UNEXPECTED;
}
}
}
if(SUCCEEDED(hr))
{
// Get the first available sensor.
hr = pSensorColl->GetAt(0, &pSensor);
}
Чтобы получить датчик по его идентификатору, необходимо знать уникальный идентификатор датчика. Датчики обычно создают этот идентификатор при первом подключении, чтобы вы могли идентифицировать несколько датчиков одного и того же вида и модели. Это означает, что вы, вероятно, не будете знать идентификатор датчика заранее. Однако если вы сохранили копию определенного идентификатора датчика, полученного ранее, например путем вызова ISensor::GetID, может потребоваться получить тот же датчик снова.
В следующем примере кода показано, как получить датчик по его идентификатору.
ISensor* pSensor = NULL;
// Get the sensor collection.
hr = pSensorManager->GetSensorByID(SAMPLE_SENSOR_TIME_ID, &pSensor);
Вы также можете получить датчики, когда они становятся доступными, получив событие от диспетчера датчиков. Дополнительные сведения см. в разделе ISensorManager::SetEventSink.
Связанные темы