Como obter conteúdo textual de uma janela
Eu tenho uma janela que exibe um livro. Em duas caixas menores abaixo, há informações sobre número e volume de páginas do livro que está aberto. Eu posso obter essa informação facilmente como segue:
ControlGetText, volume, ThunderRT6TextBox3
ControlGetText, page, ThunderRT6TextBox2
Então meu script faz meu ponteiro do mouse se mover para um botão. Clica nele e uma nova janela se abre. Nessa janela, há mais informações textuais relacionadas ao livro, como editor, autor do nome, edição etc. Quero recuperar essas informações. Mas quando eu tento a mesma estratégia, não está funcionando, por exemplo:
ControlGetText, data, RichTextWndClass3
A única diferença entre os dois casos, é que essas duas caixas pequenas são editáveis, você pode inserir texto enquanto esta janela é estática.
Eu tentei muitas outras opções, tais como:SendEvent ^a
Qual é equivalente ao controle + a, que deve selecionar tudo. Eu tentei colocar pausas, mas nunca iria selecionar. Eu tentei o script para clicar duas vezes manualmente nessa janela. Funciona, e uma palavra é escolhida assim. Mesmo assim o SendEvent ^ a não faz nada. No entanto, se eu fizer SendEvent ^ {insert}, a palavra selecionada será copiada para minha área de transferência.
Eu experimentei com mais combinações:
ControlSend ahk_class ThunderRT6FormDC, ^a
ControlSend ClassNN RichTextWndClass3, ^a
e
ControlSend ThunderRT6FormDC, ^a
ControlSend RichTextWndClass3, ^a
Nenhum deles funciona. Toda a seleção de texto não se manifesta nessa janela.
A única alternativa que resta para mim é fazer com que o script faça uma seleção manual de todo o texto. No entanto, isso é lento e muito ridículo. Além disso, no Window Spy sob a seção: Visible Window Text, o texto está todo lá. Eu tentei muitas outras possibilidades e estou no final do meu juízo. Como vou colher esse texto diretamente?
EDIT-- O texto da janela mostra no Window Spy sob o cabeçalho: TitleMatchMode = lento Texto Visível, NÃO o cabeçalho: Texto da Janela Visível
EDIT-- Falei com você sobre duas janelas. O primeiro em que recebo volume e número de página. O segundo que precisa aparecer pressionando um botão. Ambas as janelas têm o mesmo nome de classe: ahk_class ThunderRT6MDIForm Isso é problemático de alguma forma?
EDIT-- A conclusão é que é impossível para mim obter esse texto da segunda janela diretamente. Como tal, optei pelo método manual manco e enfadonho. Eu envio um {shift down} para a janela ativa e faço um clique na parte inferior da janela. Em seguida, salve a seleção na minha área de transferência. Funciona, mas é apenas idiota. Por favor me ajude a encontrar uma solução mais elegante que esta.
Este é o código que usei:
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
É engraçado notar que as teclas reais do teclado, como a b c, não são possíveis. Mas eu sou capaz de enviar um ctrl, shift e um ins. Como observei acima, o ^ c também estava dando questões como se estivesse dando problemas.