共用方式為


擷取感應器物件

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

ISensorManagerEvents::OnSensorEnter