センサー オブジェクトの取得
センサー オブジェクトを取得するには、 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 を生成し、同じメイクとモデルの複数のセンサーを識別できるようにします。 つまり、センサー ID を事前に把握していない可能性があります。 ただし、たとえば ISensor::GetID を呼び出して、以前に取得した特定のセンサー ID のコピーを格納している場合は、同じセンサーをもう一度取得できます。
次のコード例は、その ID を使用してセンサーを取得する方法を示しています。
ISensor* pSensor = NULL;
// Get the sensor collection.
hr = pSensorManager->GetSensorByID(SAMPLE_SENSOR_TIME_ID, &pSensor);
センサーマネージャーからイベントを受信して、使用可能になったときにセンサーを取得することもできます。 詳細については、「 ISensorManager::SetEventSink」を参照してください。
関連トピック