Что нового

Применение макроса @KBLayout приводит к смене языка ввода

vitaliy4us

Новичок
Сообщения
158
Репутация
4
1. Установить русский язык ввода
2. Запустить скрипт
Код:
MsgBox(0,"", @KBLayout)

3. Язык ввода тут же меняется на английский и выдается код языка ввода - английский.
4. Таким образом, при помощи скрипта не получается определить установленный язык ввода.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
дай угадаю, язык по умолчанию - английский?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
vitaliy4us
вся магия в том, что при открытии нового окна язык автоматически переключается на язык по умолчанию. в твоем случае - это окно msgbox. его то ты и выводишь.
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Kaster сказал(а):
vitaliy4us
вся магия в том, что при открытии нового окна язык автоматически переключается на язык по умолчанию. в твоем случае - это окно msgbox. его то ты и выводишь.
Согласен, но и так получаем тот же результат (вывод только английского языка):
Код:
$lang = @KBLayout
;И только с этой строкой
ConsoleWrite($lang)
;И только с этой строкой
MsgBox(0, "", $lang)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
vitaliy4us [?]
и так получаем тот же результат
Потому что у каждого скрипта (не CUI) есть скрытое окно, на него и действует переключение.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
vitaliy4us [?]
при помощи скрипта не получается определить установленный язык ввода.
Если нужен язык ввода активного приложения, то можно сделать так:

Код:
#include <WinAPIEx.au3>

$hWin = WinGetHandle('[ACTIVE]')

$iLayout = _WinAPI_GetKeyboardLayout($hWin)
$sLocale = _WinAPI_GetLocaleInfo(BitAND($iLayout, 0xFFFF), $LOCALE_SENGLANGUAGE)

MsgBox(64, 'Title', $sLocale & ' (' & $iLayout & ')')
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Если нужен язык ввода активного приложения, то можно сделать так: ...

Скачал WinAPIEx.au3, но все равно ругается на константу $LOCALE_SENGLANGUAGE, очевидно надо включить еще какой-то файл. Пробовал
Код:
<#include WindowsConstants.au3>
не помогло. И, пожалуйста, объясните вот это действие:
Код:
$sLocale = _WinAPI_GetLocaleInfo(BitAND($iLayout, 0xFFFF), $LOCALE_SENGLANGUAGE)



Добавлено:
Сообщение автоматически объединено:

Нашел еще вот это:
Код:
#include <WinAPIEx.au3>

$GetLang = Hex(_WinAPI_GetKeyboardLayout(WinGetHandle('[ACTIVE]')), 4)

MsgBox(0,"", $GetLang)


Работает, и судя по нему $LOCALE_SENGLANGUAGE = 4. С этим значением ваш код тоже работает, выдает язык и в скобках какое-то число. Но хотелось бы понимать, что происходит в обоих вариантах.
 
Верх