Pitch: De macOS para o Windows sem estresse: Como criei um remapeador leve e o publiquei na Microsoft Store via GitHub Actions
Página do App na Microsoft Store: CtrlAltRemapper (Microsoft Store)
Se você alterna frequentemente entre o macOS e o Windows no seu dia a dia, com certeza 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.
Objetivos do Projeto
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.
- 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.
E assim nasceu o projeto CtrlAltRemapper.
Etapa de Compilação: 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.
Tabela de Atalhos Suportados
O aplicativo traz a lógica e o layout de teclas da Apple para o ecossistema do Windows. Confira a lista completa de atalhos remapeados:
| Tecla no PC | Função (Estilo Mac) |
|---|---|
| Atalhos Básicos (Basic Shortcuts) | |
| Alt + A | Selecionar tudo |
| Alt + C | Copiar |
| Alt + V | Colar |
| Alt + X | Recortar |
| Alt + Z | Desfazer |
| Alt + Y | Refazer |
| Alt + S | Salvar |
| Alt + F | Localizar / Buscar |
| Alt + P | Imprimir |
| Formatação de Texto (Text Formatting) | |
| Alt + B | Negrito |
| Alt + I | Itálico |
| Alt + U | Sublinhado |
| Alt + Shift + V | Colar sem formatação (texto simples) |
| Alt + K | Inserir hiperlink |
| Navegador e Gerenciamento de Janelas (Browser & Window) | |
| Alt + Q | Fechar aplicativo |
| Alt + H | Ocultar janela ativa |
| Alt + W | Fechar janela ou aba |
| Alt + N | Novo arquivo ou janela |
| Alt + O | Abrir arquivo |
| Alt + R | Recarregar página |
| Alt + - | Diminuir zoom |
| Alt + + | Aumentar zoom |
| Alt + 0 | Redefinir zoom |
| Alt + T | Nova aba ou documento |
| Alt + Shift + T | Reabrir aba fechada |
| Alt + Clique Esquerdo | Abrir link em nova aba / Mudar foco |
| Sistema e Navegação (System & Navigation) | |
| Alt + Espaço | Alternar idioma de entrada (emula ⌘ + Espaço) |
| Alt + Backspace | Excluir caractere à direita (Forward Delete) |
| Alt + D | Adicionar aos favoritos / Excluir linha |
Vale destacar que o comportamento nativo da tecla Ctrl permanece 100% intocado, permitindo usar ambos os estilos de atalho em paralelo.
Automaçã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.msixlimpo 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.pfxe assina o pacote de teste usando a ferramentasigntool.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:
name: Test-Sign MSIX Package
on:
workflow_dispatch:
jobs:
pack-and-sign:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Find Windows SDK Tools
shell: pwsh
id: tools
run: |
$makeappx = Get-ChildItem -Path "C:\Program Files (x86)\Windows Kits\10\bin" -Filter "makeappx.exe" -Recurse | Where-Object { $_.FullName -like "*x64*" } | Select-Object -First 1 -ExpandProperty FullName
$signtool = Get-ChildItem -Path "C:\Program Files (x86)\Windows Kits\10\bin" -Filter "signtool.exe" -Recurse | Where-Object { $_.FullName -like "*x64*" } | Select-Object -First 1 -ExpandProperty FullName
echo "MAKEAPPX_PATH=$makeappx" >> $env:GITHUB_ENV
echo "SIGNTOOL_PATH=$signtool" >> $env:GITHUB_ENV
- name: Pack MSIX
shell: pwsh
run: |
& "$env:MAKEAPPX_PATH" pack /d . /p CtrlAltRemapper_unsigned.msix /v
- name: Create Test Certificate and Sign
shell: pwsh
run: |
$password = ConvertTo-SecureString "TestPassword123" -AsPlainText -Force
$cert = New-SelfSignedCertificate -Type Custom -Subject "CN=BD6FFC77-0FDF-42B7-95A8-73C66D341EDE" -KeyUsage DigitalSignature -FriendlyName "TestCert" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3")
Export-PfxCertificate -Cert $cert -FilePath "testcert.pfx" -Password $password
& "$env:SIGNTOOL_PATH" sign /fd SHA256 /a /f "testcert.pfx" /p "TestPassword123" CtrlAltRemapper_unsigned.msix
Move-Item -Path CtrlAltRemapper_unsigned.msix -Destination CtrlAltRemapper_Signed.msix
- name: Upload Signed MSIX and Certificate
uses: actions/upload-artifact@v4
with:
name: CtrlAltRemapper-TestSign-Package
path: |
CtrlAltRemapper_Signed.msix
testcert.pfx
Desafios na Certificação da Microsoft Store
Publicar um remapeador de teclas que opera em nível de sistema na Microsoft Store exigiu superar várias restrições rígidas de segurança do Windows 10/11.
1. Declaração de runFullTrust
Como o app intercepta atalhos usando a API Win32 de baixo nível (SetWindowsHookEx), a sandbox padrão do UWP bloqueava a execução. Foi necessário declarar a capacidade restrita runFullTrust no AppxManifest.xml. Durante o envio, fornecemos uma justificativa técnica detalhada sobre a segurança da utilidade e a necessidade do acesso.
2. Exigência de HeadlessAppBypass e suporte da Microsoft
No primeiro envio, enfrentamos uma rejeição automática. Como o app roda apenas na bandeja do sistema sem uma janela principal de GUI, o Windows SDK o identificou como um "headless app". As políticas da Microsoft exigiam vincular a permissão HeadlessAppBypass ao nosso Store ID.
Após contato com a equipe de suporte do Microsoft Partner Center explicando a natureza do app, o acesso foi liberado manualmente para a conta de desenvolvedor.
3. Depuração no ambiente de certificação (Erro de VCRUNTIME140.dll e máscaras de Alt)
Nos testes automatizados em ambiente limpo da Microsoft, o app apresentou falhas devido à ausência da DLL do sistema VCRUNTIME140.dll.
Para resolver as pendências de certificação:
- Recompilamos e ajustamos o manifesto para a arquitetura x64 nativa (
ProcessorArchitecture="x64"). - Adicionamos a nota sobre requisitos de sistema nos listings da loja em 8 idiomas.
- Implementamos uma máscara ativa (
vkFF/vkE8) para a tecla Alt, evitando que o Windows transferisse o foco para a barra de menus ao alternar atalhos rapidamente.
Considerações Finais
O desenvolvimento do CtrlAltRemapper provou que é possível levar um projeto indie focado em produtividade a um pacote de nível enterprise na Microsoft Store.
O aplicativo está disponível gratuitamente para testes no link abaixo:
Download na Microsoft Store: CtrlAltRemapper (Microsoft Store)
Feedbacks, relatos de bugs e sugestões de novos atalhos são muito bem-vindos nos comentários!
#Engenharia de Software #Produtividade #Windows #MacOS