2

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

(到目前为止,从未与系统的这些部分发生过争执。这就是为什么我想问社区的原因。)

好的,感谢您的帮助,我设法发现了两种方法。在 C# 中使用DllImport(导入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 中绘图”的文章,也许这会帮助我解决这个问题。关于开关检测,这是一个很好的问题。

4

1 回答 1

3

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

获取当前线程的语言,GetThreadUILanguageGetThreadLocale.

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

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

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

如果您想在用户更改语言时收到通知,WM_SETTINGCHANGE可能会让您知道何时应该致电SystemParametersInfo进行检查。我不确定是否有更好的方法。

于 2010-06-22T08:29:19.050 回答