若要具現化邏輯感應器的裝置節點,或重新連線到現有的邏輯感應器裝置節點,應用程式或服務必須呼叫 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 時使用的相同邏輯 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 時使用的相同邏輯識別碼。
下列範例程式碼會建立一個輔助函式,用來解除安裝邏輯感應器。
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;
}