Acessibilidade [2] - Tato - Movimentos do Mouse (Parte 1)

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

Moderator: Gio

VadoJMS
Posts: 28
Joined: 20 Oct 2017, 17:36

Acessibilidade [2] - Tato - Movimentos do Mouse (Parte 1)

27 Apr 2018, 04:44

Bom dia.

O usuário deguix criou um script maravilhoso que possibilita movimentar o cursor do mouse através de algumas teclas do teclado.
Esse script ajuda muito quem não pode ficar movimentando o mouse o tempo todo, além de ser mais confortável em determinados programas.
Ao longo do tempo foi necessário fazer algumas alterações, como por exemplo nas teclas que originalmente são do teclado numérico.
Até aí, tudo bem, no entanto existem alterações relacionadas ao script que eu não consegui realizar sozinho e por isso vou elencá-las.

Adendo: tem mais uma outra alteração que por ser MUITO IMPORTANTE e complexa vou reservar uma pergunta no fórum exclusiva para ela sobre o título Movimentos do Mouse (Parte 2).

[1] • SCRIPT FUNCIONAR SEM A NECESSIDADE DE UM MOUSE FÍSICO CONECTADO AO PC

Infelizmente o script só funciona se um mouse físico estiver conectado ao computador. O que é decepcionante, pois a intenção é substituí-lo.
Chega até a ser engraçado, de tão frustrante, possuir um mouse conectado ao PC que não é utilizado para nada, apenas para que o script funcione.

[2] • SUBSTITUIR TECLA ESPECÍFICA - SCROLLLOCK

Na minha opinião, um script que ficará constantemente em uso não pode depender de uma tecla que deixa a luzinha do teclado acesa o tempo todo.
Além de ser uma tecla descolada das demais, o ScrollLock ativado possui função específica em determinados softwares o que acaba inviabilizando o uso do script.
Uma tecla neutra seria o ideal, mas como não existe entendo que a combinação de teclas é o mais viável.
Pensei em Tecla Windows Esquerda + Tecla “ç” para ativar/desativar o script.

[3] • SUBSTITUIR TECLA ESPECÍFICA - NUMLOCK

- SUBSTITUIÇÃO

O NumLock, assim como o ScrollLock é uma tecla que envolve mais complexidade para alterar, mas ao contrário do ScrollLock o NumLock executa funções mesmo desativado.
Isso acaba gerando confusão durante o uso no dia a dia. O primeiro subitem desse item é “substituição”, pois inicialmente eu gostaria de aprender a substituí-lo por outra tecla.
De novo, eu acho que uma combinação de teclas não usuais seria o ideal, como Tecla Control Esquerda + “ç” para cumprir o papel desempenhado pelo NumLock.
Com o NumLock desativado é possível fazer os movimentos, ativado, as teclas funcionam como reguladoras da velocidade e do ângulo do cursor do mouse.
Ao meu ver bastaria o script já iniciar com os movimentos e ao clicar Tecla Control Esquerda + “ç” as teclas funcionariam como reguladoras da velocidade e do ângulo do mouse.
Como já faz o NumLock ativado, atualmente.

- ABOLIÇÃO

O segundo subitem desse item é “abolição”, pois quando eu concluir o projeto do Script Supremo (Fórum AutoHotKey, Outras utilidades e recursos).
Acredito que não será mais necessário ficar alterando a velocidade do mouse ou o ângulo.
Por isso eu gostaria de saber também uma forma de abolir essas funcionalidades da tecla NumLock ativada sem prejudicar as outras funções do script.
Deixando configurado como padrão:
Mouse acceleration speed = 1, mouse speed = 1, mouse maximum speed = 5 e mouse rotation angle 0° para mim está ótimo. Não precisa de atalho para ficar mudando.
Ou seja, dispensar totalmente a utilização do NumLock no script, pois eu não precisaria apertá-lo para movimentar as teclas. Essa função já viria ativa.
E como futuramente eu não vou necessitar ficar mudando o ângulo e a velocidade dos movimentos do mouse, também não seria necessária o uso do NumLock desativado.
Nem mesmo a combinação Tecla Control Esquerda + “ç” citada no subitem acima. Adeus NumLock! :wave: :dance:

