10

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

编辑:解决方案

[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));
}
4

3 回答 3

2

我认为映射另一个键盘布局和“翻译”输入而不是更改窗口设置会容易得多,尤其是在没有用户竞争的情况下。

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

于 2012-06-15T18:48:11.397 回答
1

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

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

并且您可以在您的应用程序(或您的线程)打开时执行此操作。

于 2012-06-15T18:45:32.613 回答
1

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

于 2012-06-15T19:44:00.020 回答