使用逻辑传感器

重要

请改用 UWP 传感器 API

基于 COM 的传感器 API 已弃用,不应在新应用程序中使用。 没有计划其他功能或增强功能,并且支持将受到限制。

若要实例化逻辑传感器的设备节点或重新连接到现有逻辑传感器设备节点,应用程序或服务必须调用 ILogicalSensorManager::Connect。 此方法的 pPropertyStore 参数需要指向 IPropertyStore 接口的指针,该接口包含传感器驱动程序连接到的 ID。 这意味着在调用此方法之前,必须创建属性存储并将此数据添加到存储中。

连接到逻辑传感器

若要连接到逻辑传感器,必须至少提供传感器驱动程序的 .inf 文件中定义的硬件 ID,以及标识传感器的逻辑 GUID 。 当选择断开传感器设备节点或卸载传感器设备节点时,平台使用此 GUID 来标识传感器。

以下示例代码创建连接到指定逻辑传感器的帮助程序方法。 方法参数接收传感器硬件 ID 和唯一 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 时使用的相同逻辑 ID。

以下示例代码创建一个帮助程序函数,该函数与逻辑传感器断开连接。

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 时使用的相同逻辑 ID。

以下示例代码创建一个用于卸载逻辑传感器的帮助程序函数。

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

关于逻辑传感器