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.
Argomenti correlati