Existe essa possibilidade para botões virtuais giratórios e deslizantes?

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

thomasmessi
Posts: 51
Joined: 22 Dec 2019, 17:33

Existe essa possibilidade para botões virtuais giratórios e deslizantes?

09 Feb 2020, 19:47

Nas telas de programas que não são acessíveis, existem butões virtuais que podem ser girados como os knobis e os deslizantes para cima e para baixo.

Como eu faria para conseguir estes controles ou ações usando apenas o teclado. Visto que, quem enxerga, é só clicar com o mouse em cima e arrasta ou ir girando com a roda do mouse.
Mas para nós o mouse físico não ajuda nada. Somente o teclado .

ps: eu já tenho a posição do mapeamento dos botões, falta apenas fazer com que tenha ação certa.

alguma idéia??


agradeço! E posso até gravar minha tela em vídeo para uma melhor análise dos amigos.

E algumas informações sobre o deslizante que eu acho ser mais fácil criar a linha de comando.

Alt & j::
MouseClick left, 250, 350 ; esta posição é a inicial do botão deslizante
MouseClick left, 250, 380 ;aqui é a posição final do deslizante. É como se fosse um controle de volume e efeito que sobe e desce.
Return

A pergunta sobre o fader deslizante: Tem como fazer um comando com a tecla page down para descer de 1 em 1 e a tecla page up para subir de 1 em 1???

E sobre o botão que pode ser girado: ele começa do lado esquerdo e pode ser girado até o lado direito.

abraços e desculpem o e-mail longo demais.
meu contato pessoal 92994236781 se quiserem enviar whatsapp estou on line direto e gostaria muito desta ajuda para ajudar outros cegos também.
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

10 Feb 2020, 11:48

Bom dia Thomasmessi.

Quando lidamos com controles muito diferenciados não temos resposta pronta, pois o Windows é bastante permissivo para a criatividade dos programadores em criar controles diferenciados (é possível por exemplo até mesmo criar "botões" a partir de controles do tipo imagem (picture)). Então nesse caso, quando temos controles diferenciados, normalmente temos que seguir um passo-a-passo até encontrar um código que funcione bem para a interação que precisamos ter com o controle.

Este passo-a-passo pode ser assim: A primeira etapa é usar o WindowSpy para descobrir dados do controle (o WindowSpy é uma ferramenta embutida na instalação do AutoHotkey, e pode ser acessada clicando com o botão direito do mouse no ícone de H verde que fica no canto inferior-direito da tela quando qualquer script estiver em execução - pode ser necessário clicar na seta do tray para mostrar os ícones ocultos para ver o H verde).

:arrow: DICA: O WindowSpy possui uma opção "Follow mouse" que é muito útil: com ela você pode posicionar o mouse em cima de qualquer controle e ver alguns dados sobre ele, como ClassNN, o texto do controle e as coordenadas dele e etc. Também pode ver o título de uma janela. Todos esses parâmetros servem para usar nos comandos que interagem com o controle.

Dessa forma, com o ClassNN do controle e o título da janela do programa em mãos, por exemplo, o próximo passo será testar os comandos Control, ControlClick, ControlSend, ControlFocus, ControlSetText e ver que tipo de interação consegue com esses comandos e o controle (enviar um espaço através do ControlSend pode ativar um botão, por exemplo, e o comando Control possui várias possibilidades de interação a serem testatadas).

Depois, também vale a pena testar os comandos Click, MouseClick e MouseClickDrag com as coordenadas do controle e ver sempre que tipo de interações consegue com eles.

Após esses passos, você pode então escolher o(s) comando(s) que resultaram na(s) melhor(es) interação(ões) possível(is) com aquele controle e elaborar uma rotina de automação do controle com ele(s).

Sendo assim:
A pergunta sobre o fader deslizante: Tem como fazer um comando com a tecla page down para descer de 1 em 1 e a tecla page up para subir de 1 em 1???

E sobre o botão que pode ser girado: ele começa do lado esquerdo e pode ser girado até o lado direito.
Provavelmente sim, mas conforme descrito acima, somente a partir da análise do comportamento do controle e de quais comandos interagem com ele você poderá determinar como criar essa rotina.

