C# UIMS自动化对文本无效吗?如何设置字体大小、获取插入符号位置、插入文本等?

C# UIMS自动化对文本无效吗?如何设置字体大小、获取插入符号位置、插入文本等?,c#,.net,.net-3.5,ui-automation,C#,.net,.net 3.5,Ui Automation,我正在研究用于控制文本的Microsoft UIAutomation,但发现它毫无用处。我需要做一些事情,比如: 获得插入符号位置 对我来说意味着我需要跟踪插入符号,如果我不知道它的原始位置,它将不起作用 在特定位置插入文本 只能使用ValuePattern的SetValue 设置字体大小 我可以读取字体大小,但无法设置 等 到目前为止,我已经读了很多文章,但没有一篇文章指出这种可能性。这有助于我开始,但当我试图深入挖掘时,我不断遇到更多的问题而不是答案。这是我转到MS Acce

我正在研究用于控制文本的Microsoft UIAutomation,但发现它毫无用处。我需要做一些事情,比如:

  • 获得插入符号位置
    • 对我来说意味着我需要跟踪插入符号,如果我不知道它的原始位置,它将不起作用
  • 在特定位置插入文本
    • 只能使用
      ValuePattern
      SetValue
  • 设置字体大小
    • 我可以读取字体大小,但无法设置
到目前为止,我已经读了很多文章,但没有一篇文章指出这种可能性。这有助于我开始,但当我试图深入挖掘时,我不断遇到更多的问题而不是答案。这是我转到MS Accessibility Automation的唯一选择,它与WPF虚拟化以及其他功能不兼容

如果有人能为我指出一篇有用的文章或为上述缺点提供例子,那就太好了。然而,在这一点上我并不抱希望,因为这一切似乎都导致了获取信息的方式,而不是更新信息

编辑

我甚至试图深入研究
UIAutomationClient.dll
,但似乎确实没有对它的支持。看起来UIA主要是用来获取粗略的信息和点击。没有真正的文本支持

这似乎证实了UIA对我的需求毫无用处

黑客解决方法


我们的解决方法是使用UIA获取一般上下文,然后使用AutoIt SendKeys

您所指的文章描述了希望支持TextPattern实现UI自动化的应用程序需要如何工作,而不是希望使用TextPattern检索信息的客户机需要如何工作。特别是,实施者需要跟踪插入符号;客户没有

这就是说,TextPattern设计用于检索信息,而不是设置信息;在广泛使用文本服务框架(设计用于插入文本)之后,我能够理解其中的原因。(许多应用程序的设计不允许对其数据结构进行任意的未经请求的操作;允许应用程序指定何时可以对其进行操作严重扭曲了文本服务的设计。)

前两项非常简单。您可以使用IUIAutomationTextPattern::GetSelection获取所选文本;这将返回可提取其位置等的集合


虽然您不能直接操作文本范围的内容,但可以选择它,然后使用SendKeys等生成输入。

我也花了几个小时寻找这个。你的帖子缓解了我的沮丧——我将为此避免UI自动化。