【问题标题】:Changing system language C#更改系统语言 C#
【发布时间】:2012-06-15 18:34:45
【问题描述】:

我正在编写一个应用程序,当应用程序本身不关注时,我需要更改系统的语言。恐怕唯一的方法是使用我目前无法完全理解的 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));
}

【问题讨论】:

  • 您的意思是某个特定的应用程序需要更改用户通常不使用的系统语言吗?
  • 问题是知道你什么时候注意力不集中,还是改变系统语言?
  • 更改语言需要登录/注销...您的意思是语言输入吗?
  • 问题是将当前系统语言更改为其他语言

标签: c# .net windows


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以尝试使用 Windows API 调用的this answer

    【讨论】:

    • 谢谢这让我得到了答案,如果其他人偶然发现这个问题,我会用答案编辑我的问题:D
    【解决方案3】:

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

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

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

    【讨论】:

    • 这无济于事,因为此代码更改了当前线程中的输入语言。我要求的东西可以在没有应用程序焦点的情况下更改系统的输入语言(就像用户按下 alt+shift 一样)
    • @user1459484 如果您的线程已打开,您可以这样做。表单焦点状态不会改变任何东西。
    • 嗯,这可能是我自己的问题,我解释得不够清楚,我需要在我的应用程序中而不是在当前打开的窗口中更改语言输入。假设我现在正在用俄语输入记事本,然后我想申请将其更改为英语
    • @user1459484 我不明白。我认为您的意思是您想在表单unfocused 时更改输入语言。你是这个意思吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2020-04-30
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2016-01-06
    • 2015-07-26
    相关资源
    最近更新 更多