gpt4 book ai didi

c++ - UIAutomation 调用返回的最大数据长度

转载 作者:行者123 更新时间:2023-11-30 05:15:20 26 4
gpt4 key购买 nike

我正在开发一个将捕获屏幕上的文本的 Windows 7 C++ 程序。 Microsoft 的 UIAutomation 框架似乎是实现它的最佳方式。除了一件事,我已经让它运行得很好——当我使用框架的函数获取文本时,它似乎只返回前一百万个字符。这可能看起来很多,但尝试列出硬盘上的每个文件,它很快就会达到数百万字符的范围。我尝试了两种不同的方法来获取该文本,两种方法都返回相同的内容,并且都限于前一百万个字符。

这是代码示例:

IUIAutomationElement *element = findElement();

VARIANT v;
VariantInit(&v);

element->GetCurrentPropertyValue(UIA_LegacyIAccessibleValuePropertyId, &v);

BSTR tempString = V_BSTR(&v);

当文本长度少于一百万个字符时,一切都按预期工作,但超过该限制的任何内容都会被截断。

我假设可能有两个地方出现问题。首先,一个 VARIANT 可能只能容纳一百万个字符,但这似乎是不正确的,基于我能找到的有关 Microsoft 的 VARIANT 实现的信息。第二个是 GetCurrentPropertyValue() 调用最多只返回一百万个字符。这很糟糕,因为我看不到解决方法。

请注意,我也使用 IUIAutomationValuePattern 和 IUIAutomationTextRange 完成了此操作,但产生了相同的结果。

有什么想法吗?

最佳答案

在对代码进行更多检测后,我意识到我关于 VARIANT 能够容纳超过一百万个字符的断言是不正确的。实际发生的情况是我从 VARIANT 中提取的 BSTR 保存了所有数据,因此它根本没有被截断。真正发生的是我从 BSTR 创建的 wstring(为了便于字符串操作)正在截断。好像是

wstring(tempString);

只会给我最多一百万个字符的字符串。因此,虽然我还没有解决问题,但我已经成功地缩小了罪魁祸首的范围,至少这是一个易于处理的问题,因为我实际上并没有丢失数据。

编辑:关于 wstring 处理超长字符串的能力,我也是错误的。如果我只查看 wstring 的长度,就会发现它正确地复制了 BSTR。这是一种解脱。

限制为一百万个字符的是 Visual Studio 2015 的字符串检查工具——无论何时我查看 wstring 的内容,它都不会超过一百万个字符。

所以,感谢您在这段 self 发现之旅中对我的帮助——这里没有什么可看的了。向前走。继续前进。

关于c++ - UIAutomation 调用返回的最大数据长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43145067/

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