Resolução de Problemas em Geral
Hotkeys, Hotstrings e Remapeamento de teclas
Aspas duplas (") têm significado especial somente quando estão dentro de expressões. Em todos os demais lugares, elas são tratadas literalmente como se fossem caracteres normais. Entretanto, quando um script executa um programa ou documento, o sistema operacional geralmente exige aspas em volta de quaisquer parâmetros da linha de comando que contenha espaços, como neste exemplo: Run, Notepad.exe "C:\Meus Documentos\Lista de Endereços.txt"
.
Nomes de variáveis são sempre envoltos em sinais de porcentagem exceto nos casos ilustrados em negrito abaixo:
StringLen, OutputVar, InputVar
Var = 123abc
If Var1 < %Var2%
If (Var1 <> Var2) Var1 := Var2 + 100
Para explicações mais detalhadas de como usar os sinais de porcentagem, veja Sintaxe Legada e Variáveis Dinâmicas. Sinais de porcentagem também podem ter outros significados:
`%
) e sinais de porcentagem dentro de strings literais entre aspas não têm significado especial (eles são interpretados como sinais de porcentagem literais).Sinais de porcentagem literais devem ser escapados precedendo-os com um acento grave (backtick). Por exemplo: MsgBox A porcentagem atual é de 25`%.
Vírgulas literais também devem ser escapadas (`,
) exceto quando usados dentro de MsgBox ou como último parâmetro de qualquer comando (caso em que o acento é permitido mas não necessário).
Quando vírgulas ou sinais de porcentagem estão entre aspas dentro de uma expressão, o acento é permitido mas não necessário. Por exemplo: Var := "15%"
.
Erro do 7-zip: Use o 7-zip ou um programa compatível para extrair os arquivos de instalação do EXE de instalação, daí execute o arquivo setup.exe ou Installer.ahk (arraste e solte o Installer.ahk sobre o AutoHotkeyU32.exe).
O instalador do AutoHotkey vem empacotado em um arquivo 7-zip que se extrai automaticamente e que tenta extrair o conteúdo para o diretório Temp do usuário e executar um script compilado. Algumas vezes as políticas do sistema ou outros fatores impedem arquivos de serem extraídos ou executados. Normalmente nestes casos a mensagem "Erro do 7-zip" é exibida. Extrair manualmente os arquivos para um diretório diferente pode ajudar.
Travamentos na instalação: Se a janela de instalação aparece em branco ou nem aparece, tente uma ou ambas as soluções a seguir:
setup.exe /S
ou AutoHotkeyU32.exe Installer.ahk /S
.Outros problemas: As sugestões acima cobrem a maior parte dos problemas. Para mais assistência, poste nos fóruns.
Normalmente se o AutoHotkey está instalado, clicar com o botão direito num script do AutoHotkey (arquivo .ahk) deve apresentar as opções a seguir:
Algumas vezes essas opções são sobrescritas por configurações do perfil do usuário atual, como se Abrir Com tivesse sido usada para mudar o programa padrão para abrir arquivos .ahk. Para consertar isso, delete esta chave de registro:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ahk\UserChoice
Isso pode ser feito aplicando-se este patch do registro.
Também pode ser necessário restaurar os valores padrão do registro, seja reinstalando o AutoHotkey ou executando seu setup (a partir do Menu Iniciar) e selecionando aplicar perto do topo da janela.
Quaisquer linhas que você quiser que sejam executadas imediatamente quando o script inicia devem vir no começo do script, antes da primeira hotkey, hotstring ou Return. Para detalhes, vide seção de autoexecução.
Do mesmo modo, uma hotkey que executa mais que uma linha deve ter sua primeira linha debaixo da hotkey, não na mesma linha. Por exemplo:
#space:: ; Win+Espaço Run Notepad WinWaitActive Sem título - Bloco de Notas WinMaximize return
Há algumas variações desse problema, tais como:
Se você mudou de sistema operacional, é provável que algo mais mudou e que está afetando seu script. Por exemplo, se você adquiriu um novo computador, ele pode ter drivers diferentes ou outros programas instalados. Se você também atualizou para uma versão mais nova do AutoHotkey, descubra qual versão você tinha antes e aí verifique o changelog e as notas de compatibilidade.
SoundGet, SoundSet, SoundGetWaveVolume e SoundSetWaveVolume comportam-se de maneira diferente no Windows Vista e posteriores em relação a versões anteriores do Windows. Em particular, números de dispositivos são diferentes e alguns componentes podem não estar disponíveis. O comportamento depende de drivers de áudio, que são necessariamente diferente daqueles usados no Windows XP. O script de análise de placa de som pode ser usado para encontrar os números de dispositivos corretos.
Também veja a seguinte pergunta:
By default, User Account Control (UAC) protects "elevated" programs (that is, programs which are running as admin) from being automated by non-elevated programs, since that would allow them to bypass security restrictions. Hotkeys também são bloqueadas, então por exemplo, um programa não elevado não pode espionar a entrada feitas para um programa elevado.
O UAC também impede o funcionamento dos comandos SendPlay e BlockInput.
Soluções de contorno comuns são as seguintes:
"AutoHotkeyU32_UIA.exe" "Seu script.ahk"
(mas inclua caminhos completos).Você deve reparar o erro em seu script antes que você obtenha seu ícone de bandeja novamente. Mas antes, você deve encontrar o arquivo do script.
Procure por AutoHotkey.ahk nos diretórios seguintes:
Se você está usando outro executável do AutoHotkey diretamente, o nome do script depende do executável. Por exemplo, se você está rodando o executável AutoHotkeyU32.exe, procure por AutoHotkeyU32.ahk. Note que, dependendo das configurações do seu sistema, a parte ".ahk" pode estar oculta, mas o arquivo deverá ter um ícone como
Você geralmente pode editar um arquivo de script clicando com o botão direito e selecionando Edit Script. Se isso não funcionar, você pode abrir o arquivo no Bloco de Notas ou outro editor.
Se você executar o AutoHotkey a partir do Menu Iniciar ou executando o arquivo AutoHotkey.exe diretamente (sem parâmetros da linha de comando), ele irá procurar por um script em um dos locais acima. Alternativamente, você pode criar um arquivo de script (algumacoisa.ahk) em qualquer lugar que você quiser, e executar o arquivo de script em vez de abrir o executável do AutoHotkey.
Veja também Parâmetro da Linha de Comando "Nome do Arquivo de Script" e Portabilidade do AutoHotkey.exe.
Para scripts simples, veja Depurando um Script. Para exibir o conteúdo de uma variável, use MsgBox ou ToolTip. Para scripts complexos, vide Depuração Interativa.
Alguns programas precisam ser iniciados em seus próprios diretórios (quando em dúvida, costuma ser melhor fazê-lo). Por exemplo:
Run, %A_ProgramFiles%\Um Programa\App.exe, %A_ProgramFiles%\Um programa
Se o programa que você está tentando iniciar está na pasta %A_WinDir\System32%
e você está usando AutoHotkey de 32 bits num sistema de 64 bits, o Redirecionador de Arquivos do Sistema pode estar interferindo. Para contornar isso, use %A_WinDir%\SysNative
no lugar; esse é um diretório virtual visível somente pelos programas de 32 bits rodando em sistemas de 64 bits.
Resposta curta: Salve o arquivo do script como UTF-8 com BOM.
Apesar de o AutoHotkey suportar texto Unicode, ele é otimizado para retrocompatibilidade, o que significa usar a codificação ANSI em vez da internacionalmente recomendada UTF-8. O AutoHotkey não irá reconhecer um arquivo UTF-8 automaticamente a não ser que ele inicie com uma marca de ordem de bytes (BOM — Byte Order Mark).
Em outras palavras, os arquivos UTF-8 que não contêm uma BOM são interpretados erroneamente, causando a decodificação incorreta dos caracteres que não sejam ASCII. Para resolver isso, salve o arquivo como UTF com BOM ou adicione o switch /CP65001 da linha de comando.
Para salvar como UTF-8 com BOM no Bloco de Notas, selecione UTF-8 no menu suspenso Codificação dentro da janela Salvar como.
Para ler outros arquivos UTF-8 que não contêm uma BOM, use o comando FileEncoding UTF-8-RAW
, a opção *P65001
com o comando FileRead, ou UTF-8-RAW
como terceiro parâmetro da função FileOpen(). O sufixo -RAW
pode ser omitido, mas neste caso somente os novos arquivos terão uma marca de ordem de bytes.
Note que arquivos INÍCIO acessados com os comandos INI padrão não suportam UTF-8; eles devem ser salvos como ANSI ou UTF-16.
Nem todos os jogos permitem que o AHK envie pressionamentos de teclas ou cliques ou receba cores de píxeis.
Mas há algumas alternativas; tente todas as soluções abaixo. Se todas estas falharem, então pode não ser possível que o AHK funcione com o seu jogo. Às vezes os jogos têm medidas de prevenção de hack ou cheats, como GameGuard e Hackshield. Se tiverem, haverá uma alta probabilidade de o AutoHotkey não funcionar com esse jogo.
Use SendPlay via comando SendPlay, SendMode Play e/ou a opção SP das hotstrings.
SendPlay, abc
SendMode, Play Send, abc
:SP:flni::falando nisso ; or #Hotstring SP ::flni::falando nisso
Observação: SendPlay pode não ter efeito algum no Windows Vista ou posterior se o Controle de Conta do Usuário (UAC) estiver habilitado, mesmo que o script esteja rodando como administrador.
Aumente o valor de SetKeyDelay. Por exemplo:
SetKeyDelay, 0, 50 SetKeyDelay, 0, 50, Play
Tente ControlSend, o qual pode funcionar nos casos em que os outros modos do comando Send falharem:
ControlSend,, abc, titulo_do_jogo
Tente o evento de pressionamento e soltura de uma tecla com os vários métodos do comando Send:
Send {TECLA down}{TECLA up}
Tente o evento de pressionamento e soltura de uma tecla com um Sleep entre eles:
Send {TECLA down} Sleep 10 ; tente vários milissegundos Send {TECLA up}
Se as Hotkeys, Clicks ou Sends de um script estão visivelmente mais lentos que o normal enquanto a CPU está sob forte carga, aumentar a prioridade do processo do script pode ajudar. Para fazer isso, inclua a linha a seguir perto do topo do script:
Process, Priority, , High
Apesar de ser certamente possível que o arquivo tenha sido infectado, na maioria dos casos esses alertas são falsos positivos, o que significa que o programa de antivírus está equivocado. Uma sugestão comum é enviar o arquivo para um serviço online como virustotal ou Jotti e ver o que outros programas antivírus têm a dizer. Se estiver em dúvida, você pode enviar o arquivo para o fornecedor de seu antivírus para confirmação. Isso também pode ajudar outros usuários do AutoHotkey, já que a empresa do antivírus pode confirmar o arquivo como um falso positivo e consertar o produto deles para conviver de boa com o AutoHotkey.
Falsos positivos podem ser mais comuns para scripts compilados que foram comprimidos, como com UPX (padrão para AutoHotkey 1.0 mas não 1.1) ou MPRESS (opcional para AutoHotkey 1.1). Já que a instalação padrão do AutoHotkey não inclui um compressor, scripts compilados não são comprimidos por padrão.
Vide a página de download do AutoHotkey.
Vide Portabilidade do AutoHotkey.exe.
Observe que quando você compila um script que usa bibliotecas de função incluídas automaticamente, AutoHotkey.exe e a pasta da biblioteca devem estar um nível acima do arquivo Ahk2Exe.exe (ex: \AutoHotkey.exe x \Compiler\Ahk2Exe.exe). Também note que o Ahk2Exe salva as configurações na seguinte chave do registro: HKCU\Software\AutoHotkey\Ahk2Exe
. O compilador em si (Ahk2Exe) não é necessário para rodar scripts.
Testes mostram que devido ao cache de arquivos, um arquivo temporário pode ser bem rápido para pequenas saídas. De fato, se o arquivo for deletado imediatamente depois do uso, ele não costuma ser gravado no disco. Por exemplo:
RunWait %ComSpec% /c dir > C:\Meu Arquivo Temporario.txt FileRead, VariavelQueContemOConteudo, C:\Meu Arquivo Temporario.txt FileDelete, C:\Meu Arquivo Temporario.txt
Para evitar o uso de um arquivo temporário (especialmente se a saída for grande), considere usar o método Shell.Exec() como mostrado nos exemplos do comando Run.
Primeiro, eis um exemplo que fecha outro script:
DetectHiddenWindows On ; Permite que a janela principal oculta de um script seja detectada. SetTitleMatchMode 2 ; Evita a necessidade de especificar o caminho completo do arquivo abaixo. WinClose NomeDoArquivoDoScript.ahk - AutoHotkey ; Mude isto para refletir o nome do script (diferencia maiúsculas de minúsculas).
Para suspender, pausar ou recarregar outro script, substitua a linha acima com uma destas:
PostMessage, 0x0111, 65305,,, NomeDoArquivoDoScript.ahk - AutoHotkey ; Suspend. PostMessage, 0x0111, 65306,,, NomeDoArquivoDoScript.ahk - AutoHotkey ; Pause. PostMessage, 0x0111, 65303,,, NomeDoArquivoDoScript.ahk - AutoHotkey ; Recarrega.
Para pausar ou retomar o script inteiro pressionando uma tecla, atribua a hotkey ao comando Pause como neste exemplo:
^!p::Pause ; Pressione Ctrl+Alt+P para pausar. Pressione de novo para retomar.
Para interromper uma ação que está se repetindo dentro de um Loop, considere o exemplo funcional abaixo, que é uma hotkey que tanto inicia quanto interrompe sua própria ação repetitiva. Em outras palavras, pressionar a hotkey uma vez irá iniciar o Loop. Pressionar a mesma hotkey de novo vai pará-lo.
#MaxThreadsPerHotkey 3 #z:: ; Tecla de atalho Win+Z (mude esta hotkey para adequar às suas preferências). #MaxThreadsPerHotkey 1 if ManterWinZRodando ; Isto significa que o fio de execução subjacente já está executando o loop abaixo. { ManterWinZRodando := false ; Sinalize o loop do fio de execução para parar. return ; Finalize esse fio de execução de tal forma que o que está debaixo irá retomar e virá a mudança feita pela linha acima. } ; Do contrário: ManterWinZRodando := true Loop { ; As próximas quatro linhas são a ação que você quer que repita (altere-as para adequarem-se às suas necessidades): ToolTip, Pressione Win-Z de novo para impedir que esta janela fique alertando. Sleep 1000 ToolTip Sleep 1000 ; Mas deixe o resto abaixo do jeito que está. if not ManterWinZRodando ; O usuário sinalizou o loop para parar quando aquele pressionou Win-Z de novo. break ; Libertar-se deste loop. } ManterWinZRodando := false ; Recomeçar em preparação ao próximo pressionamento desta hotkey. return
Rajat criou este script.
Com o Internet Explorer, talvez o método mais confiável seja usar DllCall() e COM como demonstrado em www.autohotkey.com/forum/topic19256.html. Observação relacionada: o conteúdo da barra de endereços e da barra de status podem ser obtidos como demonstrado em www.autohotkey.com/forum/topic19255.html.
Um método mais antigo e menos confiável: a técnica no exemplo a seguir funcionará com o Internet Explorer na maioria das páginas. Uma técnica similar talvez funcione em outros navegadores:
Run, www.yahoo.com MouseMove, 0, 0 ; Impede que a barra de status exiba um link de sobreposição de cursor em vez de "Concluído". WinWait, Yahoo! - WinActivate StatusBarWait, Done, 30 if ErrorLevel MsgBox A espera se esgotou ou a janela foi fechada. else MsgBox A página terminou de carregar.
O comando EnvAdd pode adicionar ou subtrair uma quantidade de dias, horas, minutos ou segundos de uma string de tempo que esteja no formato YYYYMMDDHH24MISS. O exemplo abaixo subtrai 7 dias do horário especificado: EnvAdd, VarContendoOHorario, -7, days
.
Para determinar a quantidade de tempo entre duas datas ou horários, veja EnvSub, que contém um exemplo. A variável nativa A_Now também contém o horário local atual. Finalmente, há várias variáveis de data/horário nativas, bem como o comando FormatTime para criar uma string de data/horário personalizada.
Use o comando FormatTime ou as variáveis nativas para data e horário.
Use ControlSend.
Vide Automatização do Winamp.
Aqui está um exemplo.
Na seção de exemplos do termo Edit você encontrará um script que permite que você mude o editor padrão.
Use Gui Submit. Por exemplo:
Gui, Add, Text,, Insira algum texto e pressione Enviar: Gui, Add, Edit, vVariavelAssociada Gui, Add, Button,, Enviar Gui, Show Return ButtonEnviar: Gui, Submit, NoHide MsgBox, Conteúdo do controle 'edit': %VariavelAssociada% Return
Vide biblioteca padrão GDI+, por tic. Também é possível desenhar por métodos rudimentares usando Gui, mas de forma limitada.
Use WinWait, WinWaitclose ou WinWait[Not]Active.
Também há algumas soluções criadas por usuários como OnWin.ahk e [Como] Enganchar no Shell para receber suas mensagens.
Existem vários jeitos de fazer com que um script (ou qualquer programa) inicie automaticamente toda vez que você iniciar seu PC. O mais fácil é colocar um atalho para o script na pasta Inicializar:
shell:startup
e clique OK ou Enter. Isso irá abrir a pasta Inicializar do usuário atual. Se, em vez disso, você quiser abrir a pasta Inicializar comum a todos os usuários, digite shell:common startup
(entretanto, neste caso você precisará ser um administrador para proceder).Os botões esquerdo e direito devem ser atribuíveis normalmente (por exemplo, #LButton::
é a hotkey Win+BotãoDireito). De maneira similar, o botão do meio e o rolar da roda do mouse devem ser atribuíveis normalmente exceto em mouses cujos drivers controlam diretamente tais botões.
O quarto botão (XButton1) e o quinto botão (XButton2) talvez sejam atribuíveis se o driver de seu mouse permitir que seus cliques sejam visíveis pelo sistema. Se eles não puderem ser vistos — ou se seu mouse tem mais de cinco botões que você quer usar — você pode tentar configurar o software que veio com o mouse (às vezes acessível pelo Painel de Controle ou Menu Iniciar) para enviar um pressionamento de tecla toda vez que você pressionar um de tais botões. O dito pressionamento pode então ser definido como uma hotkey em um script. Por exemplo, se você configurar o quarto botão para enviar Ctrl+F1, você pode então indiretamente configurar aquele botão como uma hotkey usando ^F1::
em um script.
Se você tiver um mouse de cinco botões cujo quarto e quinto botões não podem ser vistos, você pode tentar alterar o driver do seu mouse para o driver padrão incluído com o sistema operacional. Isso assume que existe um driver para seu mouse em particular e que você pode ficar numa boa sem as funcionalidades extras proporcionadas pelo software personalizado do seu mouse.
Use os nomes das teclas (Tab e Space) em vez de seus caracteres. Por exemplo, #Space
e Win+Space e ^!Tab
é Ctrl+Alt+Tab.
Isso está descrito na página de remapeamento de teclas.
Use variáveis nativas para hotkeys assim:
~Ctrl:: if (A_ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 200) MsgBox pressione duas vezes return
O método preferido é #IfWinActive. Por exemplo:
#IfWinActive, ahk_class Notepad ^a::MsgBox Você pressionou Ctrl+A enquanto o Bloco de Notas estava ativo.
Considere o exemplo seguinte, em que a tecla Numpad0 é feita de tecla de prefixo:
Numpad0 & Numpad1::MsgBox, Você pressionou Numpad1 enquanto segurava Numpad0.
Agora, para fazer com que a tecla Numpad0 envie um pressionamento real de Numpad0 toda vez que ela não tiver sido usada como uma hotkey como no caso acima, adicione a hotkey a seguir:
$Numpad0::Send, {Numpad0}
O prefixo $ é necessário para prevenir o aparecimento de um aviso sobre um loop infinito (já que a hotkey "envia ela própria"). Além disso, a ação acima ocorre no momento em que a tecla é solta.
Aqui estão alguns exemplos.
Use o script feito pelo polyethene (exemplos inclusos).
Vide Teclas Especiais.
Sim. Este script de exemplo transforma a tecla 000 uma tecla de “igual”. Você pode alterar a ação substituindo a linha Send, =
com a linha(s) de sua escolha.