C# 使用c以编程方式更改系统默认语言#

C# 使用c以编程方式更改系统默认语言#,c#,locale,C#,Locale,我们有一个虚拟键盘(用于触摸屏),其语言布局通过windows默认语言配置 我看到了许多答案,涉及到InputLanguageManager和CultureInfo 他们对我没用,没做那份工作 有一个方法-systemparameters sinfo函数,它带有我试图检查的SPI\u SETDEFAULTINPUTLANG标志。 到目前为止,除了这一个,还没有找到任何有用的用法示例,但它将键盘布局从Dvorak更改为Marshal 您能给我一个将默认系统语言转换为en US的示例(希望使用系统参

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

我看到了许多答案,涉及到
InputLanguageManager
CultureInfo

他们对我没用,没做那份工作

有一个方法-
systemparameters sinfo
函数,它带有我试图检查的
SPI\u SETDEFAULTINPUTLANG
标志。
到目前为止,除了这一个,还没有找到任何有用的用法示例,但它将键盘布局从Dvorak更改为Marshal

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

编辑 简短的澄清。
此程序将资源管理器替换为windows shell,因此所有键盘设置(如设置默认键盘布局)都应通过我的程序处理。
此外,我希望在不同安装语言之间进行替换,如英语、瑞典语、葡萄牙语等。
我不想改变Dvorak和Qwerty键盘的布局

这篇文章的目的是询问在不同语言之间转换的例子,而不是键盘上英文符号的布局

谢谢

   [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方法确实发生了变化。尽管我没有看到键盘设置的变化。它仍然保留旧的值。我是否需要重新启动才能更改它?如果是,是否有立即影响的标志?根据(检查
fWinIni
参数),您可以传递
SPIF\u SENDCHANGE
。不过我从来没用过。