Post by Gio » 06 Aug 2018, 16:29
Boa tarde RicMic.
Os privilégios administrativos podem afetar, mas como você ainda está experimentando com os comandos, o melhor é não presumirmos isso ainda. Não tenho como saber se os dados informados no seu exemplo correspondem aos do seu programa alvo, então vamos fazer o seguinte: vou criar um exemplo que nós dois possamos replicar e quando estivermos certos de que o método está compreendido, movemos para outros programas ok
Primeiro, vamos criar uma GUI própria, que possua um título, alguns campos, uma classe de janela, controles com várias classNNs e etc. Depois vamos verificar como encontrar essas informações no WindowSpy e aí criar hotkeys para interagir com esses controles usando os comandos adequados.
1. Criando a GUI - A gui que vamos criar é bem simples: Ela se chamará "Gui do Barulho" e vai permitir que o usuário insira texto em três campos. O texto do primeiro campo é exibido em uma msgbox com um sinal de erro (vermelho) quando o usuário clicar no botão "Gritar" e o texto do segundo campo é exibido em uma msgbox com um sinal de atenção (amarelo) quando o usuário clicar no botão "berrar". Além disso, tem um texto encima no meio da Gui chamado "Texto Legal". Por fim, o texto do terceiro campo será lido pelo assistente de voz do windows quando você clicar no botão "falar".
Code: Select all
Gui, Font, w700 s10
Gui, add, Text, x0 w600 y10 Center, Texto Legal
Gui, add, Text, x20 y30, Mesagem do Grito
Gui, add, Edit, x20 y50 w200 vCAMPO_DO_GRITO
Gui, add, button, x240 y50 gGRITAR, Gritar
Gui, add, Text, x20 y90, Mesagem do Berro
Gui, add, Edit, x20 y110 w200 vCAMPO_DO_BERRO
Gui, add, button, x240 y110 gBERRAR, Berrar
Gui, add, Text, x20 y150, Mensagem da Fala
Gui, add, Edit, x20 y170 w200 vCAMPO_DA_FALA
Gui, add, Button, x240 y170 gFALAR, Falar
Gui, show, w600 h400, Gui Do Barulho ; O título da tela foi definido neste comando: ela se chamará Gui Do Barulho
Return
Gritar:
Gui, Submit, nohide
Msgbox, 0x10, Grito, %CAMPO_DO_GRITO%
Return
Berrar:
Gui, submit, nohide
Msgbox, 0x30, Berro, %CAMPO_DO_BERRO%
Return
Falar:
Gui, Submit, nohide
ComObjCreate("SAPI.SpVoice").Speak(CAMPO_DA_FALA)
Return
2. Descobrindo as informações - Agora que a Gui já está criada, vamos usar o Window Spy para descobrir o título da janela e o ClassNN dos controles que queremos manipular. Você pode verificar isso nas imagens abaixo: as setas vemelhas representam o título da janela na própria janela e no Window Spy. As setas em verde representam o campo cujo mouse está encima e o corresponde ClassNN na janela do Window Spy.
- Texto encima.png (20.39 KiB) Viewed 6100 times
- primeiro campo.png (21.38 KiB) Viewed 6100 times
- Primeiro botao.png (22.18 KiB) Viewed 6100 times
3. Escrevendo os comandos a partir dos ClassNN - Agora que já temos os dados necessários, vamos escrever os comandos para interação com a janela. Vou colocá-los nas hotkeys F2, F3, F4, F5, F6, F7, F8 e F9. Cada uma fará uma coisa diferente entre alterar o texto do campo, acionar o botão (de 2 formas) ou trocar o texto centralizado. Veja como os parâmetros obtidos são escritos, e lembre-se que a ordem dos parâmetros nos comandos é importante. Veja também os métodos utilizados em cada situação.
Code: Select all
Gui, Font, w700 s10
Gui, add, Text, x0 w600 y10 Center, Texto Legal
Gui, add, Text, x20 y30, Mesagem do Grito
Gui, add, Edit, x20 y50 w200 vCAMPO_DO_GRITO
Gui, add, button, x240 y50 gGRITAR, Gritar
Gui, add, Text, x20 y90, Mesagem do Berro
Gui, add, Edit, x20 y110 w200 vCAMPO_DO_BERRO
Gui, add, button, x240 y110 gBERRAR, Berrar
Gui, add, Text, x20 y150, Mensagem da Fala
Gui, add, Edit, x20 y170 w200 vCAMPO_DA_FALA
Gui, add, Button, x240 y170 gFALAR, Falar
Gui, show, w600 h400, Gui Do Barulho ; O título da tela foi definido neste comando: ela se chamará Gui Do Barulho
Return
Gritar:
Gui, Submit, nohide
Msgbox, 0x10, Grito, %CAMPO_DO_GRITO%
Return
Berrar:
Gui, submit, nohide
Msgbox, 0x30, Berro, %CAMPO_DO_BERRO%
Return
Falar:
Gui, Submit, nohide
ComObjCreate("SAPI.SpVoice").Speak(CAMPO_DA_FALA)
Return
F2::
ControlSetText, Edit1, GRITO DA TORCIDA !!, Gui Do Barulho ; ALTERA O TEXTO DO SEGUNDO CAMPO USANDO O CLASSNN EDIT1 E O TÍTULO DA JANELA
Return
F3::
ControlSetText, Edit2, GRITO DA GALERA !!, Gui Do Barulho ; ALTERA O TEXTO DO SEGUNDO CAMPO USANDO O CLASSNN EDIT2 E O TÍTULO DA JANELA.
Return
F4::
ControlClick, Button1, Gui Do Barulho ; ATIVA O BOTÃO "GRITAR" ATRAVÉS DO CLASSNN DO BOTÃO, DO TÍTULO DA JANELA E DO COMANDO CONTROLCLICK.
Return
F5::
ControlSend, Button2, %A_Space%, Gui Do Barulho ; ATIVA O BOTÃO "BERRAR" ATRAVÉS DO CLASSNN DO BOTÃO, DO TÍTULO DA JANELA E DO ENVIO DE UM SINAL DE ESPAÇO.
Return
F6::
Gui, Font, s10 w700 cFF0000 ; ALTERA A FONTE DA GUI. VERMELHO FF, VERDE 00, AZUL 00.
GuiControl, Font, Static1 ; ALTERA A FONTE DO CONTROLE PARA USAR A NOVA FONTE DA GUI (E NAO MAIS A QUE ESTAVA ATIVA QUANDO O CONTROLE FOI CRIADO)
ControlSetText, Static1, Texto DIFERENTE, Gui Do Barulho ; ALTERA O TEXTO QUE FICA ENCIMA NA JANELA.
return
F7::
Gui, Font, s10 w700 c009000 ; ALTERA A FONTE DA GUI. VERMELHO 00, VERDE 90, AZUL 00.
GuiControl, Font, Static1 ; ALTERA A FONTE DO CONTROLE PARA USAR A NOVA FONTE DA GUI (E NAO MAIS A QUE ESTAVA ATIVA QUANDO O CONTROLE FOI CRIADO)
ControlSetText, Static1, TEXTO MAIS DIFERENTE AINDA, Gui Do Barulho ; ALTERA O TEXTO QUE FICA ENCIMA NA JANELA.
REturn
F8::
ControlSend, Edit1, ABC, Gui Do Barulho ; Usa o ControlSend ao invés do ControlSetText para adicionar ao campo 1 (note que o texto que existia não se apaga).
Return
F9::
; MÉTODO ALTERNATIVO AO CLASSNN PARA MANIPULAR UM CONTROLE: COLOQUE O MOUSE ENCIMA DE QUALQUER CONTROLE DA TELA E ATIVE ESTA HOTKEY.
MouseGetPos,,,,HANDLE_DO_CONTROLE, 2 ; Usa o MouseGetPos para descobrir o handle do control.
ControlSetText,, TÁ COM O MOUSE AQUI !!, ahk_id %HANDLE_DO_CONTROLE%
Return
Execute o código acima e tecle F2, F3, F4, F5, F6, F7, F8, e F9. Veja o que acontece com a tela em cada caso. Depois, analise como foram escritos os comandos em cada hotkey.
Depois, tente reproduzir o método demonstrado, escrevendo alguns dos comandos você mesmo, de modo que eles possam afetar especificamente o terceiro campo e o terceiro botão, que não foram afetados nas hotkeys ainda (exceto F9).
OBS: O F9 deve ser usado com o mouse encima de um controle da tela (qualquer controle). Trata-se de um método alternativo para interagir com um controle através do handle (e não do ClassNN).
Uma vez que estiver craque em escrever os comandos para automatizar essa gui própria, ficará mais fácil escrever comandos para automatizar outras GUIs
Dica: Quase sempre tem mais de uma forma de fazer alguma coisa em programação. Quando uma não funciona, devemos sempre procurar suas alternativas (workarounds). O conhecimento que você adquire ao longo dos anos é muito importante aqui, por isso nunca pare de frequentar os fórums e ver o que os outros estão fazendo de inovador. Como exemplo, podemos criar um controle de janela do tipo botão facilmente usando o comando
Gui, Add, Button, mas se isso não funcionar, o mesmo também pode ser feito com algumas DllCall()s ou até mesmo de outras formas criativas, como usando um controle do tipo imagem com alguns gatilhos que operem quando o usuário clicar na imagem. Convém lembrar que tudo o que já vimos sendo feito em um computador foi feito através de programação, e nesse sentido, saiba que o AutoHotkey pode fazer quase tudo o que é programável também: desde programas de escritório a jogos 3D com gráficos OpenGl e etc.
Boa tarde RicMic.
Os privilégios administrativos podem afetar, mas como você ainda está experimentando com os comandos, o melhor é não presumirmos isso ainda. Não tenho como saber se os dados informados no seu exemplo correspondem aos do seu programa alvo, então vamos fazer o seguinte: vou criar um exemplo que nós dois possamos replicar e quando estivermos certos de que o método está compreendido, movemos para outros programas ok :thumbup:
Primeiro, vamos criar uma GUI própria, que possua um título, alguns campos, uma classe de janela, controles com várias classNNs e etc. Depois vamos verificar como encontrar essas informações no WindowSpy e aí criar hotkeys para interagir com esses controles usando os comandos adequados.
[b]1. Criando a GUI[/b] - A gui que vamos criar é bem simples: Ela se chamará "Gui do Barulho" e vai permitir que o usuário insira texto em três campos. O texto do primeiro campo é exibido em uma msgbox com um sinal de erro (vermelho) quando o usuário clicar no botão "Gritar" e o texto do segundo campo é exibido em uma msgbox com um sinal de atenção (amarelo) quando o usuário clicar no botão "berrar". Além disso, tem um texto encima no meio da Gui chamado "Texto Legal". Por fim, o texto do terceiro campo será lido pelo assistente de voz do windows quando você clicar no botão "falar".
[code]Gui, Font, w700 s10
Gui, add, Text, x0 w600 y10 Center, Texto Legal
Gui, add, Text, x20 y30, Mesagem do Grito
Gui, add, Edit, x20 y50 w200 vCAMPO_DO_GRITO
Gui, add, button, x240 y50 gGRITAR, Gritar
Gui, add, Text, x20 y90, Mesagem do Berro
Gui, add, Edit, x20 y110 w200 vCAMPO_DO_BERRO
Gui, add, button, x240 y110 gBERRAR, Berrar
Gui, add, Text, x20 y150, Mensagem da Fala
Gui, add, Edit, x20 y170 w200 vCAMPO_DA_FALA
Gui, add, Button, x240 y170 gFALAR, Falar
Gui, show, w600 h400, Gui Do Barulho ; O título da tela foi definido neste comando: ela se chamará Gui Do Barulho
Return
Gritar:
Gui, Submit, nohide
Msgbox, 0x10, Grito, %CAMPO_DO_GRITO%
Return
Berrar:
Gui, submit, nohide
Msgbox, 0x30, Berro, %CAMPO_DO_BERRO%
Return
Falar:
Gui, Submit, nohide
ComObjCreate("SAPI.SpVoice").Speak(CAMPO_DA_FALA)
Return[/code]
[b]2. Descobrindo as informações[/b] - Agora que a Gui já está criada, vamos usar o Window Spy para descobrir o título da janela e o ClassNN dos controles que queremos manipular. Você pode verificar isso nas imagens abaixo: as setas vemelhas representam o título da janela na própria janela e no Window Spy. As setas em verde representam o campo cujo mouse está encima e o corresponde ClassNN na janela do Window Spy.
[attachment=2]Texto encima.png[/attachment]
[attachment=1]primeiro campo.png[/attachment]
[attachment=0]Primeiro botao.png[/attachment]
[b]3. Escrevendo os comandos a partir dos ClassNN[/b] - Agora que já temos os dados necessários, vamos escrever os comandos para interação com a janela. Vou colocá-los nas hotkeys F2, F3, F4, F5, F6, F7, F8 e F9. Cada uma fará uma coisa diferente entre alterar o texto do campo, acionar o botão (de 2 formas) ou trocar o texto centralizado. Veja como os parâmetros obtidos são escritos, e lembre-se que a ordem dos parâmetros nos comandos é importante. Veja também os métodos utilizados em cada situação.
[code]Gui, Font, w700 s10
Gui, add, Text, x0 w600 y10 Center, Texto Legal
Gui, add, Text, x20 y30, Mesagem do Grito
Gui, add, Edit, x20 y50 w200 vCAMPO_DO_GRITO
Gui, add, button, x240 y50 gGRITAR, Gritar
Gui, add, Text, x20 y90, Mesagem do Berro
Gui, add, Edit, x20 y110 w200 vCAMPO_DO_BERRO
Gui, add, button, x240 y110 gBERRAR, Berrar
Gui, add, Text, x20 y150, Mensagem da Fala
Gui, add, Edit, x20 y170 w200 vCAMPO_DA_FALA
Gui, add, Button, x240 y170 gFALAR, Falar
Gui, show, w600 h400, Gui Do Barulho ; O título da tela foi definido neste comando: ela se chamará Gui Do Barulho
Return
Gritar:
Gui, Submit, nohide
Msgbox, 0x10, Grito, %CAMPO_DO_GRITO%
Return
Berrar:
Gui, submit, nohide
Msgbox, 0x30, Berro, %CAMPO_DO_BERRO%
Return
Falar:
Gui, Submit, nohide
ComObjCreate("SAPI.SpVoice").Speak(CAMPO_DA_FALA)
Return
F2::
ControlSetText, Edit1, GRITO DA TORCIDA !!, Gui Do Barulho ; ALTERA O TEXTO DO SEGUNDO CAMPO USANDO O CLASSNN EDIT1 E O TÍTULO DA JANELA
Return
F3::
ControlSetText, Edit2, GRITO DA GALERA !!, Gui Do Barulho ; ALTERA O TEXTO DO SEGUNDO CAMPO USANDO O CLASSNN EDIT2 E O TÍTULO DA JANELA.
Return
F4::
ControlClick, Button1, Gui Do Barulho ; ATIVA O BOTÃO "GRITAR" ATRAVÉS DO CLASSNN DO BOTÃO, DO TÍTULO DA JANELA E DO COMANDO CONTROLCLICK.
Return
F5::
ControlSend, Button2, %A_Space%, Gui Do Barulho ; ATIVA O BOTÃO "BERRAR" ATRAVÉS DO CLASSNN DO BOTÃO, DO TÍTULO DA JANELA E DO ENVIO DE UM SINAL DE ESPAÇO.
Return
F6::
Gui, Font, s10 w700 cFF0000 ; ALTERA A FONTE DA GUI. VERMELHO FF, VERDE 00, AZUL 00.
GuiControl, Font, Static1 ; ALTERA A FONTE DO CONTROLE PARA USAR A NOVA FONTE DA GUI (E NAO MAIS A QUE ESTAVA ATIVA QUANDO O CONTROLE FOI CRIADO)
ControlSetText, Static1, Texto DIFERENTE, Gui Do Barulho ; ALTERA O TEXTO QUE FICA ENCIMA NA JANELA.
return
F7::
Gui, Font, s10 w700 c009000 ; ALTERA A FONTE DA GUI. VERMELHO 00, VERDE 90, AZUL 00.
GuiControl, Font, Static1 ; ALTERA A FONTE DO CONTROLE PARA USAR A NOVA FONTE DA GUI (E NAO MAIS A QUE ESTAVA ATIVA QUANDO O CONTROLE FOI CRIADO)
ControlSetText, Static1, TEXTO MAIS DIFERENTE AINDA, Gui Do Barulho ; ALTERA O TEXTO QUE FICA ENCIMA NA JANELA.
REturn
F8::
ControlSend, Edit1, ABC, Gui Do Barulho ; Usa o ControlSend ao invés do ControlSetText para adicionar ao campo 1 (note que o texto que existia não se apaga).
Return
F9::
; MÉTODO ALTERNATIVO AO CLASSNN PARA MANIPULAR UM CONTROLE: COLOQUE O MOUSE ENCIMA DE QUALQUER CONTROLE DA TELA E ATIVE ESTA HOTKEY.
MouseGetPos,,,,HANDLE_DO_CONTROLE, 2 ; Usa o MouseGetPos para descobrir o handle do control.
ControlSetText,, TÁ COM O MOUSE AQUI !!, ahk_id %HANDLE_DO_CONTROLE%
Return[/code]
Execute o código acima e tecle F2, F3, F4, F5, F6, F7, F8, e F9. Veja o que acontece com a tela em cada caso. Depois, analise como foram escritos os comandos em cada hotkey. [b]Depois, tente reproduzir o método demonstrado, escrevendo alguns dos comandos você mesmo, de modo que eles possam afetar especificamente o terceiro campo e o terceiro botão, que não foram afetados nas hotkeys ainda (exceto F9)[/b].
:arrow: OBS: O F9 deve ser usado com o mouse encima de um controle da tela (qualquer controle). Trata-se de um método alternativo para interagir com um controle através do handle (e não do ClassNN).
Uma vez que estiver craque em escrever os comandos para automatizar essa gui própria, ficará mais fácil escrever comandos para automatizar outras GUIs :thumbup:
[b]Dica[/b]: Quase sempre tem mais de uma forma de fazer alguma coisa em programação. Quando uma não funciona, devemos sempre procurar suas alternativas (workarounds). O conhecimento que você adquire ao longo dos anos é muito importante aqui, por isso nunca pare de frequentar os fórums e ver o que os outros estão fazendo de inovador. Como exemplo, podemos criar um controle de janela do tipo botão facilmente usando o comando [c]Gui, Add, Button[/c], mas se isso não funcionar, o mesmo também pode ser feito com algumas DllCall()s ou até mesmo de outras formas criativas, como usando um controle do tipo imagem com alguns gatilhos que operem quando o usuário clicar na imagem. Convém lembrar que tudo o que já vimos sendo feito em um computador foi feito através de programação, e nesse sentido, saiba que o AutoHotkey pode fazer quase tudo o que é programável também: desde programas de escritório a jogos 3D com gráficos OpenGl e etc.