Compartir a través de


Uso de sensores lógicos

Importante

En su lugar, usa la API de sensores de UWP.

La API de sensor basada en COM está en desuso y no debe usarse en nuevas aplicaciones. No se planean características ni mejoras adicionales y el soporte técnico será limitado.

Para crear instancias de un nodo de dispositivo para un sensor lógico o volver a conectarse a un nodo de dispositivo de sensor lógico existente, una aplicación o servicio debe llamar a ILogicalSensorManager::Connect. El parámetro pPropertyStore para este método requiere un puntero a una interfaz IPropertyStore que contiene los identificadores a los que se van a conectar los controladores del sensor. Esto significa que debe crear un almacén de propiedades y agregar estos datos al almacén antes de llamar a este método.

Conexión al sensor lógico

Para conectarse a un sensor lógico, debe proporcionar, como mínimo, un identificador de hardware, tal como se define en el archivo .inf del controlador del sensor y un GUID lógico que identifica el sensor. La plataforma usa este GUID para identificar el sensor al elegir desconectar o desinstalar el nodo del dispositivo del sensor.

El código de ejemplo siguiente crea un método auxiliar que se conecta a un sensor lógico especificado. Los parámetros del método reciben el identificador de hardware del sensor y un GUID único para identificar el sensor.

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;
}

Desconexión de un sensor lógico

Para desconectar de un sensor lógico, debe proporcionar el mismo identificador lógico que usó al llamar Connect.

El código de ejemplo siguiente crea una función auxiliar que se desconecta de un sensor lógico.

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;
}

Desinstalación de un sensor lógico

Para desinstalar un sensor lógico, debe proporcionar el mismo identificador lógico que usó cuando llamó a Connect.

El código de ejemplo siguiente crea una función auxiliar que desinstala un sensor lógico.

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;
}

Acerca de los sensores lógicos