Поделиться через


Использование логических датчиков

Чтобы создать экземпляр узла устройства для логического датчика или повторно подключиться к существующему узлу устройства логического датчика, приложение или служба должны вызвать ILogicalSensorManager::Connect. Параметру pPropertyStore для этого метода требуется указатель на интерфейс IPropertyStore, содержащий идентификаторы для подключения драйверов датчиков. Это означает, что перед вызовом этого метода необходимо создать хранилище свойств и добавить эти данные в хранилище.

Подключение к логическому датчику

Чтобы подключиться к логическому датчику, необходимо указать как минимум идентификатор оборудования, как определено в INF-файле драйвера датчика, и логический GUID , который идентифицирует датчик. Платформа использует этот GUID для идентификации датчика при отключении или удалении узла устройства датчика.

В следующем примере кода создается вспомогательный метод, который подключается к указанному логическому датчику. Параметры метода получают идентификатор оборудования датчика и уникальный GUID для идентификации датчика.

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

Отключение от логического датчика

Чтобы отключиться от логического датчика, необходимо указать тот же логический идентификатор, который использовался при вызове метода Connect.

В следующем примере кода создается вспомогающая функция, которая отключается от логического датчика.

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

Удаление логического датчика

Чтобы удалить логический датчик, необходимо указать тот же логический идентификатор, который использовался при вызове метода Connect.

В следующем примере кода создается вспомогающая функция, которая удаляет логический датчик.

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

Сведения о логических датчиках