1 (изменено: Utopia, 2021-03-31 05:20:13)

Тема: AHK: Переключение клавиатуры в Windows 10

Так как в Windows 10 постоянно слетают назначенные клавиши переключения языка (не могу побороть уже неделю) и по сути проблема тянется с какого то обновления 2018 года решил попробовать переключать языки через ahk

^+1::SendMessage, 0x50,, 0x4090409,, A ; 
^+2::SendMessage, 0x50,, 0x4190419,, A ; 
^+3::SendMessage, 0x50,, 0xF0A80422,, A ; 

работает не во всех программах - Notepad++ работает, word2019 работает только русский английский, а просто на рабочем столе не работает вообще.
Как побороть?

2

Re: AHK: Переключение клавиатуры в Windows 10

В большинстве случаев работает этот код:

ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, 0x4090409,, %CtrlFocus%, A

На десятке некоторые окна могут иметь более высокие привилегии, чем скрипт, с такими будет работать только запущенный от админа либо через AutoHotkeyU(64/32)_UIA.exe.

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

3 (изменено: Utopia, 2021-03-31 14:25:59)

Re: AHK: Переключение клавиатуры в Windows 10

teadrinker
Спасибо. Про AutoHotkeyU64_UIA.exe в курсе.
Но этот код у меня - просто циклически переключает раскладку - с этим у меня проблем нет (Ctrl+Shift - работает)
Мне хотелось бы назначить конкретную комбинацию на конкретную раскладку.
Поэксперементировал - любой шорткат вызывает циклическое переключение - Ctrl+Shift+4,Ctrl+Shift+5,Ctrl+Shift+6 работают одинаково

^+4::
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, 0x4090409,, %CtrlFocus%, A
return
^+5::
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, 0x4190419,, %CtrlFocus%, A
return
^+6::
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50, 0xF0A80422,, %CtrlFocus%, A
return

4

Re: AHK: Переключение клавиатуры в Windows 10

А, не туда раскладку вставил, так правильно:

^+4::
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50,, 0x4090409, %CtrlFocus%, A
return
^+5::
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50,, 0x4190419, %CtrlFocus%, A
return
^+6::
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST := 0x50,, 0xF0A80422, %CtrlFocus%, A
return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Переключение клавиатуры в Windows 10

Или так:

^+4::
^+5::
^+6::
WM_INPUTLANGCHANGEREQUEST := 0x50
Layouts := [0x409, 0x419, 0x422]
ControlGetFocus, CtrlFocus, A
PostMessage, WM_INPUTLANGCHANGEREQUEST,, Layouts[ SubStr(A_ThisHotkey, 0) - 3 ], %CtrlFocus%, A
return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Переключение клавиатуры в Windows 10

teadrinker
Работает! Спасибо!
... на всякий может кому пригодится  - получить код установленного языка можно  -


F11::
  SetFormat, Integer, H
  WinGet, WinID,, A
  ThreadID:=DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
  InputLocaleID:=DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
  MsgBox, %InputLocaleID%
Return

Например у меня русский стоял  не 0x4190419 (RU-ru), a 0x419200 (Russian(Ukraine))