Abrufen eines Sensorobjekts
Zum Abrufen eines Sensorobjekts verwenden Sie die ISensorManager-Schnittstelle. Sie können sich diese Schnittstelle als Die Stammschnittstelle für die Sensor-API einfühlen. Um ISensorManager zu verwenden, müssen Sie zuerst die COM CoCreateInstance-Methode aufrufen.
Der folgende Beispielcode erstellt eine Instanz 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 ISensorManagerkö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 über seine ID abrufen, erhalten Sie einen Zeiger auf eine ISensor-Schnittstelle, die den eindeutigen Sensor darstellt, den Sie angefordert haben.
Der folgende Beispielcode ruft eine Sammlung von Sensoren ab, die zur Kategorie SAMPLE _ SENSOR CATEGORY DATE TIME _ _ _ gehören. Der Code ruft dann den ersten Sensor in der Auflistung nach seinem Index 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 mit 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 nach seinem Index 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 nach seiner ID abzurufen, müssen Sie die eindeutige ID für den Sensor kennen. Sensoren generieren diese ID in der Regel, wenn sie zum ersten Mal verbunden sind, damit Sie mehrere Sensoren desselben 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 ein Sensor mithilfe seiner ID abgerufen wird.
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.