Espero ter ajudado, se tiver alguma dúvida sobre algum dos comandos mencionados, pode postar abaixo.
thomasmessi
Posts: 51
Joined: 22 Dec 2019, 17:33

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

11 Feb 2020, 07:34

Olá nobre amigo. compreendi sim suas explanações.
E é com o spy que vou pegando a posição correta quando quero fazer um MouseClick.
É essa dificuldade que tenho, de quando saber e quando usar qual a melhor forma de aplicar cada parâmetro. Mas isso, se deve por eu ser apenas um curioso tentando fazer algo. Sem uma base devidamente estudada.

Vou colocar aqui embaixo um vídeo para você ter uma noção de como ter uma ideia e um norte para tentar me ajudar, se possível é claro.
direto do meu google drive
https://drive.google.com/file/d/1Lvc7_bS1GScniPRR4Aac-4hU8xjhFadI/view?usp=sharing


aqui os parâmetros da tela que estou tentando desenvolver o script:

Kontakt (x64 bridged)
ahk_class REAPERb32host
ahk_exe reaper_host64.exe
ahk_pid 3592


Screen: 126, 382 (less often used)
Window: 48, 304 (default)
Client: 40, 273 (recommended)
Color: 525B5F (Red=52 Green=5B Blue=5F)


ClassNN: NIVSTChildWindow00007FFAB1B300001
Text:
x: 8 y: 31 w: 664 h: 640
Client: x: 0 y: 0 w: 664 h: 640

;a posição window é a posição do botão knobi ou botão giratório que pretendo fazer girar com o comando de script

obrigado pela atenção
meu contato direto: 9299423-6781 whatsapp. Pode adicionarem e adoraria aprender mais e trocar informações.
e-mail: [email protected]
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

11 Feb 2020, 09:31

Bom dia Thomasmessi.

Bom, dá forma como expliquei acima talvez não tenha ficado claro: no caso de um controle diferenciado, não temos como saber de início o que vai (ou não) funcionar com ele. Por isso que disse que devemos iniciar a rotina com vários testes de vários comandos, analisando sempre o que ocorre quando executamos cada comando.

As vezes um comando Control com algum parâmetro específico NÃO funciona em um controle muito específico. O mesmo pode ocorrer com um ControlSend, um ControlSetText... Mas em contrapartida, as vezes um desses comandos (ou alguma variação de parâmetro) podem funcionar, e isso acontece porque o controle pode ter uma estrutura interna totalmente diferente de sua aparência (exemplo: ser um controle do tipo picture, mas parecer um botão, ou ser um controle do tipo slider e parecer um knobi).

É por isso que o ideal para controles desconhecidos é executar vários testes e tentar desvendar o que funciona para aquele controle no caso específico.

:arrow: Não posso fazer isso por aqui, você tem que fazer por aí mesmo, visto que ao programa mencionado somente você tem acesso. Portanto, tente interagir com esse controle a partir dos vários comandos disponíveis e veja se algum produz um resultado que possa ser aproveitado pelo seu script. Da forma como você explicou os controles (deslizantes e knobis) acredito que em últimos caso pelo menos o comando MouseClickDrag funcionará com alto grau certeza. Mas recomendo tentar os comandos Control antes, pois eles são bem mais confiáveis (o controle deslizante provavlemente é controle do tipo um slider, e o knobi possivelmente seja também, mas somente testando para ter certeza).
thomasmessi
Posts: 51
Joined: 22 Dec 2019, 17:33

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

11 Feb 2020, 14:08

Compreendi, tentativa erro e acerto.
Porém, não sei por onde começar.

aqui como estão atualmente o script

Alt & e::
MouseClick left, 48, 304
nvdaSpeak("reverb controle")
Return

;movimenta o mouse pra cima do botão que deve ser girado.


alt & s::
MouseClickDrag left, 290, 295, 290, 275
nvdaSpeak("aumenta agudo")
Return

;aqui consegui aumentar o volume deslizante

Vou deixar duas questões só em uma pergunta:

Se você tivesse uma alternativa mesmo que fosse pra usar a roda do mouse para girar este botão knobi quanl seria sua dica?

