次の方法で共有


論理センサーの使用

論理センサーのデバイス ノードをインスタンス化したり、既存の論理センサー デバイス ノードに再接続したりするには、アプリケーションまたはサービスが 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;
}

論理センサーについて