使用 windows 中的 GetKeyName() 函数在 C++ 中动态切换键盘布局
Keyboard layout switch on the fly in C++ using GetKeyName() function in windows
我正在尝试获取各种语言的特定扫描码的键值
int 以下方式
布局:美国英语(美式键盘)
16 - 问
17 - 女
18 - 乙
19 - 右
20 - 吨
21 - 是
布局:法语(法国键盘)
16 - 一个
17 - Z
18 - 乙
19 - 右
20 - 吨
21 - 是
为此,我使用以下代码:
#include "pch.h"
#include "iostream"
#include <windows.h>
using namespace std;
int main()
{
int scancode[6] = { 16,17,18,19,20,21};
int bufferLength = 10;
char buffer[10] ;
while (1)
{
int i = 0;
for (i = 0; i < 6 ; i++)
{
unsigned int extended = scancode[i] & 0xffff00;
unsigned int lParam = 0;
if (extended)
{
if (extended == 0xE11D00)
{
lParam = 0x45 << 16;
}
else
{
lParam = (0x100 | (scancode[i] & 0xff)) << 16;
}
}
else {
lParam = scancode[i] << 16;
if (scancode[i] == 0x45)
{
lParam |= (0x1 << 24);
}
}
GetKeyNameTextA(lParam, buffer, bufferLength);
printf("%s \n", buffer);
}
}
return 0;
}
此代码为我提供了本地化键值,但如果我在 运行 时更改布局,则键值不会更改。它们与以前一样,要获得更改后的值,我必须再次 运行 它。谁能建议我修复它?
还建议是否有其他方法可以实现此目的..
使用LoadKeyboardLayout
并发送WM_INPUTLANGCHANGEREQUEST
来改变键盘布局如下:
#include <iostream>
#include <string>
#include <windows.h>
int main()
{
HKL hkl = LoadKeyboardLayout(L"0000080c", KLF_ACTIVATE);
PostMessage(GetConsoleWindow(), WM_INPUTLANGCHANGEREQUEST, 0, (LPARAM)hkl);
std::string str;
while(std::cin >> str)
if(str == "0")
break;
return 0;
}
我正在尝试获取各种语言的特定扫描码的键值
int 以下方式
布局:美国英语(美式键盘)
16 - 问
17 - 女
18 - 乙
19 - 右
20 - 吨
21 - 是
布局:法语(法国键盘)
16 - 一个
17 - Z
18 - 乙
19 - 右
20 - 吨
21 - 是
为此,我使用以下代码:
#include "pch.h"
#include "iostream"
#include <windows.h>
using namespace std;
int main()
{
int scancode[6] = { 16,17,18,19,20,21};
int bufferLength = 10;
char buffer[10] ;
while (1)
{
int i = 0;
for (i = 0; i < 6 ; i++)
{
unsigned int extended = scancode[i] & 0xffff00;
unsigned int lParam = 0;
if (extended)
{
if (extended == 0xE11D00)
{
lParam = 0x45 << 16;
}
else
{
lParam = (0x100 | (scancode[i] & 0xff)) << 16;
}
}
else {
lParam = scancode[i] << 16;
if (scancode[i] == 0x45)
{
lParam |= (0x1 << 24);
}
}
GetKeyNameTextA(lParam, buffer, bufferLength);
printf("%s \n", buffer);
}
}
return 0;
}
此代码为我提供了本地化键值,但如果我在 运行 时更改布局,则键值不会更改。它们与以前一样,要获得更改后的值,我必须再次 运行 它。谁能建议我修复它? 还建议是否有其他方法可以实现此目的..
使用LoadKeyboardLayout
并发送WM_INPUTLANGCHANGEREQUEST
来改变键盘布局如下:
#include <iostream>
#include <string>
#include <windows.h>
int main()
{
HKL hkl = LoadKeyboardLayout(L"0000080c", KLF_ACTIVATE);
PostMessage(GetConsoleWindow(), WM_INPUTLANGCHANGEREQUEST, 0, (LPARAM)hkl);
std::string str;
while(std::cin >> str)
if(str == "0")
break;
return 0;
}