【问题标题】:Displaying current language layout in traybar在托盘栏中显示当前语言布局
【发布时间】:2011-03-06 16:00:23
【问题描述】:

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

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

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

找到一个sn-p:

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;  

如果您将其悬停在图标上方,则会显示它。但是,它不会在切换时更新,也不会在托盘区域中将布局显示为文本。为此,我找到了一篇“Drawing in VB.NET”文章,也许这会帮助我解决这个问题。关于开关检测,这是个好问题。

【问题讨论】:

  • 好的,如果有人给出“-1”,请考虑告诉我如何改进这个问题。这个问题也困扰着其他人。谢谢。
  • 你先google一下试试写这样一个程序怎么样,当你遇到无法解决的特定问题时,请在这里提问。
  • 因为通常谷歌上的答案都是由不知名的人写的。我想从值得信赖的人那里获得“开始帮助”,谁可以编码,谁知道他在做什么。 (无论如何,我猜我的 Google-fu 越来越差了,因为我在那里找不到解决方案。)
  • 什么操作系统?另外,整体 UI 语言或特定线程的语言或键盘输入语言?
  • 那只会让你看起来很懒惰。您一定已经找到了一些关于 API 等的信息才能使用吗?一些相关的示例代码?您发现并尝试了什么?

标签: c# c++ windows windows-7 keyboard-layout


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-01
    • 2014-02-24
    • 2021-10-21
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多