在托盘栏中显示当前的语言布局

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

(到目前为止,从来没有与系统的这些部分争吵过,所以我想问问社区)

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

find一个片段:

 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; 

这将显示它,如果你把它hover在图标上方。 但是,它不会在开关上更新,也不会在托盘区域显示为文本。 为此,我find了一个“ 在VB.NET中绘制 ”的文章,也许这将帮助我解决这个问题。 关于开关检测,这是一个很好的问题。

获取用户的全部UI语言, GetUserDefaultUILanguage

获取当前线程的语言, GetThreadUILanguageGetThreadLocale

获取当前键盘输入语言GetKeyboardLayout

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

如果您有多种可能的键盘输入语言,Windows已经在语言栏中显示当前的键盘输入语言,除非用户禁用了它。 用户可能会把语言栏放在任务栏中,尽管它和通知区域不太一样。

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