Partager via


Guide de programmation de l’API capteur

Important

Utilisez plutôt l’API de capteur UWP .

L’API de capteur COM est déconseillée et ne doit pas être utilisée dans les nouvelles applications. Aucune fonctionnalité ou amélioration supplémentaire n’est planifiée et la prise en charge sera limitée.

Cette section fournit des informations, notamment des exemples de code, sur l’utilisation des fonctionnalités de l’API Sensor. Pour plus d’informations sur les différentes interfaces de programmation, consultez À propos de l’API Sensor.

L’exemple de code de cette section utilise les en-têtes supplémentaires supplémentaires inclus suivants.

#include <windows.h>
#include <initguid.h>
#include <propkeydef.h>


#include <iostream>
#include <propvarutil.h>
#include <functiondiscoverykeys.h>
#include <assert.h>

Vous devez également créer un lien vers ces fichiers de bibliothèque associés supplémentaires : Propsys.lib et PortableDeviceGuids.lib.

L’exemple de code de cette section utilise les constantes suivantes pour les catégories de capteurs, les types et les champs de données. Ces constantes sont des valeurs personnalisées définies par l’exemple de pilote TimeSensor dans le Kit de pilotes Windows. Notez que, bien que la plateforme Capteur active la définition et l’utilisation de types personnalisés tels que ceux-ci, vous devez utiliser des types définis par la plateforme dans la mesure du possible.

// Define an object ID.
// {0D77BEE3-7169-42bf-8379-28F9A9B59A57}
DEFINE_GUID(SAMPLE_SENSOR_TIME_ID, 
0xd77bee3, 0x7169, 0x42bf, 0x83, 0x79, 0x28, 0xf9, 0xa9, 0xb5, 0x9a, 0x57);

// Define a custom category.
// {062A5C3B-44C1-4ad1-8EFC-0F65B2E4AD48}
DEFINE_GUID(SAMPLE_SENSOR_CATEGORY_DATE_TIME, 
0x62a5c3b, 0x44c1, 0x4ad1, 0x8e, 0xfc, 0xf, 0x65, 0xb2, 0xe4, 0xad, 0x48);

// Define a custom type.
// {5F199A84-409F-4e35-B2DD-F9C79F5318A0}
DEFINE_GUID(SAMPLE_SENSOR_TYPE_TIME, 
0x5f199a84, 0x409f, 0x4e35, 0xb2, 0xdd, 0xf9, 0xc7, 0x9f, 0x53, 0x18, 0xa0);

// Time sensor fields.
// Because these are related, each field uses the same GUID, but changes the PID.
// {340946F2-9A77-42b0-8176-57D4DF00E5CA}
DEFINE_PROPERTYKEY(SAMPLE_SENSOR_DATA_TYPE_HOUR, 
0x340946f2, 0x9a77, 0x42b0, 0x81, 0x76, 0x57, 0xd4, 0xdf, 0x0, 0xe5, 0xca, PID_FIRST_USABLE); // PID = 2

DEFINE_PROPERTYKEY(SAMPLE_SENSOR_DATA_TYPE_MINUTE, 
0x340946f2, 0x9a77, 0x42b0, 0x81, 0x76, 0x57, 0xd4, 0xdf, 0x0, 0xe5, 0xca, PID_FIRST_USABLE + 1); // PID = 3

DEFINE_PROPERTYKEY(SAMPLE_SENSOR_DATA_TYPE_SECOND, 
0x340946f2, 0x9a77, 0x42b0, 0x81, 0x76, 0x57, 0xd4, 0xdf, 0x0, 0xe5, 0xca, PID_FIRST_USABLE + 2); // PID = 4

L’exemple de code de cette section utilise les variables suivantes.

HRESULT hr = S_OK;

// Sensor interface pointers
ISensorManager* pSensorManager = NULL;    
ISensorCollection* pSensorColl = NULL;
ISensor* pSensor = NULL; 
ISensorDataReport* pReport = NULL;

// Time sensor data field variables
ULONG ulHour, ulMinute, ulSecond = 0;

L’exemple de code de cette section utilise la fonction suivante pour libérer des pointeurs d’interface COM.

template <class T> void SafeRelease(T **ppT)
{
    if (*ppT)
    {
        (*ppT)->Release();
        *ppT = NULL;
    }
}

Dans cette section

À propos de l’API capteur