基本上,我想编写一个将当前语言显示为托盘图标的应用程序。主要是我可以编码C ++和C#。猜猜Google会帮助我,但我想首先在这里问它,因为社区,这里的知识是我信任的。

(到目前为止,从来没有与系统的这样的部分争吵。这就是为什么我想问社区的原因。)

好的,感谢您的帮助,我设法发现了两种方法。使用 DllImport 在C#(导入 user32.dll)和 InputLanguage.

找到了一个片段:

public void SetNewCurrentLanguage() {
    // Gets the default, and current languages.
    InputLanguage myDefaultLanguage = InputLanguage.DefaultInputLanguage;
    InputLanguage myCurrentLanguage = InputLanguage.CurrentInputLanguage;
    textBox1.Text = "Current input language is: " + myCurrentLanguage.Culture.EnglishName + '\n';
    textBox1.Text += "Default input language is: " + myDefaultLanguage.Culture.EnglishName + '\n';

    // Changes the current input language to the default, and prints the new current language.
    InputLanguage.CurrentInputLanguage = myDefaultLanguage;
    textBox1.Text += "Current input language is now: " + myDefaultLanguage.Culture.EnglishName;
}  

我像以下内容一样应用了此信息:

        InputLanguage myCurrentLanguage = InputLanguage.CurrentInputLanguage;
        notifyIcon.Text = myCurrentLanguage.LayoutName + '\n' + myCurrentLanguage.Culture.DisplayName;  

如果将其悬停在图标上方,则会显示它。但是,它不会在开关上进行更新,也不会在托盘区域显示布局为文本。为此,我发现了绘制vb.net“文章,也许这将帮助我解决这个问题。关于Switch检测,这是一个很好的问题。

有帮助吗?

解决方案

为了获取用户的整体UI语言, GetUserDefaultUILanguage.

要获取当前线程的语言, GetThreadUILanguage 或者 GetThreadLocale.

要获取当前的键盘输入语言, GetKeyboardLayout.

要在Windows 7之前在Windows中显示通知区域图标, Shell_NotifyIcon. 。在Windows 7中 Shell_NotifyIcon 如果用户设置适当的选项,则可能仍然有效,但否则您必须找到另一种方法。

如果您有多个可能的键盘输入语言,则Windows已经在语言栏中显示当前键盘输入语言,除非用户已禁用了它。用户可能会将语言栏放在任务栏中,尽管它与在通知区域不完全相同。

如果您想在用户更改语言时接收通知, WM_SETTINGCHANGE 可能会让您知道什么时候应该打电话 SystemParametersInfo 去检查。我不确定有更好的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top