我有一个展示一本书的窗口。下面的两个较小的框中,有打开的书的页码和卷信息。我可以轻松获取该信息,如下所示:
ControlGetText, volume, ThunderRT6TextBox3
ControlGetText, page, ThunderRT6TextBox2
Run Code Online (Sandbox Code Playgroud)
然后我的脚本使我的鼠标指针移动到一个按钮。单击它,会弹出一个新窗口。在该窗口中,有更多与该书相关的文本信息,例如出版商、作者姓名、版本等。我想检索该信息。但是当我尝试相同的策略时它不起作用,例如:
ControlGetText, data, RichTextWndClass3
两种情况之间的唯一区别是,这两个小框是可编辑的,您可以输入文本,而该窗口是静态的。
我尝试了许多其他选项,例如:
SendEvent ^a
相当于 control + a,它应该选择所有内容。我尝试暂停,但它永远不会选择。我尝试使用脚本手动双击该窗口。它有效,并且像这样选择了一个单词。即使如此,SendEvent ^a 也不会执行任何操作。但是,如果我执行 SendEvent ^{insert},则所选单词将被复制到我的剪贴板。
我尝试了更多的组合:
ControlSend ahk_class ThunderRT6FormDC, ^a
ControlSend ClassNN RichTextWndClass3, ^a
Run Code Online (Sandbox Code Playgroud)
和
ControlSend ThunderRT6FormDC, ^a
ControlSend RichTextWndClass3, ^a
Run Code Online (Sandbox Code Playgroud)
它们都不起作用。所有文本选择不会在该窗口中显示出来。
我剩下的唯一选择是让脚本手动选择整个文本。然而,这是缓慢且非常荒谬的。此外,在 Window Spy 的“可见窗口文本”部分下,文本都在那里。我尝试了很多其他的可能性,但我已经束手无策了。我如何直接收获该文本?
编辑 - 窗口的文本显示在 Window Spy 的标题下:TitleMatchMode=slow Visible Text,而不是标题:Visible Window Text
编辑--我和你谈到了两个窗口。我获得卷和页码的第一个。第二个需要通过按按钮弹出。这两个窗口具有相同的类名:ahk_class ThunderRT6MDIForm 这有什么问题吗?
编辑 - 结论是我不可能直接从第二个窗口获取该文本。因此,我选择了蹩脚、无聊的手动方法。我向活动窗口发送 {shift down},然后单击窗口底部。然后我将选择保存到剪贴板。它有效,但它只是愚蠢的。请帮我找到一种比这个更优雅的解决方案。
这是我使用的代码:
ControlGetText, volume, ThunderRT6TextBox3
ControlGetText, page, ThunderRT6TextBox2
Click, 110, 70
sleep 1000
SendInput {shift down}
click 29, 490 …Run Code Online (Sandbox Code Playgroud) 我的脚本应该在我的窗口左上角的某个地方按下一个按钮。它没有正常工作。我试过这个:
ControlClick ClassNN ThunderRT6UserControlDC29, ahk_class ThunderRT6FormDC
Run Code Online (Sandbox Code Playgroud)
然而它不起作用。我尝试了手动选项:
Controlclick x160 y60, ....
Run Code Online (Sandbox Code Playgroud)
但这也行不通。
最终我求助于一个单纯的:
Click 160, 60 这确实有效。
我想知道为什么它会这样?此外,是否有一种方法可以仅按下按钮而鼠标实际上并没有完全移动到那里。我看起来很笨,而且很慢。我问这个问题的主要原因是因为它与我提出的另一个问题密切相关: 如何从窗口中获取文本内容 的共同点是,任何带有 classNN 和 ahk_class 的东西似乎都有问题。
调试脚本时,通常需要知道变量的值才能准确了解正在发生的事情.使用MsgBox输出变量来解决这个问题是令人烦恼和低效的.
有没有可以帮助我调试变量的函数?
我希望它写下我所有的局部变量,它们的名称和相应的值,以及当前正在执行的文件的名称.是否有可以实时提供此功能的调试工具?
过程的名称可能很难做到,但有没有办法至少可以枚举和写出所有局部变量?