1

Тема: AHK: Смена раскладки клавиатуры в активном окне GUI

Доброго времени суток!
Столкнулся тут с проблемой. Не могу сменить раскладку клавиатуры в окне GUI. В любом другом меняется, без проблем. Но только не в GUI. Что я делаю не так? Или чего я не знаю?
Вот, простейшее окошко GUI. Раскладка меняется в любом другом окне, какое задашь, кроме самого окна GUI:

Gui, Add, Text,, Тест-окошко
Gui, Add, Edit, vMyVar
Gui, Add, Button,, Продолжить
Gui, Add, Button,, Отмена
Gui, Show
WinActivate, ahk_class AutoHotkeyGUI
SendMessage, 0x50, 0, 0x4090409,, ahk_class AutoHotkeyGUI
Return

ButtonОтмена:
GuiClose:
ExitApp

2

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

А какой язык у вас по умолчанию и на какой хотите сменить?

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

3 (изменено: vospa, 2016-05-02 03:17:41)

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Ух! Спасибо! :-) Теперь буду пытаться понять, почему так работает, а в моем варианте нет :-)
ПЫ.СЫ. Вот те раз, пока писал, комментарий пропал... Хотя, все заработало.

В моем конкретном случае, по умолчанию русский, сменить на английский. Но в общем случае, с любого на любой (русский/английский)

4

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

serzh82saratov пишет:

Не видел твой вопрос, удалил.

Я просто хотел, чтоб автор задал вопрос более внятно. Предложенный тобой вариант заменяет раскладку во всех окнах процесса, а не в одном.

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

5

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Есть такое дело, а кстати в окне кажется посылать надо в контрол в фокусе, или другой метод есть.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

vospa пишет:

В моем конкретном случае, по умолчанию русский, сменить на английский. Но в общем случае, с любого на любой (русский/английский)

В общем случае так:

ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 0x2,, %CtrlFocus%, A
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

teadrinker пишет:
serzh82saratov пишет:

Не видел твой вопрос, удалил.

Я просто хотел, чтоб автор задал вопрос более внятно. Предложенный тобой вариант заменяет раскладку во всех окнах процесса, а не в одном.

Во всех GUI окнах скрипта? Ну, для текущей конкретной задачи, мне этого достаточно. Так как окно только одно. Для начала, мне теперь нужно переварить ответ и понять, почему так заработало.
Большое спасибо!

8

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

teadrinker пишет:

В общем случае так:

Большое спасибо! Вот тут все понятно. А предыдущий вариант буду осмысливать :-)

9

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

serzh82saratov пишет:

посылать надо в контрол в фокусе

Я про то что, мало ли:


Gui, Show, w111 h111 
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 0x2,, %CtrlFocus%, A
Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

vospa пишет:

Для начала, мне теперь нужно переварить ответ и понять, почему так заработало.

У процесса скрипта есть главное скрытое окно, поэтому, если послать сообщение ему, сменится раскладка у всех окон. У вас не заработало, потому что в фокусе Edit, а сообщение посылается окну вообще.

serzh82saratov пишет:

Я про то что, мало ли:

Ну вот, опять не увидел!

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

11

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Ммм, если контрола нет, язык не меняет, или ты про что "не увидел".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

teadrinker пишет:

У процесса скрипта есть главное скрытое окно, поэтому, если послать сообщение ему, сменится раскладка у всех окон. У вас не заработало, потому что в фокусе Edit, а сообщение посылается окну вообще.

Ааа... вон оно что...
Обычно стараюсь сам понять и разобраться. Но вот с этим уже пару дней периодически открывал, пробовал, и ничего не получалось. Потому и решил спросить на форуме :-) Большое спасибо!

13

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

serzh82saratov пишет:

Ммм, если контрола нет, язык не меняет

Да, действительно, так не меняет. Но окон без контролов обычно не бывает. Вот так уже работает:

Gui, Add, Text
Gui, Show, w111 h111
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 0x2,, %CtrlFocus%, A
Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14 (изменено: serzh82saratov, 2016-05-02 03:46:41)

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Бывает всяко, может контрол потом добавляется, опять же окно при показе может не активизироватся, ждать активации?

Gui, Add, Text
Gui, Show, NA w111 h111
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 0x2,, %CtrlFocus%, A
Return

Просто если даже контролов нет, при нажатии соответственных смене языка клавиш, он меняется, потому интересно как оно может ещё "делатся".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

serzh82saratov пишет:

Бывает всяко, может контрол потом добавляется, опять же окно при показе может не активизироватся, ждать активации?

Ну, по-моему, здесь надуманная проблема. Какой смысл менять раскладку, если нет элемента ввода? Если нужно сменить раскладку неактивного окна, можно обращаться к нему по-другому, через хэндл или заголовок.

serzh82saratov пишет:

при нажатии соответственных смене языка клавиш, он меняется

Например, вот так при нажатии системных клавиш для смены раскладки, раскладка меняется у обоих окон:

Gui, Show, x300 w111 h111
Gui, 2:Show, x500 w111 h111

Видимо, система как раз посылает главному окну.
Хотя, вот так тоже меняется у обоих, как я заметил:

Gui, Show, x300 w111 h111
Gui, 2:Add, Text
Gui, 2:Show, x500 w111 h111
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 0x2,, %CtrlFocus%, A
Return

Так что моё «в общем случае» скорее имеет смысл для окна вообще, а не именно для окна AHK.

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

16 (изменено: serzh82saratov, 2016-05-02 04:10:05)

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Если нужно сменить раскладку неактивного окна, можно обращаться к нему по-другому, через хэндл или заголовок.

Это понятно, но контрола в фокусе нет до его активации.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Да, тогда согласен, в этом случае можно посылать главному окну скрипта.

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

18

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Хотя и не обязательно. Вот так без включения DetectHiddenWindows, On:

Gui, +LastFound
Gui, Add, Text
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 0x2,, Static1
Gui, Show, NA w300 h300
Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Язык ввода — это свойство не окна, а потока. Поэтому он и меняется для всех окон, созданных потоком (а не всем процессом).

20

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Ну в AHK же вроде всего один реальный поток, так что здесь это без разницы.

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

21

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

teadrinker пишет:

Хотя и не обязательно. Вот так без включения DetectHiddenWindows, On:

Gui, +LastFound
Gui, Add, Text
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 0x2,, Static1
Gui, Show, NA w300 h300
Return

Можно и так:

Gui, Add, Text, hwndhText
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 0x2,,, ahk_id %hText%
Gui, Show, NA w300 h300
Return

Если без DetectHiddenWindows, то в общем случае так:

DllCall("PostMessage", "Ptr", A_ScriptHWND, "UInt", WM_INPUTLANGCHANGEREQUEST := 0x50, "UInt", INPUTLANGCHANGE_FORWARD := 0x2, "UInt", 0x00)
Gui, Show, NA w300 h300
Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

Раз нельзя для каждого окна свою раскладку, то последний вариант лучше всего.

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

23

Re: AHK: Смена раскладки клавиатуры в активном окне GUI

О как, дискуссия продолжилась. Спасибо, почерпнул для себя массу нового :-)