UIA 无法获得比较端点以在 Internet Explorer 中的文本选择和文档范围之间工作
UIA can't get compareendpoints to work between text selection and documentrange in internet explorer
主要问题:
将 selected 文本的文本范围与当前站点上的文档范围(在 IE 中显示)进行比较时,无法让 CompareEndpoints 给出“1”以外的任何值。
//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);
范围有效,select编辑的文本在文档范围内。当我们尝试获取 moves/characters 的数量时,selected 文本是从 document/site-start 开始的,那么我们只能得到 return 值 1.
selectionRange->CompareEndpoints(
TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
documentRange,
TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
&rv);
例如。网站:
http://www.cplusplus.com/reference/string/string/
我们从名称为 "string - C++ Reference" 的节点中检索文本模式。然后我们用鼠标获取整个文档的文档范围 "documentRange" 和一些文本 select 并将该范围保存到 selectionRange ex。 "objects that represent"(select 来自站点的文本......std::string 下的第 3 行)。
我们对记事本 window 进行了相同的尝试,其中比较端点 return 编辑了点文本范围之间的 valid/correct 距离。
示例:
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;
}
}
}
The docs 声明负值、正值或零值是 returned。它不一定return距离。
主要问题: 将 selected 文本的文本范围与当前站点上的文档范围(在 IE 中显示)进行比较时,无法让 CompareEndpoints 给出“1”以外的任何值。
//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);
范围有效,select编辑的文本在文档范围内。当我们尝试获取 moves/characters 的数量时,selected 文本是从 document/site-start 开始的,那么我们只能得到 return 值 1.
selectionRange->CompareEndpoints(
TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
documentRange,
TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
&rv);
例如。网站: http://www.cplusplus.com/reference/string/string/
我们从名称为 "string - C++ Reference" 的节点中检索文本模式。然后我们用鼠标获取整个文档的文档范围 "documentRange" 和一些文本 select 并将该范围保存到 selectionRange ex。 "objects that represent"(select 来自站点的文本......std::string 下的第 3 行)。
我们对记事本 window 进行了相同的尝试,其中比较端点 return 编辑了点文本范围之间的 valid/correct 距离。
示例:
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;
}
}
}
The docs 声明负值、正值或零值是 returned。它不一定return距离。