检索传感器对象

若要检索传感器对象,请使用 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 的指针后,您可以按类别、类型或 ID 检索传感器。如果按类型或类别检索传感器,则接收指向 ISensorCollection 接口的指针,该接口包含属于所请求类别或类型的所有可用传感器。如果按传感器 ID 检索传感器,则接收指向 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);
}

若要按传感器 ID 检索传感器,您必须知道相应传感器的唯一 ID。传感器通常在第一次连接时生成此 ID,以便使您能够标识同一品牌和型号的多个传感器。这意味着您将可能不会提前知道传感器 ID。不过,如果您存储了以前检索的特定传感器 ID 的副本(例如,通过调用 ISensor::GetID 进行检索),您可能希望再次检索同一传感器。

下面的示例代码演示如何使用传感器 ID 来检索传感器。

ISensor* pSensor = NULL;

// Get the sensor collection.
hr = pSensorManager->GetSensorByID(SAMPLE_SENSOR_TIME_ID, &pSensor);


您也可以通过从传感器管理器接收事件,从而在传感器变为可用时检索相应传感器。有关更多信息,请参见 ISensorManager::SetEventSink

另请参见

ISensorManagerEvents::OnSensorEnter

 

 

社区附加资源

添加
显示:
© 2015 Microsoft