在Internet Explorer中,UIA无法在文本select和文档范围之间使用同步点

主要问题:比较所选文本的textrange与当前站点(显示在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); 

范围是有效的,所选文本在文档范围内。 当我们尝试从文档/站点开始的起始处获取所选文本的移动/字符数时,则只返回1。

 selectionRange->CompareEndpoints( TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start, documentRange, TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start, &rv); 

防爆。 该网站: http : //www.cplusplus.com/reference/string/string/

我们从名为“string – C ++ Reference”的节点检索textpattern。 然后我们得到整个文档“documentRange”的文档范围,并用鼠标select一些文本,并将该范围保存到selectionRange ex。 “表示对象”(从std :: string下selectsite 3的文本)。

我们已经尝试了记事本窗口,其中compareendpoints返回点textranges之间的有效/正确的距离。

例:

 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; } } } 

文档声明返回负值,正值或零值。 它不一定会返回一个距离。