次の方法で共有


論理センサーの使用

論理センサーのデバイス ノードをインスタンス化したり、既存の論理センサー デバイス ノードに再接続したりするには、アプリケーションまたはサービスで ILogicalSensorManager::Connect を呼び出す必要があります。 このメソッドの pPropertyStore パラメーターには、接続するセンサー ドライバーの ID を含む IPropertyStore インターフェイスへのポインターが必要です。 つまり、このメソッドを呼び出す前に、プロパティ ストアを作成し、このデータをストアに追加する必要があります。

論理センサーへの接続

論理センサーに接続するには、少なくとも、センサー ドライバーの .inf ファイルで定義されているハードウェア ID と、センサーを識別する論理 GUID を 指定する必要があります。 この 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;
}

論理センサーについて