我正在编写应指示键盘布局的控制台应用程序。我正在使用 GetForegroundWindow()
获取当前事件窗口的函数,函数GetWindowThreadProcessId()
获取线程 id,最后,使用函数 GetKeyboardLayout()
我得到键盘布局。除了某些情况外,Everyting 适用于我尝试的任何应用程序:
请解释一下这是怎么回事。下面是我的测试代码
#include <Windows.h>
#include <iostream>
int main()
{
while(8)
{
HWND _curr_window = GetForegroundWindow();
DWORD _curr_window_procces_id;
DWORD _curr_window_thread_id = GetWindowThreadProcessId(_curr_window, &_curr_window_procces_id);
std::cout << "Process ID is " << _curr_window_procces_id << " and Thread ID is " << _curr_window_thread_id << std::endl;
HKL _key_locale = GetKeyboardLayout(_curr_window_thread_id);
std::cout << "Keyboard layout is " << _key_locale << std::endl;
Sleep(1000);
}
return 0;
}
最佳答案
你的代码是对的,这是微软的问题。我在第三方 shell 中运行此代码,babun并得到正确的结果。你可以试试这个 shell,我认为它是 Windows 上最好的 shell。
关于winapi - GetKeyboardLayout() 在某些情况下无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29217501/