Я подражаю другой жертве хаоса раскладки клавиатуры, которая страдает от аналогичной, но немного другой проблемы.
Я часто использую немецкую и русскую раскладки клавиатуры на своей рабочей станции Windows 10 и часто переключаюсь между ними. Проблема связана с тем, что буквы Y и Z переключаются в немецкой раскладке клавиатуры по сравнению со стандартной английской раскладкой QWERTY.
Если я использую немецкую раскладку, ярлык отмены (Ctrl-Z) привязывается к клавише Z, которая находится в середине первой строки букв между T и U. Повтор (Ctrl-Y) привязывается к клавише Y , который расположен слева от X в нижнем ряду букв на немецкой раскладке QWERTZ.
Если вы переключите раскладку на русский, вдруг случится что-то плохое. Сочетания клавиш «Отменить» и «Повторить» взаимно меняют положение на клавиатуре. Отменить (Ctrl-Z) теперь находится в Y (нижний ряд, слева от X) и Отменить в Z (верхний ряд, между T и U). Это местоположение идентично расположению Ctrl-Z и Ctrl-Y на стандартной английской раскладке клавиатуры.
Это означает, что расположение ярлыков «Отменить» и «Повторить» меняется на противоположное все время, пока я переключаю раскладку клавиатуры. Как вы можете себе представить, я всегда нажимаю не на тот ярлык, потому что невозможно выучить два колебательных противоположных паттерна, по крайней мере, мой протест позвоночника. Поскольку я очень часто использую ярлыки «Отменить» и «Повторить», такое поведение меня сильно раздражает.
Я хочу исправить физическое расположение (ключи) ярлыков «Вернуть» и «Отменить» во всем наборе приложений Windows либо на немецком, либо на английском языке.
Постоянное использование английской раскладки для всех видов латинских текстов, хотя и устраняет проблему с переходом по ярлыкам «Отменить / Повторить», но для меня это не вариант, потому что мне нужно набирать немецкие тексты со всеми умлаутами и ß (не предлагать международную разметку для введите акценты, потому что немецкий является моим основным языком, и я хочу набирать его родные буквы одним нажатием клавиши).
Как уже упоминал коллега в упомянутом вопросе, в Интернете нет очевидного ответа. Та же проблема решается в Ubuntu путем создания настраиваемой раскладки клавиатуры. Я не могу найти информацию о создании собственного макета для Windows или исправлении текущего.
Такое поведение одинаково для всех известных мне версий Windows и тесно связано с первоначальной конструкцией раскладки клавиатуры, которая просто несовместима для пользователей, использующих немецко-русскую языковую пару, как я.
Хорошее решение должно быть реализовано в Windows напрямую без какого-либо дополнительного программного обеспечения или только бесплатного программного обеспечения с открытым исходным кодом. Рабочие решения с участием AutoHotKey приветствуются.
С помощью @miroxlav я придумал этот полуработающий скрипт AHK:
; 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
Этот скрипт отлично переназначает Ctrl-Y <-> Ctrl-Z в немецкой раскладке, но повреждает обе горячие клавиши в русской раскладке. Я использую ^ н и ^ я с надеждой эмулировать эквиваленты скан-кода Ctrl-Y или Ctrl-Z для русской раскладки, но это не работает (генерирует н для Ctrl-Y и ничего не видно для Ctrl-Z). Использование ^ z и ^ y для русского также не работает, генерируя буквы z и y соответственно.
В отличие от ответа Miroxlav мне пришлось использовать хук клавиатуры ($), чтобы избежать зацикливания и удаления меток (возможно, ошибка копирования и вставки)
Решение, предложенное Уильямсом:
^SC02c::Send ^y
^SC015::Send ^z
к сожалению тоже не работает. Он генерирует простые буквы 'y' и 'z' в русской раскладке и без изменений в немецкой раскладке (Ctrl-Z и Ctrl-Y пропущены в исходном отображении).
Все еще ищу решение.