【问题标题】:How can change language keyboard layout in Windows (c++)如何在 Windows (c++) 中更改语言键盘布局
【发布时间】:2012-03-29 22:39:24
【问题描述】:

我需要更改键盘语言。 如果在焦点应用程序中,我可以使用此代码更改语言:

#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <string>

using namespace std;

#pragma comment(lib, "User32.lib")


int main(int argc, char *argv[])
{
   //0409 - Ingles, 0c0a - Espanhol, 0416 - Portugues
   char *str = "0c0a";//argv[1];
   int i;

    if(EOF != sscanf(str, "%x", &i))
   {
      SendMessage(GetActiveWindow(), WM_INPUTLANGCHANGEREQUEST, 0, i);
   }
   system("PAUSE");
   return EXIT_SUCCESS;
}

但我确实需要更改系统键盘语言,在应用程序关闭后或 如果应用中没有设置焦点。

任何可以帮助我?

【问题讨论】:

  • 我怀疑这是可能的。想象一下,如果另一个应用程序可以做同样的事情 - 谁会赢?控制系统语言的不是您的应用程序,而是用户。
  • 查看this question 在您的帖子前不到 24 小时发布
  • 我什至不确定是否存在“系统键盘语言”;它看起来像一个每个进程的设置。顺便说一句,WM_INPUTLANGCHANGEREQUEST 是来自 Windows(操作系统)的消息,用于通知程序用户想要更改输入语言;这不是程序向其他程序发出请求的受支持方式。
  • 这种行为的正当理由是什么?更改系统设置的程序(并且可能无法撤消此操作,尤其是在崩溃时)将立即从我的 PC 中删除并禁止

标签: c++ c winapi keyboard foreign-keys


【解决方案1】:

如果您真的需要更改用户的键盘布局,您可以使用以下功能: GetKeyboardLayoutName()LoadKeyboardLayout()

【讨论】:

  • 不——“只影响当前进程的布局”,即不影响问题中的“系统键盘语言”。
  • 抱歉,我确实漏掉了system这个词!我想唯一的方法是通过注册表(easydesksoftware.com/keyboard.htm)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 2017-05-19
相关资源
最近更新 更多