Olá, boa tarde,
Sou novo nessa comunidade, e gostaria de criar uma função que ao clicar um conjunto de teclas, por exemplo "Ctrl+Q" buscasse uma sequência de caracteres, no caso a sequência seria ": " (dois pontos+espaço), e gostaria que a digitação fosse posicionado logo após essa sequência.
Alguém poderia me ajudar a como começar?
Desde já agradeço pela atenção
Função para buscar uma sequencia de caracteres e posicionar a digitação após
Moderator: Gio
Re: Função para buscar uma sequencia de caracteres e posicionar a digitação após
Bom dia Gumapira.
Você pode fazer isso usando enviando alguns sinais de atalhos de teclado, o clipboard e depois enviando uma quantidade calculada de comandos de teclas de seta (esquerda, direita, etc).
OBS: O código abaixo faz uso do clipboard (copiar e colar). Portanto, se você tiver algo importante copiado no ctrl+c, saiba que vai perder a cópia quando rodar a rotina.
Não posso garantir que o código acima vá funcionar em todo e qualquer editor de texto ou campo de edição de texto, mas pelos meus testes, deve funcionar na maioria. O código também está sempre supondo que você o acionou em um campo de edição de texto, portanto, não o acione se não estiver em um lugar desses. Outra coisa importante: no código acima a preferência será sempre do PRIMEIRO resultado encontrado (ou seja, o que estiver mais acima no texto). Você pode mudar isso se quiser alterando o código (este aqui é só um exemplo).
Você pode fazer isso usando enviando alguns sinais de atalhos de teclado, o clipboard e depois enviando uma quantidade calculada de comandos de teclas de seta (esquerda, direita, etc).
OBS: O código abaixo faz uso do clipboard (copiar e colar). Portanto, se você tiver algo importante copiado no ctrl+c, saiba que vai perder a cópia quando rodar a rotina.
Code: Select all
SetKeyDelay, -1 ; Começamos definindo que o comando Send não tenha qualquer espera entre os envios de sinais de tecla.
^q::
ClipBoard := "" ; Primeiro, esvaziamos o clipboard.
Send {ctrl down}ac{ctrl up}{right} ; Depois, utilizamos o atalho ctrl+A para selecionar todo o texto e depois ctrl+c para copiar todo o texto, e por fim enviamos um sinal de tecla de seta direita para garantir que o caret seja posicionado NO FINAL do texto.
ClipWait, 2 ; Então esperamos até 2 segundos para que o clipboard receba os dados da cópia do texto.
TEXTO_COPIADO := Clipboard ; E depois colocamos o texto copiado em uma variável do script para poder trabalhar em cima dele.
Clipboard := "" ; E então apagamos o clipboard.
POSICAO_DESEJADA := InStr(TEXTO_COPIADO, ": ") ; Iniciamos encontrando a posição da sequência ": " usando um chamado à função embutida InStr()
TEXTO_POSTERIOR := SubStr(TEXTO_COPIADO, POSICAO_DESEJADA) ; Agora, isolamos e copiamos todo o texto que estiver APÓS essa posição.
StringSplit, CRLF_, TEXTO_POSTERIOR, `n ; Daí, descobrimos quantas linhas temos após essa posição, pois isso influenciará a quantidade de sinais de tecla de seta à esquerda que teremos que enviar.
MOVIMENTOS := StrLen(TEXTO_COPIADO) - POSICAO_DESEJADA - CRLF_0 ; Então calculamos a quantidade de movimentos de seta à esquerda necessária para posicionar o caret naquela posição. O cálculo envolve o total de caracteres do texto inteiro, menos a posição da expressão ": " e menos o total de linhas após a posição da expressão ": ".
If (POSICAO_DESEJADA > 0) ; Então se a posição desejada tiver sido encontrada (o que saberemos através da variável conter uma posição diferente de 0).
{
Send {left %MOVIMENTOS%} ; Enviamos a quantidade calculada de sinais de tecla de seta esquerda para chegar na posição desejada.
}
Return
Não posso garantir que o código acima vá funcionar em todo e qualquer editor de texto ou campo de edição de texto, mas pelos meus testes, deve funcionar na maioria. O código também está sempre supondo que você o acionou em um campo de edição de texto, portanto, não o acione se não estiver em um lugar desses. Outra coisa importante: no código acima a preferência será sempre do PRIMEIRO resultado encontrado (ou seja, o que estiver mais acima no texto). Você pode mudar isso se quiser alterando o código (este aqui é só um exemplo).
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey