【发布时间】:2017-04-01 06:42:29
【问题描述】:
我正在开发一个 Windows 7 C++ 程序,该程序将捕获屏幕上的文本。微软的 UIAutomation 框架似乎是最好的方法。除了一件事——当我使用框架的函数来获取文本时,我已经让它工作得很好,它似乎只返回了前一百万个字符。这可能看起来很多,但尝试列出硬盘驱动器上的每个文件,它很快就会达到数百万个字符的范围。我尝试了两种不同的方式来获取该文本,两种方式都返回相同的内容,并且都限制为前一百万个字符。
以下是代码示例:
IUIAutomationElement *element = findElement();
VARIANT v;
VariantInit(&v);
element->GetCurrentPropertyValue(UIA_LegacyIAccessibleValuePropertyId, &v);
BSTR tempString = V_BSTR(&v);
当文本数量少于一百万个字符时,一切都按预期工作,但任何超过该限制的内容都会被截断。
我假设可能有两个地方出现问题。首先,一个 VARIANT 可能只能容纳一百万个字符,但这似乎是不正确的,基于我对微软实现的 VARIANT 的了解。第二个是 GetCurrentPropertyValue() 调用最多只能返回一百万个字符。这很糟糕,因为我看不到解决办法。
请注意,我也使用 IUIAutomationValuePattern 和 IUIAutomationTextRange 完成了此操作,但产生的结果相同。
有什么想法吗?
【问题讨论】:
标签: c++ ui-automation