我有一个显示一本书的窗口。在下面的两个较小的框中,有打开的书的页码和卷信息。我可以很容易地得到这些信息,如下所示:
ControlGetText, volume, ThunderRT6TextBox3
ControlGetText, page, ThunderRT6TextBox2
然后我的脚本使我的鼠标指针移动到一个按钮。它单击它,并弹出一个新窗口。在那个窗口中,有更多与图书相关的文本信息,例如出版商、作者姓名、版本等。我想检索该信息。但是当我尝试相同的策略时它不起作用,例如:
ControlGetText, data, RichTextWndClass3
这两种情况之间的唯一区别是这两个小框是可编辑的,您可以输入文本而此窗口是静态的。
我尝试了许多其他选项,例如:
SendEvent ^a
相当于 control + a,应该选择所有内容。我尝试暂停,但它永远不会选择。我尝试使用脚本手动双击该窗口。它起作用了,一个词就这样被选中了。即使这样 SendEvent ^a 也不做任何事情。但是,如果我执行 SendEvent ^{insert},则所选单词会被复制到我的剪贴板。
我尝试了更多组合:
ControlSend ahk_class ThunderRT6FormDC, ^a
ControlSend ClassNN RichTextWndClass3, ^a
和
ControlSend ThunderRT6FormDC, ^a
ControlSend RichTextWndClass3, ^a
它们都不起作用。所有文本选择都不会在该窗口中显示出来。
剩下的唯一选择是让脚本手动选择整个文本。但是,这是缓慢且非常荒谬的。此外,在 Window Spy 下的部分:可见窗口文本中,文本都在那里。我尝试了许多其他可能性,但我已经无能为力了。我如何直接收获该文本?
编辑——窗口的文本显示在窗口间谍中的标题下:TitleMatchMode=slow Visible Text,而不是标题:可见窗口文本
编辑——我和你谈过两个窗口。我得到卷和页码的第一个。第二个需要通过按下按钮弹出。这两个窗口都有相同的类名: ahk_class ThunderRT6MDIForm 这有什么问题吗?
编辑——结论是我不可能直接从第二个窗口获取该文本。因此,我选择了蹩脚、无聊的手动方法。我将 {shift down} 发送到活动窗口,然后在窗口底部单击。然后我将选择保存到我的剪贴板。它有效,但它只是愚蠢的。请帮我找到一个比这个更优雅的解决方案。
这是我使用的代码:
ControlGetText, volume, ThunderRT6TextBox3
ControlGetText, page, ThunderRT6TextBox2
Click, 110, 70
sleep 1000
SendInput {shift down}
click 29, 490
SendInput {shift up}
sleep 1000
SendInput, ^{ins}
sleep 100
有趣的是,真正的键盘键,如 abc 是不可能的。但我可以发送 ctrl、shift 和 ins。正如我上面提到的,^c 也给出了问题,就像 ^a 给出了问题一样。