E nesse botão deslizante, o que sugeriria para deixar mais funcional. Como por exemplo apertando somente a tecla page up aumentaria o volume e apertando o page down iria diminuindo..

Obrigado pela atenção e boa tarde.
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

14 Feb 2020, 11:56

Bom dia Thomasmessi.
Compreendi, tentativa erro e acerto.
Porém, não sei por onde começar.
Você deve começar pelos comandos que indiquei (Control, ControlSend, ControlClick). Tente enviar sinais de espaço, de enter, cliques, números, sinais de tecla direcional, tente trocar o valor por um número qualquer como se fosse um edit, etc... Não há garantias de que qualquer dessas coisas funcione, mas as vezes isso funciona simplesmente porque internamente o controle adotou uma estrutura baseada em um edit ou outro tipo de controle interagível por código. E isso pode acontecer mesmo que sua aparência seja diferente. Por isso vale a pena tentar, pois os testes podem ser feitos de maneira rápida. Faça um script com um monte desses testes em várias hotkeys e vá testando e observando se algo muda. Você pode acabar descobrindo algo útil.

Também é possível fazer alguns testes com o comando SendMessage (a mensagem TBM_SETPOSNOTIFY por exemplo, cujo código é 0x422, serve para ajustar a posição de um slider do Windows). Mas como disse antes: o windows é muito permissivo para a criação de controles diferenciados, então quando o controle é claramente um controle diferenciado nós nunca temos certeza se o código vai funcionar sem testar nele. O SendMessage também pode enviar um sinal de movimento do mouse, então ele tem uma grande chance de funcionar.

No fim de tudo, se nada mais der certo, uma alternativa quase certa de funcionar é o MouseClickDrag, pois ele basicamente emula a ação de arrastar o mouse encima do controle (logo, se o controle é girado pelo usuário usando o mouse, o MouseClickDrag deve funcionar, pois é a mesma coisa). O ruim de usar o MouseClickDrag é que ele não é tão confiável se for implementado sozinho (por exemplo, se a tela estiver minimizada o comando não vai funcionar e o pior: pode ser que arraste algum ícone da sua área de trabalho ou faça outra coisa não desejada). Mas você pode usá-lo junto com uma condicional IfWinActive para resolver este problema e também colocar alguns outros códigos para melhorar a confiabilidade de outras formas.

Caso se veja forçado a adotar o MouseClickDrag, lembre-se que ele também serve para os knobis, pois via de regra o knobi tem um pequeno curso horizontal que pode ser repetido várias vezes (clica no ínicio do controle, arrasta para a direita até o fim, depois clica de novo no início do controle, arraste de novo pra direita até o fim...). Além disso, você também pode fazer uma espécie de movimento em quadrado dentro com o knobi usando 4 vezes o comando MouseClickDrag ou então criar uma função para calcular as posições de um movimento circular e alimentar vários chamados ao MouseClickDrag arrastando o mouse em círculo dentro do controle. As possibilidades são quase infinitas.
Se você tivesse uma alternativa mesmo que fosse pra usar a roda do mouse para girar este botão knobi quanl seria sua dica?
A roda do mouse pode ser emulada com o AutoHotkey também. No seu caso, visto que você não usa o mouse, eu simplesmente colocaria uma função para fazer um MouseClickDrag de pouco em pouco conforme eu apertasse alguma tecla (uma tecla movendo para a direita, outra para a esquerda). A função também salvaria a posição do último movimento e depois moveria a partir dali (para garantir que chamadas sucessivas mexessem o mouse corretamente).
E nesse botão deslizante, o que sugeriria para deixar mais funcional. Como por exemplo apertando somente a tecla page up aumentaria o volume e apertando o page down iria diminuindo..
Sim, essa seria uma boa ideia. Salves as posições finais do mouse na última chamada (usando variáveis) e depois utilize elas para que a próxima chamada arraste a partir daquela posição.

:arrow: Agora mudando um pouco o foco do problema: Eu vi no seu vídeo que você está usando um programado chamado Synthage para o Kontakt. Pesquisei um pouco a respeito e ele parece ser um programa pago desenvolvido por um brasileiro, e que esse programa ainda parece estar sendo atualizado constantemente pelo autor. Você já tentou entrar em contato com o autor, explicar a sua situação e pedir que ele permita mover os knobis com comandos de teclado na sua próxima atualização? Segue o contato que peguei em um vídeo de review no Youtube: Junior Porciúncula, WhatsApp (81) 99673-4180.
thomasmessi
Posts: 51
Joined: 22 Dec 2019, 17:33

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

