Récupération d’un objet capteur
Pour récupérer un objet de capteur, vous utilisez l’interface ISensorManager . Vous pouvez considérer cette interface comme l’interface racine de l’API Sensor. Pour utiliser ISensorManager, vous devez d’abord appeler la méthode COM CoCreateInstance .
L’exemple de code suivant crée une instance du gestionnaire de capteurs.
// 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.
}
Après avoir récupéré un pointeur vers ISensorManager, vous pouvez récupérer des capteurs par catégorie, type ou ID. Si vous récupérez des capteurs par type ou catégorie, vous recevez un pointeur vers une interface ISensorCollection qui contient tous les capteurs disponibles qui appartiennent à la catégorie ou au type demandé. Si vous récupérez un capteur par son ID, vous recevez un pointeur vers une interface ISensor qui représente le capteur unique que vous avez demandé.
L’exemple de code suivant récupère une collection de capteurs qui appartiennent à la catégorie nommée SAMPLE_SENSOR_CATEGORY_DATE_TIME. Le code récupère ensuite le premier capteur de la collection par son index.
// 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);
}
Notez que vous pouvez récupérer tous les capteurs disponibles à l’aide de SENSOR_CATEGORY_ALL.
De la même manière, vous pouvez récupérer des capteurs d’un type particulier.
L’exemple de code suivant récupère une collection de capteurs du type nommé SAMPLE_SENSOR_TYPE_TIME. Le code récupère ensuite le premier capteur de la collection par son index.
// 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);
}
Pour récupérer un capteur par son ID, vous devez connaître l’ID unique du capteur. Les capteurs génèrent généralement cet ID lors de la première connexion pour vous permettre d’identifier plusieurs capteurs de la même fabrique et du même modèle. Cela signifie que vous ne connaissez probablement pas l’ID du capteur à l’avance. Toutefois, si vous avez stocké une copie d’un ID de capteur particulier que vous avez précédemment récupéré, par exemple en appelant ISensor::GetID, vous pouvez récupérer à nouveau le même capteur.
L’exemple de code suivant montre comment récupérer un capteur à l’aide de son ID.
ISensor* pSensor = NULL;
// Get the sensor collection.
hr = pSensorManager->GetSensorByID(SAMPLE_SENSOR_TIME_ID, &pSensor);
Vous pouvez également récupérer des capteurs lorsqu’ils deviennent disponibles en recevant un événement du gestionnaire de capteurs. Pour plus d’informations, consultez ISensorManager::SetEventSink.
Rubriques connexes