1

Тема: AutoHotkey: скрипт для переключения языка по умолчанию

Скрипт удобно использовать, если язык по умолчанию у вас Русский, а для какой-нибудь проги или игрушки требуется Английский. Вот, например, поставляемый с AutoHotkey SmartGUI.exe не запускается на русском языке по умолчанию. Или решили вы потестить какой-нибудь скрипт с англоязычного AHK-форума, а буржуи все поголовно назначают горячие клавиши по-английски, и они (гор.клав.) тогда не будут работать. Вот тут-то этот скриптик и пригодится. Быстренько изменили язык, поюзали прогу-скрипт, и вернули язык на родину (в прямом смысле ).
Скрипт тестировался на WinXP.
Подробнее про язык по умолчанию можно прочитать в статье http://www.script-coding.com/AutoHotkey … an_3b.html

;************************************************************************************************
; AutoHotkey Version:   1.0.41.01+
; Автор:                Androgen Belkin
; Имя скрипта:          Переключить язык по умолчанию.ahk (v.2.1)
;************************************************************************************************
; Проверить и, если нужно, переключить язык ввода по умолчанию (тот, что при загрузке Windows).
; Первые две раскладки, зарегистрированные в реестре, должны быть либо Английская и Русская, либо наоборот (Русская и Английская).
; Если они другие - скрипт не произведет никаких действий.
;************************************************************************************************
#NoEnv      ; запрещаем имена переменных как у переменных окружения (повышаем производительность скрипта)
#NoTrayIcon ; не показывать иконку скрипта в трее
SPI_SETDEFAULTINPUTLANG = 0x5A ; команда назначения языка по умолчанию
LangRU = 419 ; константа для русского языка
LangEN = 409 ; константа для английского языка

RegRead, Preload_Lang_1, HKEY_CURRENT_USER, Keyboard Layout\Preload, 1 ; прочитать какая первая раскладка (по умолчанию)
RegRead, Preload_Lang_2, HKEY_CURRENT_USER, Keyboard Layout\Preload, 2 ; прочитать какая вторая раскладка

If ( Preload_Lang_1 <> LangRU ; если раскладка по умолчанию не русская и не английская...
    AND Preload_Lang_1 <> LangEN
    OR Preload_Lang_2 <> LangRU ; ...или если вторая раскладка не русская и не английская, то...
    AND Preload_Lang_2 <> LangEN )
{    ; показываем сообщение
    MsgBox, 0, Внимание!, Обнаружены не те раскладки, на которые рассчитана работа скрипта.`n%A_Tab%%A_Tab% Скрипт прерывает свою работу.
    ExitApp ; завершить скрипт    
}
If Preload_Lang_1 = %LangRU% ; если русская, то...
{
    MsgBox, 1, Внимание., Текущий язык ввода по умолчанию - русский.`n`n              Изменить на АНГЛИЙСКИЙ ? ; оформляем сообщение
    IfMsgBox, Cancel ; если "Отмена", то...
        ExitApp ; завершить скрипт
    DllCall( "SystemParametersInfo", UInt, SPI_SETDEFAULTINPUTLANG, UInt, 0, UInt, 4090 . LangEN, UInt, 4 ) ; изменить язык на английский    
    RegWrite, REG_SZ, HKCU, Keyboard Layout\Preload , 1, 00000%LangEN% ; пишем английскую раскладку в реестр
    RegWrite, REG_SZ, HKCU, Keyboard Layout\Preload , 2, 00000%LangRU% ; пишем русскую раскладку в реестр
}
If Preload_Lang_1 = %LangEN% ; если английская, то...
{    
    MsgBox, 1, Внимание., Текущий язык ввода по умолчанию - английский.`n`n                     Изменить на РУССКИЙ ? ; оформляем сообщение
    IfMsgBox, Cancel ; если "Отмена", то...
        ExitApp ; завершить скрипт
    DllCall( "SystemParametersInfo", UInt, SPI_SETDEFAULTINPUTLANG, UInt, 0, UInt, 4090 . LangRU, UInt, 4 ) ; изменить язык на русский    
    RegWrite, REG_SZ, HKCU, Keyboard Layout\Preload , 1, 00000%LangRU% ; пишем русскую раскладку в реестр
    RegWrite, REG_SZ, HKCU, Keyboard Layout\Preload , 2, 00000%LangEN% ; пишем английскую раскладку в реестр
}
Крокодил, крокожу и буду крокодить! (Твёрдое обещание нетрезвого кодера).