1 (изменено: Dimas, 2012-05-25 14:00:59)

Тема: AHK: Проблема с раскладкой в AHK в игре при автопечатании

Вот пример скрипта

!Numpad5::SendInput, {f6}/gps{}

( F6 - открывает чат )
Если раскладка русская, то пишет какую-то дребедень: "//a 39/a 39/a 39/♠a/a 39////♠a//♠a//♠a////////////"
Если английская, то все нормально.
ОС - Windows 7, до этого на XP все норм было. Также на Vista пробовал. Там тоже с раскладками путаница.
Также пробовал так скрипт написать:

XButton1 & 3::Send,{F6}/tskill{enter}

Пишет те же знаки, только уже бесконечно с новой строки.
( AHK запускаю в режиме совместимости с XP S.P. 3 )
Можете дать ссылочку на AHK специально для Windows7 или команду правильную дать?
Или скрипт, который переключает раскладку на EN...

2

Re: AHK: Проблема с раскладкой в AHK в игре при автопечатании

Можете дать ссылочку на AHK специально для Windows7 или команду правильную дать?
Или скрипт, который переключает раскладку на EN...

Переключать раскладку можно оправкой нажатия клавиш, используемых для смены раскладки.
Рекомендуется использовать актуальные версии ahk : AutoHotkey_L_Install

3

Re: AHK: Проблема с раскладкой в AHK в игре при автопечатании

Переключение раскладки активного окна на "en":

SetFormat, IntegerFast, H
VarSetCapacity(List, A_PtrSize*2)
DllCall("GetKeyboardLayoutList", Int, 2, Ptr, &List)
Locale1 := NumGet(List)
b := SubStr(Locale2 := NumGet(List, A_PtrSize), -3) = 0409
En := b ? Locale2 : Locale1
Ru := b ? Locale1 : Locale2

SendMessage, WM_INPUTLANGCHANGEREQUEST := 0x50,, En,, A

Ну, или просто так:

SendMessage, WM_INPUTLANGCHANGEREQUEST := 0x50,, 0x04090409,, A   ; теоретически, может сработать не на всех клавиатурах
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: YMP, 2012-05-26 06:52:15)

Re: AHK: Проблема с раскладкой в AHK в игре при автопечатании

teadrinker

; теоретически, может сработать не на всех клавиатурах

А как тут может повлиять клавиатура?

Или имеется в виду, что на компе другая раскладка английского?

5

Re: AHK: Проблема с раскладкой в AHK в игре при автопечатании

Уже подзабыл, что означает первая часть идентификатора локали, почему-то думал, что она может зависеть от железа. На MSDN ничего внятного не нашёл. А что на самом деле?

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

6 (изменено: Александр_, 2012-05-26 22:44:30)

Re: AHK: Проблема с раскладкой в AHK в игре при автопечатании

teadrinker пишет:

Уже подзабыл, что означает первая часть идентификатора локали, почему-то думал, что она может зависеть от железа. На MSDN ничего внятного не нашёл. А что на самом деле?

Кстати интересный вопрос . Возьму на себя смелость его пояснить- тут имеется ввиду не "идентификатора локали"(т.е. LCID), а HKL(это скорее "идентификатор раскладки"). А "первая часть"- это старшее слово. Тут мы действительно имеем дело с идентификатором устройства(MSDN гарантирует(четвёртый абзац)). Я всегда указывал ноль, т.е. устройство по-умолчанию, но выходит, что устройств ввода может быть несколько и каждое иметь свою раскладку? Но тогда как пользователь узнает на каком языке он печатает? Короче я запутался .

7

Re: AHK: Проблема с раскладкой в AHK в игре при автопечатании

Старшее слово меняется при изменении раскладки, т.е. расположения виртуальных клавиш на реальных клавишах. Например, английский с раскладкой Дворака будет F0020409, а русский с раскладкой Машинопись — F0080419. Можно установить для каждого языка несколько раскладок и переключаться между ними. Если указать в WM_INPUTLANGCHANGEREQUEST раскладку (старшее слово), которая не установлена для данного языка, то переключение на этот язык не происходит. По кр. мере я так вижу по своим экспериментам. Ноль, видимо, означает раскладку по умолчанию для данного языка.

8

Re: AHK: Проблема с раскладкой в AHK в игре при автопечатании

YMP пишет:

Старшее слово меняется при изменении раскладки, т.е. расположения виртуальных клавиш на реальных клавишах. Например, английский с раскладкой Дворака будет F0020409, а русский с раскладкой Машинопись — F0080419. Можно установить для каждого языка несколько раскладок и переключаться между ними. Если указать в WM_INPUTLANGCHANGEREQUEST раскладку (старшее слово), которая не установлена для данного языка, то переключение на этот язык не происходит. По кр. мере я так вижу по своим экспериментам. Ноль, видимо, означает раскладку по умолчанию для данного языка.

Спасибо, я что-то не подумал о возможности перестановки клавиш без смены набора символов . Но я ЙЦУКЕН не на что не променяю и плевать мне на запятую в верхнем регистре .

9

Re: AHK: Проблема с раскладкой в AHK в игре при автопечатании

По поводу запятой в вернем регистре в йцукен:

#If GetKeyboardLayout("A") = 1049
    :*?:.::,
    :*?:,::.
#If

GetKeyboardLayout(window)
{
    return DllCall("GetKeyboardLayout", "uint", DllCall("GetWindowThreadProcessId", "Int", WinExist(window), "Int", 0), "UShort")
}