Скрипт не меняет язык ввода в некоторых окнах

Помощь в написании скриптов
Yurimi
Posts: 2
Joined: 27 Nov 2018, 16:35

Скрипт не меняет язык ввода в некоторых окнах

29 Nov 2018, 02:44

Здравствуйте, есть вот такой, не лучшим образом сделанный скрипт:

Code: Select all

   ;--------------------; Keyboard Layout for Language ;--------------------;
 ; For [LAlt]+[LShift] Button key
#IfWinActive
~LAlt & ~LShift::
	SetFormat, Integer, H
	LocaleRussian=0x4090409		; English Language
	LocaleEnglish=0x4190419		; Russian Language
	LocaleWinID := WinExist("A")
	ThreadID:=DllCall("GetWindowThreadProcessId", "Int", LocaleWinID, "Int", "0")
	InputLocaleID:=DllCall("GetKeyboardLayout", "Int", ThreadID)

	If(InputLocaleID!=LocaleRussian)
	{
		PostMessage, 0x50,, % LocaleRussian,, A
	}
	Else
	{
		If(InputLocaleID!=LocaleEnglish)
			PostMessage, 0x50,, % LocaleEnglish,, A
	}
	Return

 ; For [LShift]+[LAlt] Button key
#IfWinActive
~LShift & ~LAlt::
	SetFormat, Integer, H
	LocaleRussian=0x4090409		; English Language
	LocaleEnglish=0x4190419		; Russian Language
	LocaleWinID := WinExist("A")
	ThreadID:=DllCall("GetWindowThreadProcessId", "Int", LocaleWinID, "Int", "0")
	InputLocaleID:=DllCall("GetKeyboardLayout", "Int", ThreadID)

	If(InputLocaleID!=LocaleRussian)
	{
		PostMessage, 0x50,, % LocaleRussian,, A
	}
	Else
	{
		If(InputLocaleID!=LocaleEnglish)
			PostMessage, 0x50,, % LocaleEnglish,, A
	}
	Return

 ; For [LControl]+[LAlt] Button key
#IfWinActive
~LControl & ~LAlt::
	LocaleJapan=0x4110411		; Japan Language
	PostMessage, 0x50,, % LocaleJapan,, A
	Sleep 50
	Send !{CapsLock}		; Katakana
	Return

 ; For [LAlt]+[LControl] Button key
#IfWinActive
~LAlt & ~LControl::
	LocaleJapan=0x4110411		; Japan Language
	PostMessage, 0x50,, % LocaleJapan,, A
	Sleep 50
	Send ^{CapsLock}		; Hiragana
	Return
 ;;;
В большинстве приложений скрипт меняет язык ввода, но при выборе активным окна "Найти" в Notepad++ скрипт язык ввода уже не меняет, хоть окно и находит и проверку языка делает. В целом, это относится также и к любым другим "диалоговым окнам" (к примеру тем, что можно вызвать в браузере, нажав "Сохранить как")
Проблема, как мне видится, связана с PostMessage. Как эту проблему исправить я не знаю, особого опыта работы с ahk нет, про вики знаю, но и там не получилось разобраться в проблеме. Надеюсь на вашу помощь;

P.S. Дополнительными, не столь важным вопросами-
1) Можно ли при смене языка ввода сразу указать способов ввода? Чтобы не ставить Хирагану или Катакану через комбинации клавиш, а обойтись чем-то на уровне PostMessage?
2) Можно ли объединить ~LAlt & ~LShift и ~LShift & ~LAlt в одну комбинацию? Их пришлось продублировать со сменной порядка, потому что этот самый порядок нажатия клавишь для их исполнения важен.

Спасибо за ваше время
serzh82saratov
Posts: 137
Joined: 01 Jul 2017, 03:04

Re: Скрипт не меняет язык ввода в некоторых окнах

03 Apr 2019, 10:25

при выборе активным окна "Найти" в Notepad++ скрипт язык ввода уже не меняет

Code: Select all

LocaleRussian=0x4090409		; English Language
LocaleEnglish=0x4190419		; Russian Language

~LAlt & ~LShift::
~LShift & ~LAlt::
	ThreadID := DllCall("GetWindowThreadProcessId", "Int", WinExist("A"), "Int", "0")
	InputLocaleID := DllCall("GetKeyboardLayout", "Int", ThreadID)
	ControlGetFocus, ControlNN, A
	PostMessage, 0x50, , % InputLocaleID != LocaleRussian ? LocaleRussian : LocaleEnglish, %ControlNN%, A
	Return
1) Можно ли при смене языка ввода сразу указать способов ввода? Чтобы не ставить Хирагану или Катакану через комбинации клавиш, а обойтись чем-то на уровне PostMessage?
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10113487565 Наверное так, но у меня не удалось.

Return to “Помощь”

Who is online

Users browsing this forum: No registered users and 21 guests