5 pontos por GN⁺ 2023-08-23 | 1 comentários | Compartilhar no WhatsApp
  • AutoHotKey é uma ferramenta de automação para Windows poderosa, mas intimidadora para quem está começando; por isso, foi disponibilizada como material de estudo uma coleção real de scripts pessoais
  • O material é composto por 14 arquivos no total, com foco em exemplos de automação que você pode testar imediatamente, como abrir pastas, inserir texto e expandir atalhos por programa
  • Inclui desde inserção rápida da data atual, de em dash e de ¯\_(ツ)_/¯ até um sistema modal de atalhos para usuários de vim e uma demonstração simples de GUI
  • Também há um script que converte timestamps para UTC e hora local, mostrando uma automação prática de fluxo de trabalho que vai além de simples atalhos
  • Cada arquivo traz comentários explicando o que o código faz e, em alguns casos, por que ele foi implementado daquela forma, tornando-o uma base de código educacional fácil de ler

Uma coleção de exemplos de AutoHotKey próxima do trabalho real

Como ler como uma base de código educacional

  • Este repositório é um exemplo de base de código educacional feita para que as pessoas possam aprender lendo o código
  • Cada arquivo contém muitos comentários sobre o que o código faz, e algumas implementações também explicam o motivo de determinada abordagem ter sido escolhida
  • Uma explicação separada sobre bases de código educacionais continua neste post da newsletter
  • Trechos que precisarem de mais explicações podem ser solicitados por meio de issues no GitHub

