【发布时间】:2020-02-02 19:13:58
【问题描述】:
我在 Windows 7 上使用 32 位 C++ 应用程序中的 UIAutomation 来获取其他进程窗口的文本内容。我注意到如果窗口中的文本比这长,API 总是返回截断为 4096 个字符的字符串。对于 UIA_ValueValuePropertyId 和 UIA_LegacyIAccessibleValuePropertyId 属性 ID,GetCachedPropertyValue() 和 GetCurrentPropertyValue() 调用都会发生这种情况。 除其他外,针对 32 位和 64 位记事本进行了测试。 当我使用 SendMessage 以及 WM_GETTEXTLENGTH 和 WM_GETTEXT 消息检索文本时,将返回完整的、未截断的文本。 (这是我目前使用的一种解决方法。)
查看文档,我找不到任何提及此限制或如何解决它的信息,如果截断是设计使然的话,我会预料到这一点。 我在 stackoverflow 上找到了similar question,但截断显然是由于 Visual Studio 调试器,而不是 UIAutomation API。但是,这个问题清楚地表明 UIAutomation 应该能够返回很长的文本。 谷歌搜索该问题会导致在 stackoverflow 上的 another question 也提到了 4096 个字符的限制,但不幸的是,该问题和任何可能的答案都被删除了。
也许属性 UIA_ValueValuePropertyId 或 UIA_LegacyIAccessibleValuePropertyId 不是正确使用的属性,但我没有找到更好的属性。
谁能指出我做错了什么,或者有什么我可以尝试的建议?也欢迎指出我显然错过的文档。
TIA
【问题讨论】:
标签: ui-automation microsoft-ui-automation