Использование логических датчиков
Чтобы создать экземпляр узла устройства для логического датчика или повторно подключиться к существующему узлу устройства логического датчика, приложение или служба должны вызвать 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.
В следующем примере кода создается вспомогающая функция, которая отключается от логического датчика.
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;
}
Связанные темы