Utilisation de capteurs logiques
Pour instancier un nœud d’appareil pour un capteur logique, ou pour se reconnecter à un nœud de périphérique de capteur logique existant, une application ou un service doit appeler ILogicalSensorManager :: connecter. Le paramètre pPropertyStore de cette méthode nécessite un pointeur vers une interface IPropertyStore qui contient les ID des pilotes de capteur auxquels se connecter. Cela signifie que vous devez créer une banque de propriétés et ajouter ces données au magasin avant d’appeler cette méthode.
Connexion au capteur logique
Pour vous connecter à un capteur logique, vous devez spécifier, au minimum, un ID matériel, tel qu’il est défini dans le fichier. inf du pilote de capteur et un GUID logique qui identifie le capteur. La plateforme utilise ce GUID pour identifier le capteur lorsque vous choisissez de vous déconnecter d’un nœud de périphérique capteur ou de le désinstaller.
L’exemple de code suivant crée une méthode d’assistance qui se connecte à un capteur logique spécifié. Les paramètres de méthode reçoivent l’ID de matériel de capteur et un GUID unique pour identifier le capteur.
HRESULT ConnectToLogicalSensor(PCWSTR* wszHardwareID, GUID guidLogicalID)
{
HRESULT hr = S_OK;
ILogicalSensorManager* pLSM = NULL;
IPropertyStore* pStore = NULL;
PROPVARIANT pv = {};
// Create the property store.
hr = PSCreateMemoryPropertyStore(IID_PPV_ARGS(&pStore));
if(SUCCEEDED(hr))
{
// Create the logical sensor manager.
hr = CoCreateInstance(CLSID_LogicalSensorManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pLSM));
}
// Fill in the values.
if(SUCCEEDED(hr))
{
hr = InitPropVariantFromStringVector(wszHardwareID, 1, &pv);
}
if(SUCCEEDED(hr))
{
hr = pStore->SetValue(PKEY_Device_HardwareIds, pv);
}
if(SUCCEEDED(hr))
{
hr = pStore->SetValue(PKEY_Device_CompatibleIds, pv);
}
if(SUCCEEDED(hr))
{
// Connect to the logical sensor.
hr = pLSM->Connect(guidLogicalID, pStore);
}
SafeRelease(&pStore);
SafeRelease(&pLSM);
return hr;
}
Déconnexion d’un capteur logique
Pour vous déconnecter d’un capteur logique, vous devez fournir le même ID logique que celui que vous avez utilisé lors de l’appel de connecter.
L’exemple de code suivant crée une fonction d’assistance qui se déconnecte d’un capteur logique.
HRESULT DisconnectFromLogicalSensor(GUID guidLogicalID)
{
HRESULT hr = S_OK;
ILogicalSensorManager* pLSM = NULL;
if(SUCCEEDED(hr))
{
// Create the logical sensor manager.
hr = CoCreateInstance(CLSID_LogicalSensorManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pLSM));
}
if(SUCCEEDED(hr))
{
hr = pLSM->Disconnect(guidLogicalID);
}
SafeRelease(&pLSM);
return hr;
}
Désinstallation d’un capteur logique
Pour désinstaller un capteur logique, vous devez fournir le même ID logique que celui que vous avez utilisé lors de l’appel de connecter.
L’exemple de code suivant crée une fonction d’assistance qui désinstalle un capteur logique.
HRESULT UninstallLogicalSensor(REFGUID guidLogicalID)
{
HRESULT hr = S_OK;
ILogicalSensorManager* pLSM;
// Create the logical sensor manager.
hr = CoCreateInstance(CLSID_LogicalSensorManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pLSM));
if(SUCCEEDED(hr))
{
hr = pLSM->Uninstall(guidLogicalID);
}
SafeRelease(&pLSM);
return hr;
}