【问题标题】:Change system default language programmatically with c#使用 c# 以编程方式更改系统默认语言
【发布时间】:2016-09-27 16:07:35
【问题描述】:

我们有一个虚拟键盘(用于触摸屏),其语言布局是通过 windows 默认语言配置的。

我看过很多答案,涉及InputLanguageManagerCultureInfo
他们对我没用,没有做这项工作。

有一种方法 - SystemParametersInfo 函数带有 SPI_SETDEFAULTINPUTLANG 标志,我正在尝试检查。
到目前为止,除了here之外,没有找到任何有用的用法示例,但是它将键盘布局从Dvorak更改为Marshal。

您能给我一个将默认系统语言转换为 en-US 的示例(希望使用SystemParametersInfo)吗?

编辑

简要说明。
该程序将资源管理器替换为 Windows shell,因此所有键盘设置(例如设置默认键盘布局)都应从我的程序中处理。
此外,我的愿望是在不同的已安装语言之间进行替换,例如英语、瑞典语、葡萄牙语等..
我不想在键盘的 Dvorak 和 Qwerty 布局之间进行更改。

这篇文章的目的是提供在不同语言之间切换的示例,而不是键盘上英文符号的布局。

谢谢!

【问题讨论】:

  • 为什么不直接删除代码示例中修改键盘布局的部分...
  • 我会离开Raymond Chen's advice on the matter,并提到任何与我的语言设置混淆的应用程序都会立即被卸载。但我相信你有你的理由......

标签: c# locale


【解决方案1】:
   [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref uint pvParam, uint fWinIni);

    public void Foo()
    {
        uint localeUS = 0x00000409;
        uint localeNL = 0x00000403;
        SetSystemDefaultInputLanguage(localeUS);
    }

    public bool SetSystemDefaultInputLanguage(uint locale)
    {
        return SystemParametersInfo(SPI_SETDEFAULTINPUTLANG, 0, ref locale, 0);
    }

    public uint GetSystemDefaultInputLanguage()
    {
        uint result = uint.MinValue;
        bool retVal = SystemParametersInfo(SPI_GETDEFAULTINPUTLANG, 0, ref result, 0);

        return result;
    }

这对我来说似乎很好。

来源:

【讨论】:

  • 谢谢! get 方法确实发生了变化。不知何故,虽然我没有看到键盘设置的变化。它保持旧值。我需要重新启动才能改变它吗?如果是这样,是否有任何立即影响的标志?
  • 根据msdn.microsoft.com/en-us/library/windows/desktop/…(检查fWinIni参数)可以传递SPIF_SENDCHANGE。不过我从来没用过。
猜你喜欢
  • 2013-02-26
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
相关资源
最近更新 更多