Ana sorun: Karşılaştırma seçili metnin söz konusu metnini, buradaki Mevcut site (IE'de görüntülenir).UIA, metin seçimi ve Internet Explorer'da belge seçimi arasında çalışma noktası karşılaştırması alamıyor
//Initialize range variables
IUIAutomationTextRange* documentRange = NULL;
IUIAutomationTextRange* selectionRange = NULL;
IUIAutomationTextRangeArray* selectionRangeArray = NULL;
//Get entire text document range
m_pTextPattern->get_DocumentRange(&documentRange);
//Get selection range
m_pTextPattern->GetSelection(&selectionRangeArray);
selectionRangeArray->GetElement(0, &selectionRange);
Aralıklar geçerli ve seçili metin belge aralığının içinde. Biz hamle sayısını elde çalıştığınızda/karakterler seçilen metin belgesi/site baştan baştan, sonra biz sadece 1.
selectionRange->CompareEndpoints(
TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
documentRange,
TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
&rv);
Ör dönüş değeri olsun. site: http://www.cplusplus.com/reference/string/string/
Düğümden "string - C++ Reference" adı verilen textpattern'i alırız. Ardından, "documentRange" belgesinin tümünün belge aralığını alırız ve fareyle bir metin seçerler ve bu aralığı selectionRange ex olarak kaydederiz. "temsil eden nesneler" (site içinden metin seçimi ... satır 3'ün altında std :: string).
Karşılaştırma noktaları nokta metinleri arasında geçerli/doğru bir mesafe döndürdüğü bir not defteri penceresi için de aynısını denedik.
Örnek: pozitif, negatif veya sıfır değer döndürülür
if (SUCCEEDED(hr))
{
IUIAutomationTextRange* documentRange = NULL;
IUIAutomationTextRangeArray* selectionRangeArray = NULL;
IUIAutomationTextRange* selectionRange = NULL;
hr = E_FAIL;
hr = m_pTextPattern->get_DocumentRange(&documentRange);
if (SUCCEEDED(hr) && documentRange != NULL)
{
hr = m_pTextPattern->GetSelection(&selectionRangeArray);
if (SUCCEEDED(hr) && selectionRangeArray != NULL)
{
int length;
hr = selectionRangeArray->get_Length(&length);
if (SUCCEEDED(hr) && length > 0)
{
hr = selectionRangeArray->GetElement(0, &selectionRange);
if (SUCCEEDED(hr) && selectionRange != NULL)
{
hr = selectionRange->CompareEndpoints(TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
documentRange, TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start, &rv);
wprintf(L"getSelectionStart rv: %d\n", rv);
}
}
}
}
if (documentRange != NULL)
{
documentRange->Release();
documentRange = NULL;
}
if (selectionRangeArray != NULL)
{
selectionRangeArray->Release();
selectionRangeArray = NULL;
}
if (selectionRange != NULL)
{
selectionRange->Release();
selectionRange = NULL;
}
}
}
Yanıtladığınız için teşekkür ederiz. Bazı programlarda bir mesafe (kelime, not defteri, ...) sağlar, bu yüzden gizli önkoşullar ne olabilir? Belgelerin herhangi bir yerinde bulamıyor. – Jaaxe
@Jaaxe Sağlayıcıya bağlı. Sözleşme, olumlu, olumsuz veya sıfır olduğunu söylüyor; bazı sağlayıcılar bunun ötesine geçer ve gerçek bir mesafeye geri döner, ancak bu güvene güvenemezsiniz. –