14 Feb 2020, 14:17

sim é um programa pago sim. Porém, quem os desenvolve, não se importa com pessoas que não podem enxergar. Infelizmente! E nós, temos que arrumar métodos não tão convencionais e tentar algo diferente.
De qualquer forma, obrigado pela resposta!
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

14 Feb 2020, 16:53

Ok, adaptei duas funções para ajudar você a rotacionar os knobis. A primeira faz um movimento circular no sentido horário com o mouse pressionado e a segunda faz um movimento circular anti-horario com o mouse pressionado. Você pode definir qual a proporção do total da volta você quer que o mouse circule (pode ser meia volta, um quarto de volta, etc) e também o tamanho do circulo ajustando os parâmetros da função. Dessa forma, tudo que tem que fazer é achar uma coordenada XY que fique na parte de cima do knobi (porém dentro dele), o raio do botão knobi (em pixels) e a proporção de volta que quer mexer o knobi. O código bloqueia o mouse enquanto o movimento estiver sendo efetuado.

Código das funções e exemplo: No códigoe-exemplo abaixo as hotkeys F2 e F3 vão efetuar um movimento circular de meia-volta com raio 40 pixels em sentido horário (F2) e uma volta com raio 20 pixels em sentido anti-horário (F3):

Code: Select all

F2::
MouseGetPos, MouseX, MouseY
Circular_Horario(MouseX, MouseY, 40, 32)
Return

F3::
MouseGetPos, MouseX, MouseY
Circular_Antihorario(MouseX, MouseY, 20, 64)
Return

; X_Inicial: Posicao X Inicial
; Y_Inicial: Posicao Y Inicial
; Raio: Raio do círculo (em pixels). O Raio é a metade da langura (ou altura) máxima do círculo.
; Quantidade: 64 equivale a uma volta completa, logo, 32 seria meia volta, 16 seria um quarto de volta... 
Circular_Horario(X_Inicial, Y_Inicial, Raio, Quantidade)
{
	BlockInput, MouseMove
	Loop % Quantidade
	{
		X_A_Mover := Raio * Sin(A_Index / 10)
		Y_A_Mover := Raio * Cos(A_Index / 10) - Raio
		Proximo_X := X_Inicial + X_A_Mover
		Proximo_Y := Y_Inicial - Y_A_Mover
		MouseMove, %Proximo_X%, %Proximo_Y%, 
		MouseClick, Left, , , , 0, D
	}   
	MouseClick, Left
	BlockInput, MouseMoveOff
}
Return

; X_Inicial: Posicao X Inicial
; Y_Inicial: Posicao Y Inicial
; Raio: Raio do círculo (em pixels). O Raio é a metade da langura (ou altura) máxima do círculo.
; Quantidade: 64 equivale a uma volta completa, logo, 32 seria meia volta, 16 seria um quarto de volta... 
Circular_Antihorario(X_Inicial, Y_Inicial, Raio, Quantidade)
{
	BlockInput, MouseMove
	Loop % Quantidade
	{
		X_A_Mover := Raio * Sin(A_Index / 10)
		Y_A_Mover := Raio * Cos(A_Index / 10) - Raio
		Proximo_X := X_Inicial - X_A_Mover
		Proximo_Y := Y_Inicial - Y_A_Mover
		MouseMove, %Proximo_X%, %Proximo_Y%, 
		MouseClick, Left, , , , 0, D
	}   
	MouseClick, Left
	BlockInput, MouseMoveOff
}
Return
Acredito que você conseguirá facilmente usar as funções do código acima para automatizar o movimento dos knobis do programa.

:arrow: OBS: Estas funções foram adaptadas a partir do código postado pelo usuário jpjazzy que pode ser encontrado neste tópico.

Se tiver alguma dúvida, basta postar abaixo.
thomasmessi
Posts: 51
Joined: 22 Dec 2019, 17:33

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

25 Feb 2020, 05:07

