Compartir a través de


Recuperación de un objeto sensor

Para recuperar un objeto sensor, use la interfaz ISensorManager . Puede considerar esta interfaz como la interfaz raíz de sensor API. Para usar ISensorManager, primero debe llamar al método COM CoCreateInstance .

En el código de ejemplo siguiente se crea una instancia del administrador de sensores.

// 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.
}

Después de recuperar correctamente un puntero a ISensorManager, puede recuperar sensores por categoría, tipo o identificador. Si recupera sensores por tipo o categoría, recibirá un puntero a una interfaz ISensorCollection que contiene todos los sensores disponibles que pertenecen a la categoría o tipo solicitados. Si recupera un sensor por su identificador, recibirá un puntero a una interfaz ISensor que representa el sensor único que solicitó.

El código de ejemplo siguiente recupera una colección de sensores que pertenecen a la categoría denominada SAMPLE_SENSOR_CATEGORY_DATE_TIME. A continuación, el código recupera el primer sensor de la colección por su índice.

// 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);
}

Tenga en cuenta que puede recuperar todos los sensores disponibles mediante SENSOR_CATEGORY_ALL.

De forma similar, puede recuperar sensores de un tipo determinado.

El código de ejemplo siguiente recupera una colección de sensores del tipo denominado SAMPLE_SENSOR_TYPE_TIME. A continuación, el código recupera el primer sensor de la colección por su índice.

// 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);
}

Para recuperar un sensor por su identificador, debe conocer el identificador único del sensor. Normalmente, los sensores generan este identificador cuando se conecta por primera vez para permitirle identificar varios sensores de la misma marca y modelo. Esto significa que probablemente no conocerá el identificador del sensor de antemano. Sin embargo, si ha almacenado una copia de un identificador de sensor determinado que recuperó anteriormente, por ejemplo llamando a ISensor::GetID, puede que desee recuperar el mismo sensor de nuevo.

En el código de ejemplo siguiente se muestra cómo recuperar un sensor mediante su identificador.

ISensor* pSensor = NULL;

// Get the sensor collection.
hr = pSensorManager->GetSensorByID(SAMPLE_SENSOR_TIME_ID, &pSensor);

También puede recuperar sensores cuando estén disponibles mediante la recepción de un evento del administrador de sensores. Para obtener más información, vea ISensorManager::SetEventSink.

ISensorManagerEvents::OnSensorEnter