【发布时间】:2012-09-04 23:22:24
【问题描述】:
我已尝试使用 GetKeyboardLayoutName() 和 GetKeyboardLayout() 来获取当前的键盘布局,但它们都为我提供了默认布局并且更改布局不会影响输出!
while(1)
{
Sleep(5);
for(int i = 8; i < 191; i++)
{
if(GetAsyncKeyState(i)&1 ==1)
{
TCHAR szKeyboard[KL_NAMELENGTH];
GetKeyboardLayoutName(szKeyboard);
if(GetAsyncKeyState(i)&1 ==1)
{
TCHAR szKeyboard[KL_NAMELENGTH];
GetKeyboardLayoutName(szKeyboard);
cout << szKeyboard << endl ;
}
}
}
}
当默认布局设置为英语时,它总是给我“00000409”,而当我将布局更改为波斯语时,我希望它是“00000429”。
我在这里的第一个问题,我曾经通过搜索找到所有答案。但是现在,经过数小时的搜索却一无所获,我正在发疯……
【问题讨论】:
-
不确定这会有所帮助.. 尝试 GetKeyboardLayoutList 以查看您想要的布局是否至少已加载.. msdn.microsoft.com/en-us/library/windows/desktop/…
-
@MohamedNuur:已经试过了,它已经加载了。
-
我没有看到更改键盘布局的代码。我只能猜测它更改失败并且您没有检查它的错误代码。
-
请注意,Windows 中的键盘布局是按进程设置的,因此请确保在运行检查之前更改正确进程的布局。
-
实际上我想知道用户是否手动更改布局,尽管它没有以编程方式更改。为了获取当前进程的布局,我尝试了 GetKeyboardLayout(GetCurrentThreadId()) 并且我虽然它会工作。我仍然不知道这有什么问题。
标签: c++ winapi keyboard-layout