Olá nobre colega Gio, espero que estejas tudo bem contigo!
Vou fazer os devidos testes e com certeza, postarei aqui os resultados.
Confesso que não sou de desistir de nada, mas tinha dado uma desanimada, mas vamos lá. Preciso continuar...
E desde já obrigado por não desistir deste pedido!
thomasmessi
Posts: 51
Joined: 22 Dec 2019, 17:33

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

25 Feb 2020, 13:40

Olá Gio, boa tarde!
Trago boas novas!
Bom, a princípio funcionou o controle, e o controle gira.
Porém, fiz um ajuste para testar e consegui ir diminuindo de 5 em 5 a posição, por exemplo: começa em 100 o parâmetro e vai decrrescendo de 5 em 5 apertando f2.
A cada vez que eu queira diminuir aperto alt & e e aperto f2 até eu chegar a 50 que é o mínimo.
Porém, o contrário não deu certo. Que é subir o valor, fazendo o sentido horário. O f3 está fazendo a mesma coisa que o f2.

aqui está o que eu modifiquei para baixar de 5 em 5.
Agradeço se puder dar uma opinião e onde pode ser melhorado



F2::
MouseGetPos, MouseX, MouseY
Circular_Horario(MouseX, MouseY, 10, 16)
Return

,apertando f2 nessas configurações vai descendo de 5 em 5 os parâmetros.

F3::
MouseGetPos, MouseX, MouseY
Circular_Antihorario(MouseX, MouseY, 10, 16)
Return

; X_Inicial: Posicao X Inicial
; Y_Inicial: Posicao Y Inicial
; Raio: Raio do círculo (em pixels). O Raio é a metade da langura (ou altura) máxima do círculo.
; Quantidade: 64 equivale a uma volta completa, logo, 32 seria meia volta, 16 seria um quarto de volta...
Circular_Horario(X_Inicial, Y_Inicial, Raio, Quantidade)
{
BlockInput, MouseMove
Loop % Quantidade
{
X_A_Mover := Raio * Sin(A_Index / 10)
Y_A_Mover := Raio * Cos(A_Index / 10) - Raio
Proximo_X := X_Inicial + X_A_Mover
Proximo_Y := Y_Inicial - Y_A_Mover
MouseMove, %Proximo_X%, %Proximo_Y%,
MouseClick, Left, , , , 0, D
}
MouseClick, Left
BlockInput, MouseMoveOff
}
Return

; X_Inicial: Posicao X Inicial
; Y_Inicial: Posicao Y Inicial
; Raio: Raio do círculo (em pixels). O Raio é a metade da langura (ou altura) máxima do círculo.
; Quantidade: 64 equivale a uma volta completa, logo, 32 seria meia volta, 16 seria um quarto de volta...
Circular_Antihorario(X_Inicial, Y_Inicial, Raio, Quantidade)
{
BlockInput, MouseMove
Loop % Quantidade
{
X_A_Mover := Raio * Sin(A_Index / 10)
Y_A_Mover := Raio * Cos(A_Index / 10) - Raio
Proximo_X := X_Inicial - X_A_Mover
Proximo_Y := Y_Inicial - Y_A_Mover
MouseMove, %Proximo_X%, %Proximo_Y%,
MouseClick, Left, , , , 0, D
}
MouseClick, Left
BlockInput, MouseMoveOff
}
Return

***para diminuir com F2 de 5 em 5 está perfeito, agora para aumentar de 5 em 5 também o que poderá ser feito?

mais uma vez sou muito grato!
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

25 Feb 2020, 16:15

Boa tarde Thomasmessi.

Fiz uma modificação na função Circular_Antihorario(). Ela agora deve fazer o exato caminho inverso da função Circular_Horario() (desde que ambas partam do mesmíssimo ponto!). Acredito que se o F2 funcionou, agora o F3 deve funcionar (pois é basicamente o mesmo movimento só que de trás pra frente).

Code: Select all

