若要擷取感測器物件,您可以使用 ISensorManager 介面。 您可以將此介面視為感測器 API 的根介面。 若要使用 ISensorManager,您必須先呼叫 COM CoCreateInstance 方法。
下列範例程式代碼會建立感測器管理員的實例。
// 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.
}
成功擷取 ISensorManager指標之後,您可以依類別、類型或標識符來擷取感測器。 如果您依類型或類別擷取感測器,您會收到 ISensorCollection 介面的指標,其中包含屬於所要求類別或類型的所有可用感測器。 如果您透過標識符取用感測器,您會收到一個 ISensor 介面的指標,此介面代表您所請求的唯一感測器。
下列範例程式代碼會擷取屬於名為 SAMPLE_SENSOR_CATEGORY_DATE_TIME 類別的感測器集合。 然後,程式代碼會依其索引擷取集合中的第一個感測器。
// 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);
}
請注意,您可以使用 SENSOR_CATEGORY_ALL來擷取所有可用的感測器。
同樣地,您可以擷取特定類型的感測器。
下列範例程式代碼會擷取名為 SAMPLE_SENSOR_TYPE_TIME 類型的感測器集合。 然後,程式代碼會依其索引擷取集合中的第一個感測器。
// 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);
}
若要依其標識碼擷取感測器,您必須知道感測器的唯一標識符。 感測器通常會在第一次連線時產生此標識符,讓您識別相同製造和型號的多個感測器。 這表示您可能事先不知道感測器標識碼。 不過,如果您已儲存您先前擷取的特定感測器標識碼複本,例如呼叫 ISensor::GetID,您可能想要再次擷取相同的感測器。
下列範例程式代碼示範如何使用其標識符來擷取感測器。
ISensor* pSensor = NULL;
// Get the sensor collection.
hr = pSensorManager->GetSensorByID(SAMPLE_SENSOR_TIME_ID, &pSensor);
您也可以透過從感測器管理員接收事件來取得可用的感測器。 如需詳細資訊,請參閱 ISensorManager::SetEventSink。
相關主題