更改系统语言C#

我正在编写一个应用程序,当应用程序本身不是FOCUSED时,我需要更改系统的语言。 恐怕唯一的办法就是使用目前我不能完全理解的windows钩子。 有什么想法吗?

编辑:解决scheme

[DllImport("user32.dll")] private static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam); [DllImport("user32.dll")] private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags); private static uint WM_INPUTLANGCHANGEREQUEST = 0x0050; private static int HWND_BROADCAST = 0xffff; private static string en_US = "00000409"; private static uint KLF_ACTIVATE = 1; private static void ChangeLanguage() { PostMessage(HWND_BROADCAST,WM_INPUTLANGCHANGEREQUEST, IntPtr.Zero ,LoadKeyboardLayout(en_US,KLF_ACTIVATE)); } 

你可以试试这个使用Windows API调用的答案 。

要更改输入语言,您可以使用以下代码:

 private void ChangeKeboardLayout(System.Globalization.CultureInfo CultureInfo) { InputLanguage c = InputLanguage.FromCulture(CultureInfo); InputLanguage.CurrentInputLanguage = c; } 

你可以在你的应用程序(或你的线程)打开的时候这么做。

我认为,映射另一个键盘布局和“翻译”输入而不是改变窗口设置会更容易,尤其是没有用户的比赛。

在我完成答案之前,ahmadali shafiee发布了我想要的代码。 高雅,随它去吧。