Condividi tramite


Recupero di un oggetto Sensore

Per recuperare un oggetto sensore, usare l'interfaccia ISensorManager . È possibile considerare questa interfaccia come l'interfaccia radice per l'API Sensor. Per usare ISensorManager, è innanzitutto necessario chiamare il metodo COM CoCreateInstance .

Il codice di esempio seguente crea un'istanza di Gestione sensori.

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

Dopo aver recuperato correttamente un puntatore a ISensorManager, è possibile recuperare sensori per categoria, tipo o ID. Se si recuperano sensori per tipo o categoria, si riceve un puntatore a un'interfaccia ISensorCollection che contiene tutti i sensori disponibili che appartengono alla categoria o al tipo richiesto. Se si recupera un sensore in base al relativo ID, si riceve un puntatore a un'interfaccia ISensor che rappresenta il sensore univoco richiesto.

Il codice di esempio seguente recupera una raccolta di sensori che appartengono alla categoria denominata SAMPLE_SENSOR_CATEGORY_DATE_TIME. Il codice recupera quindi il primo sensore nella raccolta in base al relativo indice.

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

Si noti che è possibile recuperare tutti i sensori disponibili usando SENSOR_CATEGORY_ALL.

In modo analogo, è possibile recuperare sensori di un particolare tipo.

Il codice di esempio seguente recupera una raccolta di sensori del tipo denominato SAMPLE_SENSOR_TYPE_TIME. Il codice recupera quindi il primo sensore nella raccolta in base al relativo indice.

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

Per recuperare un sensore in base al relativo ID, è necessario conoscere l'ID univoco per il sensore. I sensori generano in genere questo ID quando si è connessi per la prima volta per consentire di identificare più sensori dello stesso make e modello. Ciò significa che probabilmente non si conoscerà l'ID sensore in anticipo. Tuttavia, se è stata archiviata una copia di un ID sensore specifico recuperato in precedenza, ad esempio chiamando ISensor::GetID, è possibile recuperare di nuovo lo stesso sensore.

Il codice di esempio seguente mostra come recuperare un sensore usando il relativo ID.

ISensor* pSensor = NULL;

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

È anche possibile recuperare i sensori quando diventano disponibili ricevendo un evento dal gestore sensori. Per altre informazioni, vedere ISensorManager::SetEventSink.

ISensorManagerEvents::OnSensorEnter