Получение текущей раскладки в Windows 10

Разработка Far.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Получение текущей раскладки в Windows 10

Post by John Doe »

Latest post of the previous page:

2useven10 wrote: Fri 23 Aug, 2019 22:09 вроде бы работает...
У меня при любой из 2х раскладок выдаёт 0x04090409.

Update
После перезапуска фара заработало.
Last edited by John Doe on Sun 25 Aug, 2019 12:59, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Получение текущей раскладки в Windows 10

Post by John Doe »

Удалось воспроизвести.
Не работает после обновления фара плагином UpdateEx, после того как обновлённый фар перезапускается в той же консоли.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Получение текущей раскладки в Windows 10

Post by John Doe »

Вот тут описан намного более простой способ получения раскладки.

Code: Select all

local ffi = require("ffi")
ffi.cdef[[
HWND GetConsoleWindow(void);
HWND ImmGetDefaultIMEWnd(HWND unnamedParam1);
DWORD GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId);
DWORD GetKeyboardLayout(DWORD threadId);
]]
local C = ffi.C
local imm32 = ffi.load("Imm32.dll")
local hwnd = C.GetConsoleWindow()
local IMEWnd = imm32.ImmGetDefaultIMEWnd(hwnd)
local threadID = C.GetWindowThreadProcessId(IMEWnd, nil)
local inputLocaleID = C.GetKeyboardLayout(threadID)
far.Show(("%x"):format(inputLocaleID))
Такое в фар можно?
https://t.me/FarManager — Telegram чат
Post Reply

Return to “Development”