1 comentários

 
GN⁺ 2023-08-23
Comentários do Hacker News
  • Acho que, pela primeira vez, posso contribuir com algo útil para uma discussão sobre código. Como escritor, criei um script AutoHotkey para abrir rapidamente um notepad.exe vazio a qualquer momento: ao pressionar a tecla ~, ele abre; ao pressionar de novo, fecha; se houver conteúdo, aparece a caixa de diálogo para salvar.
    Isso é tudo que meu AHK faz.

    • É interessante que a mesma tecla também costuma ser usada, por convenção, para alternar o terminal. Assim como programadores “vivem” no terminal, fico curioso se profissionais de arte gráfica digital também abrem um sketchpad ou programa de desenho de modo parecido.
      Quando você quer alternar rapidamente para a janela anterior sem fechar nem minimizar a atual, o atalho padrão do Windows Alt + Escape é útil. Diferente de Alt+Tab, ele não mostra a visão geral das janelas; alterna direto para a janela que tinha o foco imediatamente antes.
      No AutoHotkey v1, dá para criar um boilerplate de switcher/launcher que procura um trecho do título da janela e a ativa; se ela já estiver ativa, volta com send, !{escape}; se não existir, executa o programa. Se não quiser poluir a barra de tarefas, também dá para usar WinHide/WinShow, mas isso não se ajusta bem a algumas janelas; para detectar janelas, ahk_exe ou ahk_class às vezes é mais adequado.
    • Talvez o Notepad++ seja melhor por causa do salvamento automático. Acho que uma de suas melhores funções é salvar automaticamente até documentos não salvos.
    • Se você migrar o script acima para AutoHotkey 2, dá para escrevê-lo de forma mais simples, algo como “Tilde opens Notepad”. A ideia é verificar WinActive("Untitled - Notepad") e WinExist("*Untitled - Notepad") para fechar ou ativar a janela; se ela não existir, executar Run "Notepad".
    • É só um pouquinho mais rápido do que apertar a tecla Windows, digitar “Notepad” e pressionar Enter. Mas, se você fizer ele abrir um único documento notes.txt, fica mais interessante: dá para carregar as anotações, acrescentar conteúdo e salvar/fechar tudo com um único atalho.
    • É uma boa abordagem. Usando as funções WinActive() ou WinExist(), dá para combinar várias condições de título com or e, se necessário, incluir também uma condição ahk_class, como "Untitled - Notepad ahk_class Notepad".
  • AutoHotkey é incrível, mas eu gostaria que a linguagem fosse um pouco mais normal. Sofri tentando criar de forma estável uma versão em proporção áurea do Aero Snap; lidar com vários monitores e tamanhos não deveria ser tão difícil, mas a sintaxe estranha de Loop e as falhas silenciosas por erros simples acabaram tirando a graça e me fizeram desistir.
    Também encontrei um módulo ahk para Python, mas, combinado com o módulo keyboard, ele não funcionou tão bem como listener de atalhos quanto o AutoHotkey.
    https://github.com/idbrii/daveconfig/blob/main/win/autohotke...
    https://pypi.org/project/ahk/

    • É por isso que existe o AutoHotkey v2. É um momento meio Python 3 do AHK: já estava disponível havia anos, e a versão estável saiu há cerca de um ano, mas a adoção ainda não parece grande.
    • Por isso eu não estava conseguindo usar muita coisa além de transformar CapsLock em Control. Talvez agora seja a hora de criar uma Lisp DSL que compile para AHK.
    • Sim, esse é o maior problema do AHK, e a v2 melhora bastante essa parte. Eu sonho que seja possível ter um listener de atalhos genérico, usável em qualquer linguagem, com alguma mágica de plugins wasm.
  • No meu casamento, criei uma cabine de fotos com AutoHotKey. Usei um software simples para controlar a Nikon da minha noiva via USB junto com o IrfanView no notebook, e configurei o IrfanView para monitorar uma pasta e mostrar sempre a foto mais recente.
    Com AutoHotKey, criei uma GUI simples com botões Preview, Autofocus e “SNAP”; ao clicar em SNAP, aparecia uma grande contagem regressiva, a foto era tirada, o software da câmera era minimizado e o IrfanView era aberto. Alguns segundos depois, voltava para a GUI dos botões. Os convidados adoraram, economizamos algumas centenas de euros no aluguel de uma cabine de fotos e ainda conseguimos fotos boas.

  • Este script AutoHotKey mudou o jogo para mim. Mapeei Ctrl + Shift + V para colar sem formatação: ele converte a área de transferência em texto, cola, espera um instante e depois restaura a área de transferência original.

    • Como referência, isso também dá para fazer sem AutoHotKey, com Powertoys ou PureText. É muito útil.
      https://learn.microsoft.com/en-us/windows/powertoys/
      https://stevemiller.net/puretext/
    • É realmente estranho que colar com formatação seja o padrão. Até hoje nunca quis colar mantendo a formatação, e nem entendo para qual caso de uso isso foi pensado.
    • Ctrl+Shift+V é excelente. Deveria virar o atalho padrão do sistema operacional para a área de transferência.
      Também seria bom ter uma área de transferência com múltiplos valores, como os últimos 5 itens copiados, mas talvez isso já seja pedir demais.
  • AHK é um dos apps que eu mantenho preso ao Windows. Uso para adicionar ao teclado caracteres como äöüß e áóúñ, controlar o brilho das luzes do quarto e do apartamento, inserir timestamps como 08:39 –, 2023-08-22 08:39:46 e 2023-08-22 — Tuesday com um ou dois botões, e ligar/desligar a energia do monitor por uma tomada compatível com Tasmota ao alternar a tecla Pause
    Só queria que houvesse um recurso para usar um segundo teclado como um painel de botões e, ao mesmo tempo, consumir essas teclas. Por isso estou usando um pequeno teclado Bluetooth conectado a um Raspberry Pi Zero para ter mais botões

    • No macOS, Hammerspoon parece ser a melhor opção
      https://www.hammerspoon.org/
    • Se o custo valer a pena, dá para procurar um teclado barato com suporte a QMK ou outro firmware customizado e mapear algumas teclas para F13~F24 ou combinações difíceis de pressionar, como Ctrl+Alt+Shift+P
    • Já obtive bons resultados usando Luamacros para interceptar um segundo teclado e encaminhar as teclas para o AutoHotKey
      https://miquelvir.medium.com/secondkeyboard-1c39e52e023b
      Há também este: https://github.com/evilC/AutoHotInterception
    • No Linux, uso AutoKey. É menos poderoso que o AHK, mas é bom por usar Python nativo
      https://github.com/autokey/autokey
    • Com AutoHotInterception, o AHK consegue distinguir diferentes teclados/mouses com base no ID de hardware. Dá para ter um layout e macros próprios em um teclado separado
  • Eu também uso AutoHotKey o tempo todo. Tenho 6 atalhos para carimbos de data/hora, lançadores PuTTY/SSH para hosts e portas seriais que uso com frequência, lançadores baseados em estado para mais de 10 apps como Outlook, Windows Terminal e Total Commander, colar sem formatação em qualquer lugar, colar removendo quebras de linha, uma camada de entrada AltGr para caracteres especiais e emojis, além de atalhos de mídia/volume

  • No meu notebook Linux pessoal, troquei Caps Lock e Escape entre si e já me acostumei. Quando faço dual boot no Windows, configurei o mesmo com o Powertoys, mas no trabalho não posso instalar Powertoys nem Uncap, então AutoHotKey é a única opção
    Segui uma resposta do StackOverflow e acabei com Caps Lock e Escape enviando as duas teclas juntas, o que às vezes estraga minhas mensagens no Teams
    https://github.com/microsoft/PowerToys
    https://github.com/susam/uncap
    https://stackoverflow.com/questions/38558376/how-to-map-caps...

    • Kanata é excelente. Suporta Linux e Windows, mas, como meu trabalho principal é no Linux, ainda não testei no Windows
      https://github.com/jtroo/kanata
    • Também recomendo modificadores na home row. A ideia é que, ao tocar rapidamente uma tecla, ela funcione como de costume; ao segurar por mais tempo, faça outra função
      Por exemplo, https://github.com/evilC/TapHoldManager implementa isso no AHK. Colocar Shift/Ctrl/Win/Alt sob fdsa e jkl; reduz o uso dos mindinhos e permite manter os dedos mais tempo na home row
    • Venho trocando essas teclas com AHK há anos, e um script simples como este funciona: CapsLock::Esc, Esc::CapsLock
      Também reuni outras melhorias rápidas com AHK, como executar programas por atalhos globais: https://nickjanetakis.com/blog/remap-and-set-global-hotkeys-...
    • Também vale tentar o registro de mapa de scancodes. Uso para trocar Ctrl/CapsLock, e funciona bem até em softwares de RDP ou apps com privilégios de administrador que o PowerToys não conseguia tratar
      https://superuser.com/questions/550679/where-can-i-find-wind...
    • Fiquei preso no mesmo problema e acabei criando algo que funciona na marra
      https://github.com/hwalinga/dotfiles/blob/master/CapsLockCtr...
      Também implementei a função dupla em que CapsLock funciona como Ctrl quando pressionado junto com outra tecla e como Esc quando tocado rapidamente
  • Como outras pessoas disseram, o AHK permite fazer uma quantidade surpreendente de coisas no Windows. Pessoalmente, dá para dizer que economizei ou ganhei mais de US$ 100 mil graças ao AHK
    Mas a linguagem AHK em si não é das mais agradáveis de usar. Fico me perguntando por que não há uma ferramenta igualmente poderosa em Python ou Lua, e https://github.com/pywinauto/pywinauto também não funcionou tão bem quanto o AHK na prática. No fim das contas, por baixo é WinAPI, então C# também poderia ser uma opção se existisse uma boa biblioteca wrapper. Acho que o AHK é popular porque, embora seja feio, funciona

    • Se você ainda não fez isso, vale a pena migrar para a v2. Ela saiu no início deste ano e a linguagem ficou bem menos feia. A distinção entre comandos e funções desapareceu; agora tudo é função
    • Há uma tentativa de reescrever o AHK em C# e oferecer suporte a outros sistemas operacionais
      https://www.autohotkey.com/boards/viewtopic.php?f=80&t=77248
    • O motivo de o AHK ser popular é que a feiura que a maioria das linguagens de programação “de verdade” não aceitaria acaba tornando a curva inicial de acesso mais fácil
    • PyAutoGui também é muito bom. Uso há muito tempo e recentemente reescrevi algumas automações simples de AHK com ele. Não é um substituto 1:1, então ainda uso AutoHotKey, mas os recursos de automação de UI são bem feitos
  • AutoHotKey é excelente. Uso para alternar entre apps mais rapidamente e, no meu caso, controlo tudo usando o Right Alt como tecla de “ativação de atalhos”
    Ao mantê-la pressionada e apertar uma tecla de letra, ele alterna entre as instâncias daquele app. Por exemplo, Alt+C muda para uma janela do VS Code, e combinações como Alt+F abrem uma nova instância de app, como uma nova janela do Chrome com um perfil específico. Alt+número pode ser configurado para a janela atualmente em foco, e tocar em Alt ativa o modo de edição, no qual a janela atual pode ser atribuída a uma tecla numérica. No modo de edição, H/J/K/L viram teclas de navegação para cima/baixo/esquerda/direita, tornando a alternância entre apps muito mais rápida

  • O script que mais me marcou foi um que encontrei e modifiquei quando jogava Diablo 3. Eu estava desenvolvendo problemas de lesão por esforço repetitivo por pressionar a mão do mouse com força demais contra o mousepad, então procurei uma forma de jogar com controle
    Esse script vinculava o movimento analógico a um pequeno círculo ao redor do personagem, permitindo correr suavemente em qualquer direção, e, ao apertar um botão, mudava o alcance para mais longe para lançar habilidades à distância. Com um pouco de customização por classe, funcionava surpreendentemente bem