Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konuda, algılayıcı özellikleri için değerlerin nasıl alınıp ayarlanacağı açıklanmaktadır. ISensor arabirimi, algılayıcı özellikleri için değerleri ayarlama ve alma yöntemlerini sağlar.
Sensör Özellikleri Getiriliyor
Kullanıcı etkinleştirmeden önce algılayıcıdan bazı özellik değerlerini alabilirsiniz. Üreticinin adı veya algılayıcı modeli gibi bilgiler, programınızın algılayıcıyı kullanıp kullanamayacağına karar vermenize yardımcı olabilir.
Tek bir özellik değeri almayı veya özellik değerleri koleksiyonunu birlikte almayı seçebilirsiniz. Tek bir değer almak için ISensor::GetPropertyçağrısında bulunur. Bir değer koleksiyonunu almak için ISensor::GetPropertiesöğesini çağırın. ISensor::GetPropertiesiçin ilk parametreden NULL geçirerek bir algılayıcının tüm özelliklerini alabilirsiniz.
Aşağıdaki örnek kod, tek bir özelliğin değerini yazdıran bir yardımcı işlev oluşturur. işlev, değeri almak için kullanılacak algılayıcıya yönelik bir işaretçi ve çıkarılacak özelliği içeren bir özellik anahtarı alır. İşlev, sayılar, dizeler ve GUID'leri yazdırabilir ancak diğer, daha karmaşık türleri yazdıramaz.
HRESULT PrintSensorProperty(ISensor* pSensor, REFPROPERTYKEY pk)
{
assert(pSensor);
HRESULT hr = S_OK;
PROPVARIANT pv = {};
hr = pSensor->GetProperty(pk, &pv);
if(SUCCEEDED(hr))
{
if(pv.vt == VT_UI4) // Number
{
wprintf_s(L"\nSensor integer value: %u\n", pv.ulVal);
}
else if(pv.vt == VT_LPWSTR) // String
{
wprintf_s(L"\nSensor string value: %s\n", pv.pwszVal);
}
else if(pv.vt == VT_CLSID) // GUID
{
int iRet = 0;
// Convert the GUID to a string.
OLECHAR wszGuid[39] = {}; // Buffer for string.
iRet = ::StringFromGUID2(*(pv.puuid), wszGuid, 39);
assert(39 == iRet); // Count of characters returned for GUID.
wprintf_s(L"\nSensor GUID value: %s\n", wszGuid);
}
else // Interface or vector
{
wprintf_s(L"\nSensor property is a compound type. Unable to print value.");
}
}
PropVariantClear(&pv);
return hr;
}
Aşağıdaki örnek kod, bir özellik koleksiyonunu alan ve yazdıran bir işlev oluşturur. Yazdırılacak özellik kümesi SensorProperties adlı dizi tarafından tanımlanır.
HRESULT PrintSensorProperties(ISensor* pSensor)
{
assert(pSensor);
HRESULT hr = S_OK;
DWORD cVals = 0; // Count of returned properties.
IPortableDeviceKeyCollection* pKeys = NULL; // Input
IPortableDeviceValues* pValues = NULL; // Output
// Properties to print.
const PROPERTYKEY SensorProperties[] =
{
SENSOR_PROPERTY_MANUFACTURER,
SENSOR_PROPERTY_SERIAL_NUMBER,
SENSOR_PROPERTY_DESCRIPTION,
SENSOR_PROPERTY_FRIENDLY_NAME
};
// CoCreate a key collection to store property keys.
hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pKeys));
if(SUCCEEDED(hr))
{
// Add the properties to the key collection.
for (DWORD dwIndex = 0; dwIndex < ARRAYSIZE(SensorProperties); dwIndex++)
{
hr = pKeys->Add(SensorProperties[dwIndex]);
if(FAILED(hr))
{
// Unexpected.
// This example returns the failed HRESULT.
// You may choose to ignore failures, here.
break;
}
}
}
if(SUCCEEDED(hr))
{
// Retrieve the properties from the sensor.
hr = pSensor->GetProperties(pKeys, &pValues);
}
if(SUCCEEDED(hr))
{
// Get the number of values returned.
hr = pValues->GetCount(&cVals);
}
if(SUCCEEDED(hr))
{
PROPERTYKEY pk; // Keys
PROPVARIANT pv = {}; // Values
// Loop through the values;
for (DWORD i = 0; i < cVals; i++)
{
// Get the value at the current index.
hr = pValues->GetAt(i, &pk, &pv);
if(SUCCEEDED(hr))
{
// Find and print the property.
if(IsEqualPropertyKey(pk, SENSOR_PROPERTY_MANUFACTURER))
{
wprintf_s(L"\nManufacturer: %s\n", pv.pwszVal);
}
else if(IsEqualPropertyKey(pk, SENSOR_PROPERTY_SERIAL_NUMBER))
{
wprintf_s(L"Serial number: %s\n", pv.pwszVal);
}
else if(IsEqualPropertyKey(pk, SENSOR_PROPERTY_FRIENDLY_NAME))
{
wprintf_s(L"Friendly name: %s\n", pv.pwszVal);
}
else if(IsEqualPropertyKey(pk, SENSOR_PROPERTY_DESCRIPTION))
{
wprintf_s(L"Description: %s\n", pv.pwszVal);
}
}
PropVariantClear(&pv);
} // end i loop
}
SafeRelease(&pKeys);
SafeRelease(&pValues);
return hr;
};
Algılayıcı Özelliklerini Ayarlama
Algılayıcının özellik değerlerini ayarlayabilmeniz için önce kullanıcının algılayıcıyı etkinleştirmesi gerekir. Ayrıca, tüm algılayıcı özellikleri ayarlanamaz.
Özellikler için bir veya daha fazla değer ayarlamak için ISensor::SetPropertiesçağrısı yapın. Bu yönteme, ayarlanacak özelliklerin koleksiyonunu ve bunlara bağlı değerleri içeren bir IPortableDeviceValues işaretçisi sağlarsınız. yöntemi, ayarlanamayan özellikler için hata kodları içerebilen IPortableDeviceValues arabirimine karşılık gelen bir döndürür.
Aşağıdaki örnek kod, SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL özelliği için yeni bir değer ayarlayan bir yardımcı işlev oluşturur. İşlev, özelliği ayarlanacak olan algılayıcıya işaretçi ve ayarlanacak yeni rapor aralığını gösteren bir ULONG değeri alır. (Bu özellik için bir değer ayarlanması, algılayıcının belirtilen değeri kabul edeceği garanti etmez. Bu özelliğin nasıl çalıştığı hakkında bilgi için bkz. Algılayıcı Özellikleri.)
HRESULT SetCurrentReportInterval(ISensor* pSensor, ULONG ulNewInterval)
{
assert(pSensor);
HRESULT hr = S_OK;
IPortableDeviceValues* pPropsToSet = NULL; // Input
IPortableDeviceValues* pPropsReturn = NULL; // Output
// Create the input object.
hr = CoCreateInstance(__uuidof(PortableDeviceValues),
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pPropsToSet));
if(SUCCEEDED(hr))
{
// Add the current report interval property.
hr = pPropsToSet->SetUnsignedIntegerValue(SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL, ulNewInterval);
}
if(SUCCEEDED(hr))
{
// Only setting a single property, here.
hr = pSensor->SetProperties(pPropsToSet, &pPropsReturn);
}
// Test for failure.
if(hr == S_FALSE)
{
HRESULT hrError = S_OK;
// Check results for failure.
hr = pPropsReturn->GetErrorValue(SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL, &hrError);
if(SUCCEEDED(hr))
{
// Print an error message.
wprintf_s(L"\nSetting current report interval failed with error 0x%X\n", hrError);
// Return the error code.
hr = hrError;
}
}
else if(hr == E_ACCESSDENIED)
{
// No permission. Take appropriate action.
}
SafeRelease(&pPropsToSet);
SafeRelease(&pPropsReturn);
return hr;
}
İlgili konular