[4] • ADICIONAR FUNÇÕES DE MOUSES COM BOTÕES EXTRAS

- SCROLL DO MOUSE ESQUERDA E DIREITA

Há mouses que têm uns botõezinhos para controlar (quando na horizontal) a barra de rolagem para esquerda e para a direita.
No script já vem padrão o controle do scroll do mouse para cima e para baixo. Eu gostaria de incrementar teclas que controlem a barrinha quando estiver na horizontal também.

- MANTER PRESSIONADO

A trava no clique permite destacar ou arrastar itens sem ter de manter o botão do mouse pressionado.
O problema é que da forma padrão, disponível em “Propriedades de Mouse”, é ruim, pois é necessário manter pressionado por um segundo e depois soltar.
No uso do cotidiano isso fica muito irritante.
O Windows fornece funcionalidades similares, porém de modo inferior ao script do deguix, na minha opinião. No quesito de usar o teclado numérico para mover o mouse.
Lá a tecla zero do teclado numérico “Insert key” desempenha essa função de manter pressionado.
O ponto negativo é que eles atribuíram a outra tecla a função de “despressionar”.
Quero adicionar essa função de manter pressionado no script e utilizar o mesmo botão para “despressionar” também.
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Acessibilidade [2] - Tato - Movimentos do Mouse (Parte 1)

27 Apr 2018, 16:24

Boa Tarde VadoJMS.
SCRIPT FUNCIONAR SEM A NECESSIDADE DE UM MOUSE FÍSICO CONECTADO AO PC
Não conhecia ainda este script. Vejo que é bem antigo. Acredito que o fato de ele não funcionar sem um mouse físico pode ter a ver com algumas checagens e condicionais atreladas à lógica do script do Deguix, pois ele faz algumas checagens ao estado físico dos botões do mouse usando o comando GetKeyState.

De qualquer forma é fácil saber se o problema está no código do script. Execute o código abaixo. Aperte F2 para mover o mouse um pouco à diagonal inferior-direita. Depois, aperte F3 para mover o mouse à um pouco à diagonal superior-esquerda. Se o script funcionar com o mouse desconectado, é porque a necessidade do mouse físico está sim atrelada à lógica do script do Deguix.

Code: Select all

F2::
CoordMode, Mouse, Screen
MouseGetPos, X_atual, Y_atual
Novo_X := X_Atual + 50
Novo_Y := Y_Atual + 50
MouseMove, Novo_X, Novo_Y, 10
return

