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

特にユーザーの争いがなければ、ウィンドウの設定を変更するよりも、別のキーボードレイアウトをマップして入力を「変換」する方がはるかに簡単だと思います。

私が答えを終える前に、ahmadalishafieeは私が考えていたコードを投稿しました。エレガントに、一緒に行きましょう。

于 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 に答える