Estou imitando outra vítima do caos do layout do teclado, que sofre de um problema semelhante, embora ligeiramente diferente.
Estou usando layouts de teclado alemão e russo extensivamente na minha estação de trabalho do Windows 10 e alterno frequentemente entre eles. O problema está relacionado ao fato de que as letras Y e Z são trocadas no layout de teclado alemão, em comparação com o layout padrão QWERTY em inglês.
Se eu usar o layout alemão, o atalho Desfazer (Ctrl-Z) será vinculado à tecla Z, que está localizada no meio da primeira linha da letra entre T e U. O Refazer (Ctrl-Y) é vinculado a a tecla Y, que está localizada à esquerda para X na linha baixa de letras no layout alemão QWERTZ.
Se você mudar o layout para o russo, de repente uma coisa maligna está acontecendo. Os atalhos Desfazer e Refazer mudam mutuamente sua posição no teclado. Desfazer (Ctrl-Z) está localizado agora em Y (linha inferior, esquerda para X) e Refazer em Z (linha superior, entre T e U). Esta é a localização idêntica à localização de Ctrl-Z e Ctrl-Y no layout de teclado padrão em inglês.
Isso significa que o local dos atalhos Desfazer e Refazer está mudando para o oposto todo o tempo em que alterno o layout do teclado. Como você pode imaginar, eu estou sempre pressionando o atalho errado, porque é impossível aprender dois padrões opostos oscilantes, pelo menos meus protestos cerebrais da coluna. Como eu uso os atalhos Desfazer e Refazer com muita frequência, esse comportamento me irrita muito.
Desejo corrigir a localização física (chaves) dos atalhos Redo e Desfazer em todo o conjunto de aplicativos do Windows para alemão ou melhor layout de inglês.
Usar o layout em inglês permanentemente para todos os tipos de textos em latim, embora corrija o problema de saltar atalhos de Desfazer / Refazer, mas não é uma opção para mim, porque preciso digitar textos em alemão com todos os trema e ß (não sugiro um layout internacional para inserir acentos, porque o alemão é meu idioma principal e quero digitar suas letras nativas com um toque de tecla).
Como o colega na questão referenciada já mencionada, não há resposta óbvia na Internet. O mesmo problema é resolvido no Ubuntu, criando um layout de teclado personalizado. Não consigo encontrar informações sobre como criar layout personalizado para o Windows ou corrigir o atual.
Esse comportamento é consistente entre todas as versões do Windows que eu conheço e relacionado profundamente nos designs iniciais de layout de teclado, que são incompatíveis apenas para usuários que usam par de idiomas russo-alemão como eu.
Uma boa solução deve ser implementada no Windows diretamente, sem qualquer software adicional ou apenas software livre de código aberto. Soluções de trabalho envolvendo o AutoHotKey são bem-vindas.
Com a ajuda de @miroxlav, criei este script AHK semi-funcional:
; Undo
$^z::
hWnd := WinExist("A")
ThreadID := DllCall("GetWindowThreadProcessId", "UInt", hWnd, "UInt", 0)
hKL := DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
If (hKL = 0x4070409) ; revert undo-redo hotkey mapping if in German layout
Send ^y
Else
Send ^н ; pass the keystroke through
Return
; Redo
$^y::
hWnd := WinExist("A")
ThreadID := DllCall("GetWindowThreadProcessId", "UInt", hWnd, "UInt", 0)
hKL := DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
If (hKL = 0x4070409) ; revert undo-redo hotkey mapping if in German layout
Send ^z
Else
Send ^я ; pass the keystroke through
Return
Este script remapeia perfeitamente Ctrl-Y < - > Ctrl-Z no layout alemão, mas corrompe as duas teclas de atalho no layout russo. Eu uso ^ н e ^ я com a esperança de emular os equivalentes Ctrl-Y ou Ctrl-Z para o layout russo, mas isso não funciona (gera ½ para Ctrl-Y e nada visível para Ctrl-Z). Usar ^ z e ^ y para russo também não funciona, gerando as letras z e y, respectivamente.
Diferente da resposta do Miroxlav eu tive que usar o gancho de teclado ($) para evitar o loop e remover etiquetas (provavelmente copiar erro de colar)
Solução sugerida por Williams:
^SC02c::Send ^y
^SC015::Send ^z
infelizmente não funciona também. Ele gera letras simples 'y' e 'z' no layout russo e nenhuma alteração no layout alemão (Ctrl-Z e Ctrl-Y passados no mapeamento original).
Ainda procurando a solução.