O AutoHotKey pode fazer isso. Você pode definitivamente acompanhar os principais estados, mas há outro truque. Para remapear Ctrl pressionado sozinho para Esc , mas mantenha os outros atalhos baseados em Ctrl , apenas adicione isto no seu script padrão:
Ctrl & AppsKey::Return
Ctrl::Send {Esc}
Isso funcionará bem para você, a menos que você use Ctrl + AppsKey (a tecla que abre o menu contextual), mas isso é altamente improvável. Se sim, apenas altere o AppsKey para qualquer tecla que você nunca use com Ctrl .
O truque é tornar o Ctrl um prefixo, usando-o na frente de &
pelo menos uma vez, e então fazer o release da chave produzir o pressionamento de tecla que você quer.