如何知道具有提供的窗口句柄的控制台窗口的当前键盘布局?
对于GUI窗口,可以通过以下方式实现:
const auto threadId = ::GetWindowThreadProcessId(hwnd, nullptr);
const auto hkl = ::GetKeyboardLayout(idThread);
但是这种方法不适用于控制台窗口。
经过google搜索后,我得到了以下结果:
从Win7开始,可以从conhost.exe
的子进程cmd.exe
接收控制台应用程序的键盘布局。可以在此处找到更多详细信息:
https://autohotkey.com/board/topic/43043-get-current-keyboard-layout/
但是在这个问题上:
c++ how do i get the current console conhost process
我发现来自@RaymondChen的评论是conhost.exe
-是一个实现细节,在某些Windows版本中可能不存在。
因此,非标准的解决方法似乎是可能的。 但是,是否有任何标准的兼容方法来获得正确的结果?
PS,这里问类似的问题:
GetKeyboardLayout() doesn't work properly in some cases
但是我的问题没有答案。