我正在制作一个程序,该程序应该全局更改键盘输入和布局。感谢任何形式的帮助。
我以前使用过这个代码,但什么都没发生:
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();