我有一个显示书籍的窗口。在下面的两个较小的框中,打开书的页码和卷信息。我可以很容易地得到这些信息如下:如何从窗口中获取文本内容
ControlGetText, volume, ThunderRT6TextBox3
ControlGetText, page, ThunderRT6TextBox2
然后我的脚本让我的鼠标指针移动到一个按钮。它点击它,并打开一个新窗口。在那个窗口中,有更多与本书相关的文本信息,例如发布者,姓名作者,版本等。我想检索这些信息。但是,当我尝试同样的策略,它不工作,如:
ControlGetText, data, RichTextWndClass3
两种情况之间的唯一区别是,这两个小箱子是可编辑的,你可以,而这个窗口是静态的输入文字。
我尝试了很多其他选项,如: SendEvent ^a
这相当于控制+ a,它应该选择所有内容。我尝试了暂停,但它永远不会选择。我试着脚本手动双击该窗口。它的工作原理,一个词就是这样的选择。即使那么SendEvent^a也不会做任何事情。 但是,如果我做SendEvent^{插入},那么选定的单词将被复制到我的剪贴板。
我尝试用更多的组合:
ControlSend ahk_class ThunderRT6FormDC, ^a
ControlSend ClassNN RichTextWndClass3, ^a
和
ControlSend ThunderRT6FormDC, ^a
ControlSend RichTextWndClass3, ^a
没有他们的工作。所有文本选择都不会在该窗口中显示。
剩下的唯一替代方法是让脚本对整个文本进行手动选择。但是,这很慢很荒谬。而且,在Window Spy的“可见窗口文本”部分下,文本全部存在。我尝试了很多其他的可能性,并且我处于最后的智慧之中。我如何直接收集文本?
EDIT-- 窗口的文本显示在窗口间谍标题下:TitleMatchMode =慢可见文本,而不是标题:可视窗口文本
EDIT-- 我说话给你两个窗口。第一个我得到的数量和页码。第二个需要按下按钮弹出。 这两个窗口具有相同的类名称: ahk_class ThunderRT6MDIForm 这是有问题的任何方式吗?
EDIT-- 的结论是,这是不可能的,我直接得到第二个窗口的文本。因此,我选择了这种蹩脚的,无聊的手动方法。我向移动窗口发出{shift shift},然后在窗口底部单击鼠标。然后我将选择保存到我的剪贴板。它工作,但它是愚蠢的。请帮我找一个比这个更优雅的解决方案。
这是我使用的代码:
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
很有趣的是要注意,真正的键盘按键,如A B C是不可能的。但我能够发送一个Ctrl,Shift和一个插件。正如我上面提到的,^ c也给出了问题,就像^ a提供了问题。
窗口间谍有时是不准确的,当谈到找到具体的控制。如果文本在*窗口文本*下列出,则表示您的卡片很好。有两种方法:1)使用[WinGet,Outputvar,ControlList](http://www.autohotkey.com/docs/commands/WinGet.htm)循环显示窗口暴露的每个控件,以查找哪些控件包含所需的文字。 2)用'WinGetText'检索文本并提取你需要的内容。我建议1),因为它更准确。 – MCL
谢谢。我从你给我的链接中选择了第四个选项。它给我一个持续的窗口,包含所有的信息,大约8项。所有这些都对应于Window Spy所说的内容。只有一个事件我无法找到,它被称为tabstripwendclass1或类似的东西。另外,我必须在我的帖子中更正我的声明,文本显示在Window Spy的标题下:TitleMatchMode =缓慢可见文本,而不是标题可见窗口文本。 – Khalil
最后,我不明白我应该如何通过该工具找到包含所需文本的正确控件。是否应该在列表顶部显示我正在用鼠标循环播放?它不会改变,除非我改变整个窗口。 – Khalil