Compartilhar via


Usando sensores lógicos

Importante

Em vez disso, use a Sensor API UWP.

A API de Sensor baseada em COM foi preterida e não deve ser usada em novos aplicativos. Nenhum recurso ou aprimoramento adicional é planejado e o suporte será limitado.

Para instanciar um nó de dispositivo para um sensor lógico ou se reconectar a um nó de dispositivo de sensor lógico existente, um aplicativo ou serviço deve chamar ILogicalSensorManager::Connect. O parâmetro pPropertyStore para esse método requer um ponteiro para uma interface IPropertyStore que contém as IDs para que os drivers de sensor se conectem. Isso significa que você deve criar um repositório de propriedades e adicionar esses dados ao repositório antes de chamar esse método.

Conectando-se ao Sensor Lógico

Para se conectar a um sensor lógico, você deve fornecer, no mínimo, uma ID de hardware, conforme definido no arquivo .inf do driver do sensor e um GUID lógico que identifique o sensor. A plataforma utiliza este GUID para identificar o sensor quando você opta por desconectar ou desinstalar o nó do dispositivo sensor.

O código de exemplo a seguir cria um método auxiliar que se conecta a um sensor lógico especificado. Os parâmetros do método recebem a ID de hardware do sensor e um GUID exclusivo para identificar o 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;
}

Desconectando-se de um sensor lógico

Para se desconectar de um sensor lógico, você deve fornecer a mesma ID lógica usada quando chamou o Connect.

O código de exemplo a seguir cria uma função auxiliar que se desconecta de um 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;
}

Desinstalando um sensor lógico

Para desinstalar um sensor lógico, você deve fornecer a mesma ID lógica usada quando chamou o Connect.

O código de exemplo a seguir cria uma função auxiliar que desinstala um 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;
}

Sobre sensores lógicos