WinAPI 如何获取控制台应用程序的键盘布局

Ale*_*iuk 6 c++ windows winapi

如何知道提供了窗口句柄的控制台窗口的当前键盘布局?

对于 GUI 窗口,可以通过以下方式:

const auto threadId = ::GetWindowThreadProcessId(hwnd, nullptr);
const auto hkl = ::GetKeyboardLayout(idThread);
Run Code Online (Sandbox Code Playgroud)

但这种方法不适用于控制台窗口。

经过一番谷歌搜索后,我得到了以下结果:

  1. 从 Win7 开始,控制台应用程序的键盘布局可以从进程接收conhost.exe,该进程是cmd.exe. 更多细节可以在这里找到:
    https://autohotkey.com/board/topic/43043-get-current-keyboard-layout/

  2. 但在这个问题中:
    c++ how do i get the current console conhost process 我发现了 @RaymondChen 的评论conhost.exe- 是一个实现细节,在某些 Windows 版本中可能不存在。

因此,非标准解决方法似乎是可能的。但是否有任何标准的、兼容的方法来获得正确的结果呢?

PS,这里提出了类似的问题:
GetKeyboardLayout() 在某些情况下无法正常工作
但它对我的问题没有答案。