共用方式為


擷取感測器物件

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