Überprüfen von unterstützten Sensordatenfeldern

In diesem Thema wird beschrieben, wie Sie überprüfen, ob ein Sensor einen bestimmte Satz Datenfelder bereitstellen kann.

Nachdem Sie ein Sensorobjekt abgerufen haben, können Sie ISensor::GetSupportedDataFields aufrufen, um zu bestimmen, ob der Sensor die Daten bereitstellen kann, die Sie benötigen.

Im folgenden Beispielcode wird eine Hilfsfunktion erstellt, die testet, ob der Sensor alle drei von den Beispieldatenfeldern zur Verfügung stellen kann. Die Funktion nimmt einen Zeiger auf einen Sensor als Eingabe und gibt einen booleschen Wert zurück, wobei TRUE angibt, dass der Sensor alle erforderlichen Datenfelder bereitstellen kann.


BOOL CheckForSupportedDataFields(ISensor* pSensor)
{
    assert(pSensor);

    HRESULT hr = S_OK;
    DWORD cKeys = 0; // Key count.
    BOOL bRet = FALSE;

    IPortableDeviceKeyCollection* pKeys = NULL; // Output

    // CoCreate a key collection to store property keys.
    hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection, 
                                NULL, 
                                CLSCTX_INPROC_SERVER, 
                                IID_PPV_ARGS(&pKeys));

    if(SUCCEEDED(hr))
    {
        hr = pSensor->GetSupportedDataFields(&pKeys);
    }

    if(SUCCEEDED(hr))
    {
        hr = pKeys->GetCount(&cKeys);
    }

    if(SUCCEEDED(hr))
    {
        PROPERTYKEY pk;
        BOOL bHour, bMinute, bSecond = FALSE;

        for (DWORD i = 0; i < cKeys; i++)
        {
            hr = pKeys->GetAt(i, &pk);

            if(SUCCEEDED(hr))
            {
                // Test for the data fields.
                if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_HOUR))
                {
                    bHour = TRUE;
                }
                else if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_MINUTE))
                {
                    bMinute = TRUE;
                }
                else if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_SECOND))
                {
                    bSecond = TRUE;
                }
            }
        }

        // Compute the return value.
        // If all three properties were found,
        // bRet will resolve to TRUE.
        bRet = bHour && bMinute && bSecond;
    }

    SafeRelease(&pKeys);

    return bRet;
}


Verwandte Themen

ISensorDataReport

 

 

Anzeigen:
© 2015 Microsoft