次の方法で共有


センサーの取得

Important

代わりに UWP センサー API を 使用してください。

COM ベースの Sensor API は非推奨であり、新しいアプリケーションでは使用しないでください。 追加の機能や拡張機能は計画されておらず、サポートは制限されます。

センサー オブジェクトを取得するには、 ISensorManager インターフェイスを 使用します。 このインターフェイスは、Sensor 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 を生成し、同じ make と model の複数のセンサーを識別できるようにします。 これは、センサー ID を事前に把握していない可能性があることを意味します。 ただし、たとえば ISensor::GetID を呼び出して、以前に取得した特定のセンサー ID のコピーを保存している場合は、同じセンサーをもう一度取得できます。

次のコード例は、その ID を使用してセンサーを取得する方法を示しています。

ISensor* pSensor = NULL;

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

センサーマネージャーからイベントを受け取ることで、センサーが使用可能になったときにセンサーを取得することもできます。 詳細については、「 ISensorManager::SetEventSink」を参照してください。

ISensorManagerEvents::OnSensorEnter