PREVED
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору shadow_member Цитата: Часто, но точной закономерности не уловил, при выборе Rus происходит и деактивация S+. | В настройках S+ параметр "Ignore Key" лучше сменить, чтобы он не пересекался с любой из клавиш, которые используются в комбинации для переключения раскладки. Возможно, проблема уйдет. Цитата: Или научить S+ переходить на Eng при выполнении жестов, или уходить от горячих клавиш с буквами. Вот чудо-программа. | Да, можно научить S+ принудительно включать английскую раскладку перед выполнением действия (любого жеста). Код я подсмотрел на официальном форуме (хвала Робу Ларкину) и немного модифицировал под русский язык и нашу задачу. Протестировал на Notepad и Firefox под Windows 7 - работает. Просьба потестировать в Windows 8.1 ! 1. Добавляем код в скрипт Global Lua, а именно во внутрь функции function sp_before_action(gnm, gsx, gsy, gex, gey, gwd, gapp, gact) вставляем: Код: aliencore = alien.core user32 = aliencore.load("user32.dll") gGetKeyboardLayout = user32.GetKeyboardLayout gGetKeyboardLayout:types{ ret = 'long', abi = 'stdcall', 'long'} function aGetKeyboardLayout(threadID) return gGetKeyboardLayout(threadID) end gGetWindowThreadProcessId = user32.GetWindowThreadProcessId gGetWindowThreadProcessId:types{ ret = 'long', abi = 'stdcall', 'long', 'pointer'} function aGetWindowThreadProcessId(hwnd) local threadID = 0 threadID = gGetWindowThreadProcessId(hwnd, threadID) return threadID end | Не забываем про еще один "end" после вышеприведенного кода - его оставляем! 2. Добавляем в жест. В данном примере "закрыть вкладку" в браузере: Код: local iLangID = bit32.rshift(aGetKeyboardLayout(aGetWindowThreadProcessId(acGetOwnerWindowByPoint(gsx,gsy))),16) if iLangID == 1049 then acSendKeys("^+") acDelay(100) acDisplayText("Russian -> English", "Arial", 76, 0, 200, 50, 3000, 500, 400) acSendKeys("^w") --- возвращаем русскую раскладку(если была включена) после выполнения жеста (опционально, раскомментировать две строчки ниже) --- acDelay(100) --- acSendKeys("^+") else acDisplayText("English -> English", "Arial", 76, 0, 200, 50, 3000, 500, 400) acSendKeys("^w") end | Примечания: acSendKeys("^+") - имитирует переключение раскладки. Исходим из того, что раскладок у нас в системе две: Английский (США) и Русский (Россия). В данном примере раскладка переключается комбинацией Ctrl+Shift. Если у вас переключение между языками Alt+Shift(или иной комбинацией) - меняем соответственно. acSendKeys("^w") - посылаем Ctrl+W для закрытия вкладки. Эта команда в скрипте прописывается в двух строчках. acDisplayText... - строчки для тестирования срабатывания. В рабочих условиях убираются. --- - закомментированы две строчки, которые возвращают русскую раскладку (уже после выполнения жеста в английской). В Windows 8.1. возможно придется поиграться с системной настройкой "индвидуальная раскладка для приложений". | Всего записей: 1988 | Зарегистр. 10-03-2006 | Отправлено: 00:01 22-02-2015 | Исправлено: PREVED, 14:18 22-02-2015 |
|