gpt4 book ai didi

c++ - UIA 无法获得比较端点以在 Internet Explorer 中的文本选择和文档范围之间工作

转载 作者:可可西里 更新时间:2023-11-01 12:52:04 32 4
gpt4 key购买 nike

主要问题:将所选文本的文本范围与当前站点上的文档范围(在 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”的节点中检索文本模式。然后我们得到整个文档“documentRange”的文档范围并用鼠标选择一些文本并将该范围保存到selectionRange ex。 “表示的对象”(从站点选择文本...std::string 下的第 3 行)。

我们对记事本窗口进行了相同的尝试,其中 compareendpoints 返回了点文本范围之间的有效/正确距离。

例子:

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说明返回负值、正值或零值。它不一定返回距离。

关于c++ - UIA 无法获得比较端点以在 Internet Explorer 中的文本选择和文档范围之间工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37836695/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com