Verwenden logischer Sensoren
Um einen Geräteknoten für einen logischen Sensor zu instanziieren oder eine Verbindung mit einem vorhandenen knoten logischen Sensorgerät herzustellen, muss eine Anwendung oder ein Dienst ILogicalSensorManager::Connect aufrufen. Der pPropertyStore-Parameter für diese Methode erfordert einen Zeiger auf eine IPropertyStore-Schnittstelle , die die IDs enthält, damit die Sensortreiber eine Verbindung herstellen können. Dies bedeutet, dass Sie einen Eigenschaftenspeicher erstellen und diese Daten dem Speicher hinzufügen müssen, bevor Sie diese Methode aufrufen.
Herstellen einer Verbindung mit dem logischen Sensor
Um eine Verbindung mit einem logischen Sensor herzustellen, müssen Sie mindestens eine Hardware-ID angeben, die in der INF-Datei des Sensortreibers definiert ist, und eine logische GUID , die den Sensor identifiziert. Die Plattform verwendet diese GUID , um den Sensor zu identifizieren, wenn Sie die Verbindung mit dem Sensorgerätknoten trennen oder deinstallieren möchten.
Der folgende Beispielcode erstellt eine Hilfsmethode, die eine Verbindung mit einem angegebenen logischen Sensor herstellt. Die Methodenparameter erhalten die Hardware-ID des Sensors und eine eindeutige GUID , um den Sensor zu identifizieren.
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;
}
Trennen von einem logischen Sensor
Um die Verbindung mit einem logischen Sensor zu trennen, müssen Sie dieselbe logische ID angeben, die Sie beim Aufrufen von Connect verwendet haben.
Der folgende Beispielcode erstellt eine Hilfsfunktion, die von einem logischen Sensor getrennt wird.
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;
}
Deinstallieren eines logischen Sensors
Um einen logischen Sensor zu deinstallieren, müssen Sie dieselbe logische ID angeben, die Sie beim Aufrufen von Connect verwendet haben.
Der folgende Beispielcode erstellt eine Hilfsfunktion, die einen logischen Sensor deinstalliert.
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;
}
Zugehörige Themen