在vb.net中更改键盘语言和布局

时间:2013-12-01 07:26:10

标签: .net visual-studio-2010 vb.net-to-c#

我正在制作一个应该全局改变键盘输入和布局的程序。任何形式的帮助。

我之前使用过此代码,但没有任何反复发生:

InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("ZH-CN"));

2 个答案:

答案 0 :(得分:2)

我的机器上也没有任何事情发生。我实际上没有安装该键盘布局。所以它只是留在美国,也不例外。

您必须先添加键盘布局。在Windows 8上,使用控制面板,语言,“添加语言”链接,选择一个中文键盘布局。现在它可以在我的机器上运行。该过程在早期版本的Windows上有所不同,如果您需要更多帮助,请在superuser.com上进行跟进。

答案 1 :(得分:0)

正如汉斯提到的,您的代码要求用户从他/她的Windows语言选项中添加键盘布局。如果您想从代码中添加它,请尝试从代码中临时安装所需的键盘布局:

[DllImport("user32.dll")]
static extern bool UnloadKeyboardLayout(IntPtr hkl);
[DllImport("user32.dll")]
static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);

public class KeyboardHolder : IDisposable
{
  private readonly IntPtr pointer;
  public KeyboardHolder(int klid)
  {
    pointer = LoadKeyboardLayout(klid.ToString("X8"), 1);
  }
  public KeyboardHolder(CultureInfo culture)
    :this(culture.KeyboardLayoutId){}
  public void Dispose()
  {
    UnloadKeyboardLayout(pointer);
    GC.SuppressFinalize(this);
  }
  ~KeyboardHolder()
  {
    UnloadKeyboardLayout(pointer);
  }
}

并以这种方式使用它:

// install keyboard layout temporary
KeyboardHolder keyboard = new KeyboardHolder(new System.Globalization.CultureInfo("ZH-CN"));

// after finishing what you want clear added keyboard layout:
keyboard.Dispose();