Freigeben über


Abrufen eines Sensorobjekts

Um ein Sensorobjekt abzurufen, verwenden Sie die ISensorManager-Schnittstelle . Sie können sich diese Schnittstelle als Stammschnittstelle für die Sensor-API vorstellen. Um ISensorManager zu verwenden, müssen Sie zuerst die COM CoCreateInstance-Methode aufrufen.

Der folgende Beispielcode erstellt eine instance des Sensor-Managers.

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

Nach dem erfolgreichen Abrufen eines Zeigers auf ISensorManager können Sie Sensoren nach Kategorie, Typ oder ID abrufen. Wenn Sie Sensoren nach Typ oder Kategorie abrufen, erhalten Sie einen Zeiger auf eine ISensorCollection-Schnittstelle , die alle verfügbaren Sensoren enthält, die zur angeforderten Kategorie oder zum angeforderten Typ gehören. Wenn Sie einen Sensor anhand seiner ID abrufen, erhalten Sie einen Zeiger auf eine ISensor-Schnittstelle , die den von Ihnen angeforderten eindeutigen Sensor darstellt.

Der folgende Beispielcode ruft eine Sammlung von Sensoren ab, die zur Kategorie mit dem Namen SAMPLE_SENSOR_CATEGORY_DATE_TIME gehören. Der Code ruft dann den ersten Sensor in der Auflistung anhand seines Indexes ab.

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

Beachten Sie, dass Sie alle verfügbaren Sensoren mithilfe von SENSOR_CATEGORY_ALL abrufen können.

Auf ähnliche Weise können Sie Sensoren eines bestimmten Typs abrufen.

Der folgende Beispielcode ruft eine Sammlung von Sensoren des Typs SAMPLE_SENSOR_TYPE_TIME ab. Der Code ruft dann den ersten Sensor in der Auflistung anhand seines Indexes ab.

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

Um einen Sensor anhand seiner ID abzurufen, müssen Sie die eindeutige ID für den Sensor kennen. Sensoren generieren diese ID normalerweise, wenn sie zum ersten Mal verbunden sind, damit Sie mehrere Sensoren desselben Unternehmens und Modells identifizieren können. Dies bedeutet, dass Sie die Sensor-ID wahrscheinlich nicht im Voraus kennen. Wenn Sie jedoch eine Kopie einer bestimmten Sensor-ID gespeichert haben, die Sie zuvor abgerufen haben, z. B. durch Aufrufen von ISensor::GetID, können Sie denselben Sensor erneut abrufen.

Der folgende Beispielcode zeigt, wie Sie einen Sensor mithilfe seiner ID abrufen.

ISensor* pSensor = NULL;

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

Sie können Sensoren auch abrufen, wenn sie verfügbar werden, indem Sie ein Ereignis vom Sensor-Manager empfangen. Weitere Informationen finden Sie unter ISensorManager::SetEventSink.

ISensorManagerEvents::OnSensorEnter