在vb.net中更改keboard语言和全局布局



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

我以前使用过这个代码,但什么都没发生:

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

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

您必须先添加键盘布局。在Windows8上,这是通过控制面板,语言,"添加语言"链接,选择一个中文键盘布局来完成的。现在它在我的机器上工作了。该过程与早期版本的Windows不同,如果您需要更多帮助,请访问superuser.com。

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

[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();

最新更新