; X_Inicial: Posicao X Inicial
; Raio: Raio do círculo (em pixels). O Raio é a metade da langura (ou altura) máxima do círculo.
; Quantidade: 64 equivale a uma volta completa, logo, 32 seria meia volta, 16 seria um quarto de volta...
Circular_Antihorario(X_Inicial, Y_Inicial, Raio, Quantidade)
{
BlockInput, MouseMove
Loop % Quantidade
{
X_A_Mover := Raio * Sin((A_index - Quantidade) / 10)
Y_A_Mover := Raio * Cos((A_index - Quantidade) / 10) - Raio
Proximo_X := X_Inicial - X_A_Mover 
Proximo_Y := Y_Inicial - Y_A_Mover 
MouseMove, %Proximo_X%, %Proximo_Y%,
MouseClick, Left, , , , 0, D
}
MouseClick, Left
BlockInput, MouseMoveOff
}
Return

:arrow: Cabe destacar que dei uma olhada em alguns knobs em html e vi que o comportamento deles nem sempre é o mesmo. Alguns knobis só funcionam se você arrastar a partir de determinado ponto e alguns outros mudam o valor imediatamente para a posição onde você clicar. Se possível gostaria que fizesse um video demonstrando o código que está funcionando pra você em operação no Synthage (para que eu possa visualizar como esses knobis que você está interagindo entendem o clique inicial e o arraste do mouse).
thomasmessi
Posts: 51
Joined: 22 Dec 2019, 17:33

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

26 Feb 2020, 09:59

Olá Gio, aqui esta o video com minha tela e neste mesmo vídeo fiz alguns questionamentos e dúvidas!
Obrigado por sua atenção e disponibilidade!

https://drive.google.com/file/d/1sf7QMAreBpJRlZ29sP4hMVDmxyOC8zES/view?usp=sharing

Obs: Tens como me enviar um e-mail particular, preciso perguntar-lhe algo profissional por e-mail.



o meu e-mail de contato é: [email protected].

abraços
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

26 Feb 2020, 12:27

Bom dia Thomasmessi.

Assisti o vídeo que você enviou.

Em relação ao segundo botão (o que não está funcionando), percebi que a posição inicial do mouse em cima do botão está um pouco mais ao centro na imagem do botão, e isso pode explicar o porque de o movimento não estar acionando corretamente o botão.

Na imagem abaixo é possível ver o que acontece se o movimento circular se iniciar em um local diferente do botão: o movimento simplesmente deixa de se assemelhar a um giro.

POSICAO INICIAL DO GIRO.png
POSICAO INICIAL DO GIRO.png (14.76 KiB) Viewed 3154 times

Sobre a pergunta acerca de criar hotkeys com três teclas (tipo control + alt + j): por padrão só podemos criar hotkeys com até 2 teclas, mas existe uma forma de criar hotkeys com 3 teclas usando a condicional #If (não confundir com a versão sem #!).

Exemplo (hotkey com três teclas sendo Control esquerdo + alt + j):

Code: Select all

#if getkeystate("LControl","P")
Alt & j::
oVoice := ComObjCreate("SAPI.SpVoice")
oVoice.Speak("Você pressionou Control Alt J",0x0)
oVoice := ""
Return
#if

:arrow: Perceba no código acima que coloquei um comando #If sozinho ao final da rotina. Isso é necessário para que outras hotkeys escritas abaixo não sejam também condicionadas ao estado da tecla Control esquerda (o #If sozinho desliga o uso da condição nas hotkeys escritas a partir daquela linha). Outro ponto curioso: usando a mesma técnica seria teoricamente possível criar hotkeys com até mais teclas (4 ou mais) no entanto é importante destacar que a maioria dos teclados comuns não envia mais do que 3 sinais de teclas simultaneamente, portanto, hotkeys com 4 teclas em diante não vão funcionar em qualquer teclado. Esta limitação de hardware é conhecida como 3-key Rollover, portanto se você quiser usar hotkeys com 4 ou mais teclas, vai precisar de um teclado com a especificação n-key rollover.

Sobre a terceira pergunta (07:34): É possível fazer com que uma hotkey seja condicionada a uma tela específica estar ativa. Isso deve resolver para quando você estiver no reaper. Basta usar o condicional #IfWinActive (perceba que o símbolo # antes do nome do comando é importante! não confundir com a versão de comando sem esse símbolo!). Com esta condicional você poderá fazer com que uma ou mais hotkeys só funcionem se determinada tela estiver ativa (ou seja, somente se você estiver com a tela do Synthage ativa as hotkeys funcionarão, isso basicamente liberará o uso delas no outro programa).