F3::
CoordMode, Mouse, Screen
MouseGetPos, X_atual, Y_atual
Novo_X := X_Atual - 50
Novo_Y := Y_Atual - 50
MouseMove, Novo_X, Novo_Y, 10
return
Como disse, se o script acima funcionou, o a necessidade do mouse físico está implementada no código do script. Sendo assim, basta estudar o código e corrigir o que precisa ser corrigido (caso deseje).
SUBSTITUIR TECLA ESPECÍFICA - SCROLLLOCK
Para fazer isso basta substituir todas as referências à tecla scroll lock por referências à outra tecla. Isso pode ser feito utilizando a ferramenta de substituição no seu editor de texto (se for o bloco de notas, está dentro do menu editar -> substituir....

:arrow: Nas referências em forma de hotkey, o botão windows é identificado pelo símbolo #. Não sei se o cedilha funcionará sem a referência ao Scan Code (ou Virtual Key code), pois é uma tecla específica dos teclados latinos. Para fazer uma hotkey Windows+Z, basta usar #z como o nome da hotkey. Para pesquisar os códigos Scan Code e Virtual Key (se quiser usar o cedilha), você deve executar um script com o comando #InstallKeybdHook (este comando não tem parâmetros), depois clicar com o botão direito no ícone em forma de H verde que aparece na bandeja no canto inferior-direito da tela, depois escolher Open -> View -> Key History.

A tela que se abre vai manter uma lista de todas as teclas que você pressionar. Para atualizar a lista, basta apertar F5. Veja que cada entrada na lista contém o nome da tecla e também os códigos VK e SC. No meu caso o cedilha tem o código Vk BA (pode ser que no seu computador seja outro código). Isso quer dizer que uma hotkey com o cedilha seria assim chamada (já com os sinais de dois pontos): VkBA:: e uma hotkey Windows+Cedilha seria #VkBA::.
SUBSTITUIR TECLA ESPECÍFICA - NUMLOCK
Mesma coisa do item acima. Control+cedilha seria Control & VkBA:: no caso do meu teclado (é preciso usar o & porque nos referimos ao control através da palavra).
Por isso eu gostaria de saber também uma forma de abolir essas funcionalidades da tecla NumLock ativada sem prejudicar as outras funções do script.
Basta implementar uma condicional que cheque uma variável logo no início da hotkey. Ou então você pode usar o comando Hotkey para desabilitar as hotkeys que tenham sido criadas através desse comando.
ADICIONAR FUNÇÕES DE MOUSES COM BOTÕES EXTRAS
Crie novas hotkeys e atrele às funções desses botões. Além do teclado, também há um comando de hook para o mouse, chamado InstallMouseHook. Use os mesmos passos que usamos para encontrar o Vk do cedilha para encontrar os Vks dos botões do mouse. Depois, é só criar as hotkeys que adequadas.
VadoJMS
Posts: 28
Joined: 20 Oct 2017, 17:36

Re: Acessibilidade [2] - Tato - Movimentos do Mouse (Parte 1)

28 Apr 2018, 12:06

Boa tarde, Gio.

[1] • SCRIPT FUNCIONAR SEM A NECESSIDADE DE UM MOUSE FÍSICO CONECTADO AO PC
Execute o código abaixo. Aperte F2 para mover o mouse um pouco à diagonal inferior-direita. Depois, aperte F3 para mover o mouse à um pouco à diagonal superior-esquerda. Se o script funcionar com o mouse desconectado, é porque a necessidade do mouse físico está sim atrelada à lógica do script do Deguix.
Fiz o teste que você pediu e acabei descobrindo algo interessante. Seu script também não funcionou, pois assim que o mouse é desconectado do PC o cursor do mouse some.
Tentei, tentei e nada. Tive a ideia de usar um dongle antigo que fazia parte de um kit de teclado e mouse Bluetooth (já foram descartados para a reciclagem).

Assim que o dongle foi plugado no PC o cursor do mouse apareceu na tela e os dois scripts funcionaram normalmente (sem nenhum mouse, só com o dongle).
Mesmo assim não quero ficar dependendo do dongle plugado ao PC para usar o scritpt. Será que é alguma configuração no Windows que deve ser feita?

[2] • SUBSTITUIR TECLA ESPECÍFICA - SCROLLLOCK

Eu já possuo o script KeyHistory, que identifica a tecla ao pressioná-la. Escolhi “ç” exatamente por ser uma tecla específica dos teclados latinos.
Assim não corre o risco de coincidir com o atalho de outro programa. O AutoHotKey aceita a tecla “ç” normalmente como qualquer outra, pelo menos nesse script.
Eu também já conheço a função de substituir no editor de texto. O que fica implícito quando fiz a pergunta:
Ao longo do tempo foi necessário fazer algumas alterações, como por exemplo nas teclas que originalmente são do teclado numérico.
Até aí, tudo bem, no entanto existem alterações relacionadas ao script que eu não consegui realizar sozinho e por isso vou elencá-las.
Eu já utilizo os atalhos “Control + f” e “Control + h” para localizar uma palavra específica ou substituir, tanto que eu já substitui quase todas as teclas originais do script.
Mesmo assim obrigado pela dica. O que eu não consigo substituir de forma alguma é a tecla ScrollLock e NumLock. Inclusive eu já tinha dito isso:
[3] • SUBSTITUIR TECLA ESPECÍFICA - NUMLOCK

- SUBSTITUIÇÃO

O NumLock, assim como o ScrollLock é uma tecla que envolve mais complexidade para alterar [...]
Dá erro e eu ainda não tenho conhecimento o suficiente para conseguir substituir sozinho. Mesmo após muitas tentativas. Por isso estou recorrendo ao fórum.

[4] • ADICIONAR FUNÇÕES DE MOUSES COM BOTÕES EXTRAS
Há mouses que têm uns botõezinhos para controlar [...]
Eu não tenho esse tipo de mouse, eu só quis dizer que eu sei que existem deles por aí. Então não dá para localizar o botão específico por meio de comandos, pois eu não tenho.
No que diz respeito a barra de rolagem na horizontal eu encontrei na lista de nomes de hotkeys “WheelLeft” e “WheelRight” acho que elas fazem exatamente o que eu desejo.
Só que eu não sei implementar no script. :oops:

Sobre “manter pressionado” basta deixar uma tecla com essa função.
Clico nela → mantém o mouse pressionado.
Clico novamente → “despressiona”.

Eu não estou conseguindo fazer nada além do que já fiz. Minha dificuldade no inglês dificulta as coisas mais ainda.
Tudo que eu faço tá incorreto e minhas alterações dão erro. :cry: :(
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Acessibilidade [2] - Tato - Movimentos do Mouse (Parte 1)

02 May 2018, 09:45

Bom dia VadoJMS.
VadoJMS wrote:[1] • SCRIPT FUNCIONAR SEM A NECESSIDADE DE UM MOUSE FÍSICO CONECTADO AO PC
(...)
Fiz o teste que você pediu e acabei descobrindo algo interessante. Seu script também não funcionou, pois assim que o mouse é desconectado do PC o cursor do mouse some.
(...)
Será que é alguma configuração no Windows que deve ser feita?
Estranho, o mouse sumir não é o comportamento típico de um PC ou Notebook. Parece mais o comportamento de um tablet. De qualquer forma, pesquisei um pouco e descobri este tópico em outro fórum na internet.

Tente implementar algumas das soluções elencadas:
  • 1. Segure o botão Windows e aperte a tecla R no seu teclado. Isso deve abrir a tela de execução. Insira ms-settings:tabletmode e aperte o botão OK. Na página que se abre, selecione a opção do modo desktop e depois não perguntar e não mudar.
  • 2. Segure o botão Windows e aperte a tecla R no seu teclado. Isso deve abrir a tela de execução. Insira control access.cpl e aperte o botão OK. Na página que se abre, selecione Facilitar o uso do Mouse e depois Ativar as teclas do Mouse.
  • 3. Verifique as condições de habilitação das teclas do Mouse e coloque tudo em ativar (por exemplo, se for necessário apertar NUMLOCK para ativar, aperte).
  • 4. Quando as teclas estiverem funcionando, tente desplugar o mouse e veja se o cursor some.
[2] • SUBSTITUIR TECLA ESPECÍFICA - SCROLLLOCK

(...)
O que eu não consigo substituir de forma alguma é a tecla ScrollLock e NumLock.
(...)
Dá erro e eu ainda não tenho conhecimento o suficiente para conseguir substituir sozinho. Mesmo após muitas tentativas. Por isso estou recorrendo ao fórum.
Bom, para substituir essa tecla no script que você postou, se a substituição automática não funcionou, você deve fazer a substituição linha a linha, estudando o código e substituindo as referências conforme deva ser feito em cada caso. Nós estamos falando de um script de mais de 700 linhas que você quer atualizar. Isso não é tão simples assim, principalmente se não foi você quem programou.

Para atualizar o código de qualquer programa já escrito, convém conhecer a lógica dele antes. Isso signfica basicamente estudar o script. É possível que o programador tenha se utilizado de várias técnicas diferentes para implementar as funcionalidades requeridas. Vejo por exemplo, que o script usa muito o comando Hotkey, além de criar algumas hotkeys usando :: (esses dois tipos de hotkeys têm algumas particularidades). Além disso, da linha 156 até a linha 240 tem uma rotina atrelada à tecla ScrollLock que:
  • 1. Espera você soltar a tecla.
  • 2. Verifica o estado da tecla ScrollLock (o valor T, que significa Toggle, no parâmetro MODO do comando GetKeyState, é uma opção que nem toda tecla possui. Essa opção é exclusiva das teclas que "ativam" ou "desativam". As teclas normais só permitem a opção "P" - ou nenhuma opção). Somente este item já revela o porque que a substituição automática pode não ter funcinado.
  • 3. Implementar uma condicional sobre o resultado do item anterior. Se descobre que o estado da tecla ScrollLock é "D" (ou seja, ligado, em virtude do modo T), a rotina implementa uma série de chamadas ao comando Hotkey para ligar as hotkeys de NumPad. Já se descrobre que o estado não é D (ou seja, está desligado, em virtude do modo T), a rotina implementa uma série de chamadas ao comando Hotkey para desligar as hotkeys de NumPad.
A situação acima foi só um exemplo. É lógico que o script não tem somente esta rotina, então cada rotina tem que ser estudada para sabermos exatamente como funciona este programa. Por isso, analisar um programa requer um conhecimento um pouco mais avançado do que escrever um programa. Quando você se propõe a analisar um programa, você se propõe a analisar toda e qualquer coisa que outra pessoa pode ter escrito naquela linguagem. Já quando você vai escrever, você pode se utilizar apenas de um pequeno grupo de conhecimentos sobre a linguagem que você detém e ainda assim escrever o programa (afinal, você tem a liberdade de fazer do seu jeito, com as ferramentas que você já conhece).

Eu sugiro portanto que se estiver muito difícil para você analisar este programa, tente escrevê-lo você mesmo do zero. Divida a tarefa grande em várias tarefas pequenas e vá implementando-as aos poucos. Assim, se tiver alguma dúvida, também será mais fácil tirá-las (visto que quem for lhe ajudar não precisa explicar muita coisa de uma vez). Cabe destacar também que quanto mais scripts você escrever, mais seu conhecimento aumentará, até um ponto em que será mais fácil analisar programas escritos por outras pessoas.
[4] • ADICIONAR FUNÇÕES DE MOUSES COM BOTÕES EXTRAS
Há mouses que têm uns botõezinhos para controlar [...]
Eu não tenho esse tipo de mouse, eu só quis dizer que eu sei que existem deles por aí. Então não dá para localizar o botão específico por meio de comandos, pois eu não tenho.
No que diz respeito a barra de rolagem na horizontal eu encontrei na lista de nomes de hotkeys “WheelLeft” e “WheelRight” acho que elas fazem exatamente o que eu desejo.
Só que eu não sei implementar no script. :oops:
WheelLeft e WheelRight são nomes de teclas que você pode enviar com o comando Send (ou outros comandos do tipo). Por exemplo, execute o script abaixo. Depois, abra o bloco de notas e escreva uma linha muito longa (de modo que apareça uma barra horizontal na tela do bloco de notas). Agora aperte F2 e F3. Veja que a barra horizontal rola para a direita ou para a esquerda quando você faz isso.

Code: Select all

f2::Send {WheelLeft}
f3:: Send {WheelRight}
Sobre “manter pressionado” basta deixar uma tecla com essa função.
Clico nela → mantém o mouse pressionado.
Clico novamente → “despressiona”.

Eu não estou conseguindo fazer nada além do que já fiz. Minha dificuldade no inglês dificulta as coisas mais ainda.
Tudo que eu faço tá incorreto e minhas alterações dão erro. :cry: :(
Essa funcionalidade de "manter pressionado" atrelada a uma tecla que não tem modo Toggle vai requerer que você crie um código para simular esse estado (o que talvez não fosse necessário em uma tecla com modo Toggle no script em questão). Por exemplo, no script abaixo eu faço com que a tecla F2 simule um estado Toggle, de modo que apertando uma vez, a hotkey F3 se ativa indefinidamente e apertando novamente F2, a hotkey F3 se desliga indefinidamente. Fiz isso usando uma variável e algumas condicionais.

Code: Select all

Var1 := 0

F2::
If (Var1 = 1)
{
	Var1 := 0
	ToolTip
}
else
{
	Var1 := 1
}
return


F3::
If (Var1 = 1)
{
	ToolTip, Esta hotkey está ativa`, por isso essa mensagem aparece.
}
Return
VadoJMS
Posts: 28
Joined: 20 Oct 2017, 17:36

Re: Acessibilidade [2] - Tato - Movimentos do Mouse (Parte 1)

03 May 2018, 12:53

Boa tarde, Gio.

SCRIPT FUNCIONAR SEM A NECESSIDADE DE UM MOUSE FÍSICO CONECTADO AO PC
Gio wrote: Tente implementar algumas das soluções elencadas:
Não houve êxito com nenhuma das sugestões. :(
Só aparece o cursor do mouse ao plugar o mouse físico ou um dongle ao PC.
E olha que estou usando desktop (um computador comum de mesa com monitor, gabinete e periféricos).

SCROLL LOCK & NUMLOCK

NumLock e ScrollLock de fato são teclas mais complexas para serem substituídas e merecem uma atenção especial.

WHEELLEFT & WHEELRIGHT

WheelLeft e WheelRight fazem exatamente o que eu quero. Adicionei ao script e elas estão movimentando a barra para a esquerda e direita na horizontal.
Dependendo da linha em que eu as colocava, no script, apresentava um erro ao executá-lo.
Até uma função simples assim merece uma melhor avaliação antes de ser aplicada com os outros códigos.
Eu consegui o que queria, no entanto mesmo com o ScrollLock desativado elas continuam desempenhando a função que deveria ser acionada apenas com o ScrollLock ativo.
Como eu já venho constatando e você mesmo salientou na sua última resposta. O script dele possui certas particularidades vinculadas as teclas.
Tornando a substituição ou adição de comandos uma tarefa mais trabalhosa.

MANTER PRESSIONADO

Com o seu exemplo acredito ter compreendido o conceito do modo Toggle. Incrementar no script que é o problema.
Vou tentar fazer isso com a tecla correspondente ao botão direito do mouse. Como ela é mencionada diversas vezes já pressinto o sufoco. Hahaha (rindo de nervoso).
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Acessibilidade [2] - Tato - Movimentos do Mouse (Parte 1)

03 May 2018, 17:37

VadoJMS wrote:SCRIPT FUNCIONAR SEM A NECESSIDADE DE UM MOUSE FÍSICO CONECTADO AO PC
(...)
Não houve êxito com nenhuma das sugestões. :(
Só aparece o cursor do mouse ao plugar o mouse físico ou um dongle ao PC.
E olha que estou usando desktop (um computador comum de mesa com monitor, gabinete e periféricos).
Bom, procurei um pouco mais e realmente esse parece ser um problema que está afetando alguns usuários, principalmente no Windows 10. Tem a ver com o fato de que os programadores do Windows 10 acharam por bem decidir que se você não tem um mouse físico conectado, você provavelmente está tentando usar outro meio de interação, como o toque de tela, e como o ponteiro do mouse seria um atrapalho nesse caso, ele deveria ser escondido.

Também não concordo com essa forma de ver as coisas, mas como eles decidiram fazer assim, o jeito é procurar uma saída. Vi muitas possibilidades de solução diferente, desde atualizar o Windows até desativar a Cortana. Infelizmente é algo que não posso testar para indicar qual solução vai funcionar para você.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 25 guests