Freigeben über


Verwenden logischer Sensoren

Von Bedeutung

Verwenden Sie stattdessen die UWP-Sensor-API .

Die COM-basierte Sensor-API ist veraltet und sollte nicht in neuen Anwendungen verwendet werden. Es sind keine zusätzlichen Features oder Verbesserungen geplant, und der Support wird eingeschränkt.

Um einen Geräteknoten für einen logischen Sensor zu instanziieren oder eine erneute Verbindung mit einem vorhandenen logischen Sensorgeräteknoten 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 für die Sensortreiber enthält, mit der eine Verbindung hergestellt werden kann. 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, wie in der INF-Datei des Sensortreibers definiert, 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.

Im folgenden Beispielcode wird eine Hilfsmethode erstellt, die eine Verbindung mit einem angegebenen logischen Sensor herstellt. Die Methodenparameter empfangen die Sensorhardware-ID 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.

Im folgenden Beispielcode wird eine Hilfsfunktion erstellt, 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;
}

Informationen zu logischen Sensoren