1 (изменено: dorianleven, 2017-02-02 16:07:29)

Тема: AHK: Раскладка клавиатуры в зависимости от программы

Привет всем. Я в работе использую Autodesk Maya, чтобы в ней работали хоткеи должен быть установлен Англ. язык.
Переключение языка сделал на англ, но встал вопрос как вернуть на предыдущий язык когда окно перестает быть активным?
Копался на форуме, но не нашел подходящий блок кода. По задумке скрипт запоминает текущую раскладку и переключает ее при активации Maya на англ, когда окно становится неактивным возвращает предыдущую раскладу.  На данный момент он всегда переключает на русский, когда окно становится неактивным. Подскажите, пожалуйста, как исправить.

Сборная солянка:

#SingleInstance force
SetFormat, Integer, H
state := 0
Loop
{
   
GetInputLangID(window)
{
    If !(hWnd := WinExist(window))
        return
 
    WinGetClass, Class
 
    if (Class == "ConsoleWindowClass")
    {
        WinGet, consolePID, PID
        DllCall("AttachConsole", Ptr, consolePID)
        VarSetCapacity(buff, 16)
        DllCall("GetConsoleKeyboardLayoutName", Str, buff)
        DllCall("FreeConsole")
        langID := "0x" . SubStr(buff, -3)
    }
    Else
        langID := DllCall("GetKeyboardLayout", Ptr, DllCall("GetWindowThreadProcessId", Ptr, hWnd, UInt, 0, Ptr), Ptr) & 0xFFFF
 
    return langID
}
 
GetInputLangName(langId)
{
    Size := (DllCall("GetLocaleInfo", UInt, langId, UInt, 0x1001, UInt, 0, UInt, 0) * 2)   ; LOCALE_SENGLANGUAGE := 0x1001
    VarSetCapacity(localeSig, Size, 0)
  curlng:= DllCall("GetLocaleInfo", UInt, langId, UInt, 0x1001, Str, localeSig, UInt, Size)
    return localeSig
}
{
WinWaitActive, Autodesk Maya
{
state := 1
}
if (state=1)
{
PostMessage, 0x50,, 0x4090409,, A ; english layout
SetCapsLockState, off
}
WinWaitNotActive, Autodesk Maya
{
state := 0
}

if (state=0)
{
   PostMessage, 0x50,, % langID,, A ;
}
}
}

2

Re: AHK: Раскладка клавиатуры в зависимости от программы

dorianleven
Добавил префикс в заголовок. В следующие разы делайте это самостоятельно.
Правила в шапке форума к прочтению обязательны.

3

Re: AHK: Раскладка клавиатуры в зависимости от программы

Flasher
Спасибо, учту

4

Re: AHK: Раскладка клавиатуры в зависимости от программы

dorianleven
Также учтите, что в конце предложений точки обязательны (исправьтесь), как и выполнение других правил. Лучше сперва прочесть, прежде чем опять нарушать.