我有一個顯示書籍的窗口。在下面的兩個較小的框中,打開書的頁碼和卷信息。我可以很容易地得到這些信息如下:如何從窗口中獲取文本內容
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