1 (изменено: andreyr.2019, 2025-11-07 19:21:24)

Тема: AHK: Автоматическое переключение между альтернативными раскладками

Здравствуйте, помогите, пожалуйста, реализовать простую идею: мне нужен скрипт, который изменяет раскладку клавиатуры с «Qwerty» на «Colemak DH», когда в Windows активен английский язык ввода, и чтобы этот же скрипт также изменял раскладку с «Йцукен» на «Диктор», когда в качестве языка ввода активен русский.

2 (изменено: andreyr.2019, 2025-11-07 19:22:20)

Re: AHK: Автоматическое переключение между альтернативными раскладками

Это примитивный шаблон, который я сделал сам на базе файла с гитхаба проекта Colemak DH, в оригинале тут было только изменение англ. раскладки, я также добавил изменение русской, и скрипт перестал нормально работать из-за конфликтов переназначений, наверно нужно добавить какие-то функции типа OnInputLanguageChange, if-else и т. д., но я не знаю как.

; Первая секция скрипта - Переназначение Йцукен на Диктор


; Верхний ряд клавишь 

й::ф
ц::ь
у::х
к::я
е::ы
н::з
г::в
ш::к
щ::д
з::ч


; Средний ряд клавишь

ф::у
ы::и
в::е
а::о
п::а
р::л
о::н
л::т
д::с
ж::р


; Нижний ряд клавишь

я::щ
ч::ш
с::э
м::ю
и::ц
т::б
ь::м
б::п
ю::г
.::ж

; Вторая секция скрипта - Переназначение Qwerty на Colemak

; Верхний ряд клавишь 

q::q
w::w
e::f
r::p
t::b
y::j
u::l
i::u
o::y
p::;

; Средний ряд клавишь

a::a
s::r
d::s
f::t
g::g
h::m
j::n
k::e
l::i
;::o

; Нижний ряд клавишь

z::z
x::x
c::c
v::d
b::v
n::k
m::h

Буду рад любой помощи, заранее спасибо всем, кто решит ответить.

3 (изменено: andreyr.2019, 2025-11-07 19:25:29)

Re: AHK: Автоматическое переключение между альтернативными раскладками

Решение которое выдал YandexGPT, выдаёт ошибки и неправильно переназначает почему-то, хотя переназначения написаны верно. Может кто-то сможет допилить

#SingleInstance force

; === Настройки: ID раскладок ===
; Основные языки (их "базовые" ID, как они видны в системе)
englishLayoutID := 0x00000409  ; Английский (US QWERTY)
russianLayoutID := 0x00000419  ; Русский (ЙЦУКЕН)

; Целевые раскладки (нужно узнать и подставить свои!)
targetEnglishLayout := 0x00010409  ; Пример ID для Colemak DH
targetRussianLayout := 0x00020419  ; Пример ID для Диктор

; --- Обработчик события смены языка ввода ---
OnInputLanguageChange => {
    currentID := GetKeyboardLayout()

    if (currentID == englishLayoutID) {
        if (GetKeyboardLayout() != targetEnglishLayout) {
            SetKeyboardLayout(targetEnglishLayout)
            ToolTip("Colemak DH (EN)", 100, 100)
            Sleep(1000)
            ToolTip("")  ; убрать подсказку
        }
    }
    else if (currentID == russianLayoutID) {
        if (GetKeyboardLayout() != targetRussianLayout) {
            SetKeyboardLayout(targetRussianLayout)
            ToolTip("Диктор (RU)", 100, 100)
            Sleep(1000)
            ToolTip("")  ; убрать подсказку
        }
    }
}

; --- Вспомогательные функции ---

GetKeyboardLayout() {
    threadID := DllCall("GetWindowThreadProcessId", "ptr", WinExist("A"), "ptr*", 0)
    return DllCall("GetKeyboardLayout", "ptr", threadID, "uint")
}

SetKeyboardLayout(layoutID) {
    DllCall("user32.dll\ActivateKeyboardLayout", "ptr", layoutID, "uint", 0)
}

; --- Горячие клавиши для диагностики ---

^!L::  ; Ctrl+Alt+L — принудительное переключение
    OnInputLanguageChange()
    MsgBox("Переключение выполнено!")
return

^!I::  ; Ctrl+Alt+I — показать текущий ID раскладки
    current := GetKeyboardLayout()
    MsgBox("Текущий ID раскладки: 0x" . Format("{:08X}", current))
return

4

Re: AHK: Автоматическое переключение между альтернативными раскладками

Так а зачем вы пытаетесь изменить раскладку через переназначение клавиш? Её же просто установить можно, и переключать, как обычно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: andreyr.2019, 2025-11-07 21:07:07)

Re: AHK: Автоматическое переключение между альтернативными раскладками

Если Вы имеете ввиду установочные пакеты Microsoft keyboard layout creator, то у меня нестандартная клавиатура (Dygma Defy) и компоновка клавиш некоторые из которых эта бородатая программа не распознает, поэтому и прошлось прибегнуть к AHK teadrinker

6

Re: AHK: Автоматическое переключение между альтернативными раскладками

Я не знаком, к сожалению, с клавиатурой Dygma Defy. Но вы можете проверить, выдаёт ли она виртуальные коды клавиш таким скриптом:

#Requires AutoHotkey v1

#Persistent
#InstallKeybdHook
KeyHistory

Понажимайте клавиши, и нажмите F5. Если виртуальные коды появляются, нужно просто найти готовую раскладку где-нибудь на GitHub, и установить её.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder