Тема: 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 ;
}
}
}