Как узнать текущую раскладку клавиатуры в консольном окне с указанным дескриптором окна?
Для окна с графическим интерфейсом это возможно через:
const auto threadId = ::GetWindowThreadProcessId(hwnd, nullptr);
const auto hkl = ::GetKeyboardLayout(idThread);
Но этот подходне работает для консольных окон.
После некоторого google'ing я получил следующие результаты:
Начиная с Win7, можно получить раскладку клавиатуры для консольного приложения.из conhost.exe
процесса, который является дочерним процессом cmd.exe
.Немного более подробной информации можно найти здесь:
https://autohotkey.com/board/topic/43043-get-current-keyboard-layout/
Но в этом вопросе:
c ++, как мне получить текущий процесс консоли conhost Я нашелкомментарий @RaymondChen о том, что conhost.exe
- это деталь реализации, которая может отсутствовать в некоторых версиях Windows.
Таким образом, нестандартный обходной путь представляется возможным.Но есть ли какой-нибудь стандартный, совместимый способ получить правильный результат?
PS, подобный вопрос задается здесь:
GetKeyboardLayout () в некоторых случаях не работает должным образом
Но он не имеет ответа на мой вопрос.