다음을 통해 공유


센서 개체 검색

센서 개체를 검색하려면 ISensorManager 인터페이스를 사용합니다. 이 인터페이스는 센서 API의 루트 인터페이스라고 생각할 수 있습니다. ISensorManager를 사용하려면 먼저 COM CoCreateInstance 메서드를 호출해야 합니다.

다음 예제 코드는 센서 관리자의 instance 만듭니다.

// 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를 미리 알 수 없습니다. 그러나 ISensor::GetID를 호출하는 등 이전에 검색한 특정 센서 ID의 복사본을 저장한 경우 동일한 센서를 다시 검색할 수 있습니다.

다음 예제 코드는 ID를 사용하여 센서를 검색하는 방법을 보여 줍니다.

ISensor* pSensor = NULL;

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

센서 관리자로부터 이벤트를 수신하여 센서를 사용할 수 있게 되면 센서를 검색할 수도 있습니다. 자세한 내용은 ISensorManager::SetEventSink를 참조하세요.

ISensorManagerEvents::OnSensorEnter