:arrow: Uma dica: vi que você colocou uma hotkey para mover o mouse e outra hotkey para acionar o movimento. Se você quiser pode colocar apenas uma hotkey movendo o mouse e depois já executando o movimento logo em seguida.

:arrow: Outra dica: Vi que o F2 está aumentando em 5 o valor do botão e o F3 está baixando em 3. Não sei se foi de propósito, mas essa é uma combinação bastante interessante que você criou, pois com ela você pode aumentar ou diminuir em qualquer valor (incluindo 1) usando uma combinação de chamadas (por exemplo, para aumentar em 1 você aumenta 2x e depois diminui 1x).

Basicamente é isso, se esqueci de responder alguma dúvida basta postar abaixo :thumbup:
thomasmessi
Posts: 51
Joined: 22 Dec 2019, 17:33

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

02 Mar 2020, 07:51

olá Gio, bom dia.
Desculpe tanto tempo pra responder, tive alguns problemas pessoais por aqui.

Bom, nesse caso eu terei que fazer o mapeamento no centro do outro botão? ou na parte do topo? para que ele gire?
E aproveitando tenho uma outra questão?
eu tenho um menu com algumas opções:

01 cordas
02 bass
03 drums
04 effects

e eu tenho para cada opção o mapeamento da coordenada x, y que aciona esta opção. Mas para evitar de para cada opção uma hot key e muitos e muitos atalhos . Este menu facilitaria, quando ele fosse aberto, escolher a opção e apertar enter e acionar o ítem escolhido.

tenho isto:


#NoEnv
#SingleInstance, force
SetBatchLines, -1

!^+c:: ; alt-control-shift-c
Gosub, ChannelMenu
Return

!^+d:: ; alt-control-shift-d
InputBox, instrumentos, escolha de instrumentos, Escolha o canal (digite o numero)
If ErrorLevel
{
Return
}
If Channel is not number
{

Return
}
Send {Appskey}
Sleep 100 ; give the context menu some time to appear
Send {down %Channel%}
Return



ChannelMenu:
Menu, MyChannelMenu, Add
Menu, MyChannelMenu, DeleteAll
Menu, MyChannelMenu, Add, 01 strings, MyChannelMenuHandler
Menu, MyChannelMenu, Add, 02 bass, MyChannelMenuHandler
Menu, MyChannelMenu, Add, drums, MyChannelMenuHandler
Menu, MyChannelMenu, Add, effects, MyChannelMenuHandler
Menu, MyChannelMenu, Show
Return

MyChannelMenuHandler:
Send {Appskey}
Sleep 100 ; give the context menu some time to appear
Send {down %A_ThisMenuItemPos%}
Return

a hot key com a letra c abre o menu e com a seta posso navegar pelas opções e o que eu gostaria é ao escolher alguma apertar a tecla enter e o click ir na coordenada do mapeamento a que se refere. Exemplo (01 strings_ MouseClick left, 250, 250 Ao clicar com o enter o click acionaria a opção 01 strings.

Com a hot key D é um menu onde gostaria de digitar o número da opção e ao clicar o enter pudesse ir clicar na opção desejada.

Isso seria muito complicado para um aprendiz como eu fazer.Lembrando que este menu já me foi orientado por um outro amigo do fórum.
muito obrigado pela atenção

abraços e boa semana!
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Existe essa possibilidade para botões virtuais giratórios e deslizantes?

05 Mar 2020, 09:17

Bom dia Thomasmessi.
Bom, nesse caso eu terei que fazer o mapeamento no centro do outro botão? ou na parte do topo? para que ele gire?
O ideal é que seja na parte de cima do botão, porém ainda dentro dele. É como se fosse a posição do número doze dentro de um relógio com ponteiros. Esta é a melhor posição para que o movimento circular gire o botão.

:arrow: Sobre a questão dos menus, peço que abra outro tópico, pois este refere-se à dúvida dos botões.

Se ainda tiver alguma dúvida em relação aos botões, pode postar abaixo :thumbup:

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 9 guests