다음을 통해 공유


논리 센서 사용

논리 센서에 대한 디바이스 노드를 인스턴스화하거나 기존 논리 센서 디바이스 노드에 다시 연결하려면 애플리케이션 또는 서비스가 ILogicalSensorManager::Connect를 호출해야 합니다. 이 메서드의 pPropertyStore 매개 변수에는 연결할 센서 드라이버의 ID가 포함된 IPropertyStore 인터페이스에 대한 포인터가 필요합니다. 즉, 이 메서드를 호출하기 전에 속성 저장소를 만들고 이 데이터를 저장소에 추가해야 합니다.

논리 센서에 연결

논리 센서에 연결하려면 최소한 센서 드라이버의 .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;
}

논리 센서 정보