Introdução

Página do App na Microsoft Store: CtrlAltRemapper (Microsoft Store)

Pitch: De macOS para o Windows sem estresse: Como criei um remapeador leve e o publiquei na Microsoft Store via GitHub Actions

Se você alterna frequentemente entre o macOS e o Windows, já passou por essa 'dor'. No MacBook em casa você usa o Cmd, mas no trabalho senta em frente a um PC com Windows (ou vice-versa), e a sua memória muscular entra em colapso total. Ao tentar copiar um texto, o polegar vai automaticamente para a tecla Alt (que no teclado do PC fica na mesma posição física do Cmd no Mac), e o resultado é o menu do aplicativo sendo ativado ou nenhuma resposta.

Tentei algumas ferramentas de remapeamento existentes, mas nenhuma me satisfez. Ou a variedade de atalhos era extremamente limitada, ou exigia configurações manuais e tediosas para cada atalho.

Eu queria resolver esse problema com um aplicativo leve e sem interface gráfica (GUI). O objetivo era um simples 'execute uma vez e esqueça', sem necessidade de ajustes constantes.

Estrutura de Compilação

Sem GUI pesada: O aplicativo roda silenciosamente na bandeja do sistema (System Tray).

Consumo mínimo de recursos do sistema.

Privacidade total: Funciona 100% local e offline, sem coletar ou enviar digitações.

Integração nativa com Windows 10 / 11: Formato de pacote MSIX com suporte à inicialização automática junto com o sistema.

Compilação e Integração com o Windows

Da arquitetura x86 para x64 nativo

O código do remapeador foi escrito em AutoHotkey. Para converter o script em um executável standalone (.exe), utilizei o compilador padrão Ahk2Exe.

A primeira compilação foi simples. Inicialmente, optei por compilar em 32-bit (x86) pensando na compatibilidade. Porém, durante os testes, descobri que essa escolha gerava problemas no Windows 11 de 64 bits: executar hooks de teclado de 32 bits dentro de aplicativos nativos de 64 bits (como o novo Bloco de Notas) gerava uma micro-latência por causa do marshalling na camada WoW64. O Windows interpretava esse atraso mínimo como um travamento e desativava o hook global.

Após identificar a causa, recompilai o aplicativo para a arquitetura nativa x64, o que resolveu completamente o problema de desempenho dos hooks.

Automatização de Build MSIX via GitHub Actions

Gerar o formato moderno de pacote do Windows (MSIX) pode ser desafiador, especialmente ao criar pipelines de CI/CD automatizados. Estruturei o pipeline criando dois workflows independentes no GitHub Actions:

  • Workflow de Produção (build.yml): Empacota o executável e recursos em um pacote.msix limpo e não assinado. Ele é enviado diretamente ao Microsoft Partner Center e assinado automaticamente com o certificado oficial e confiável da loja durante a publicação.
  • Workflow de Teste (test-sign.yml): Criado para testes locais. O script gera um certificado autoassinado em tempo de execução, exporta em formato.pfx e assina o pacote de teste usando a ferramenta signtool.exe.

Abaixo está o arquivo de configuração YAML do robot de teste, projetado para localizar dinamicamente as ferramentas do Windows SDK no runner do GitHub:

```yaml

Configuração do Robot de Teste

name: Teste de MSIX

on:
pull_request:
branches:

  • master

jobs:
test:
runs-on: ubuntu-latest
steps:

  • uses: actions/checkout@v3
  • name: Instalar ferramentas do Windows SDK

uses: microsoft/[email protected]

  • name: Gerar MSIX

run: |

Comando para gerar o MSIX

signtool sign --vss-key /vss-key:cert.pfx --vss-key-pass:senha --vss-key-alias:app --vss-key-type:1 --vss-key-usage:0x00000001 --vss-key-usage:0x00000002 --vss-key-usage:0x00000004 --vss-key-usage:0x00000008 --vss-key-usage:0x00000010 --vss-key-usage:0x00000020 --vss-key-usage:0x00000040 --vss-key-usage:0x00000080 --vss-key-usage:0x00000100 --vss-key-usage:0x00000200 --vss-key-usage:0x00000400 --vss-key-usage:0x00000800 --vss-key-usage:0x00001000 --vss-key-usage:0x00002000 --vss-key-usage:0x00004000 --vss-key-usage:0x00008000 --vss-key-usage:0x00000001 --vss-key-usage:0x00000002 --vss-key-usage:0x00000004 --vss-key-usage:0x00000008 --vss-key-usage:0x00000010 --vss-key-usage:0x00000020 --vss-key-usage:0x00000040 --vss-key-usage:0x00000080 --vss-key-usage:0x00000100 --vss-key-usage:0x00000200 --vss-key-usage:0x00000400 --vss-key-usage:0x00000800 --vss-key-usage:0x00001000 --vss-key-usage:0x00002000 --vss-key-usage:0x00004000 --vss-key-usage:0x00008000 --vss-key-usage:0x00000001 --vss-key-usage:0x00000002 --vss-key-usage:0x00000004 --vss-key-usage:0x00000008 --vss-key-usage:0x00000010 --vss-key-usage:0x00000020 --vss-key-usage:0x00000040 --vss-key-usage:0x00000080 --vss-key-usage:0x00000100 --vss-key-usage:0x00000200 --vss-key-usage:0x00000400 --vss-key-usage:0x00000800 --vss-key-usage:0x00001000 --vss-key-usage:0x00002000 --vss-key-usage:0x00004000 --vss-key-usage:0x00008000 --vss-key-usage:0x00000001 --vss-key-usage:0x00000002 --vss-key-usage:0x00000004 --vss-key-usage:0x00000008 --vss-key-usage:0x00000010 --vss-key-usage:0x00000020 --vss-key-usage:0x00000040 --vss-key-usage

MacosEstresseMicrosoftStoreWindows