擷取感應器物件
若要擷取感應器物件,您可以使用 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。
相關主題