Traybarに現在の言語レイアウトを表示します
-
29-09-2019 - |
質問
基本的に、現在の言語をトレイアイコンとして表示するアプリケーションを書きたいと思います。主に、C ++とC#をコーディングできます。 Googleが私を助けてくれると思いますが、コミュニティは私が信頼するものだからです。
(これまでのところ、システムのそのような部分に悩まされたことはありません。そのため、コミュニティに尋ねたいと思います。)
あなたの助けのおかげで大丈夫、私はなんとか2つの方法を発見しました。を使用して 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で描画します「記事、これは私がこの問題を解決するのに役立つかもしれません。スイッチの検出について、それは良い質問です。
解決
ユーザーのUI言語全体を取得するには、 GetUserDefaultUILanguage
.
現在のスレッドの言語を取得するには、 GetThreadUILanguage
また GetThreadLocale
.
現在のキーボード入力言語を取得するには、 GetKeyboardLayout
.
Windows 7の前にWindowsに通知エリアアイコンを表示するには、 Shell_NotifyIcon
. 。 Windows 7で Shell_NotifyIcon
ユーザーが適切なオプションを設定している場合でも機能する可能性がありますが、それ以外の方法で別の方法を見つける必要があります。
複数の可能なキーボード入力言語がある場合、Windowsはユーザーが無効にしていない限り、言語バーに現在のキーボード入力言語を既に表示しています。ユーザーは言語バーをタスクバーに配置する場合がありますが、通知エリアにあるのとまったく同じではありません。
ユーザーが言語を変更したときに通知を受け取りたい場合は、 WM_SETTINGCHANGE
いつ電話すべきかをあなたに知らせるかもしれません SystemParametersInfo
チェックする。より良い方法があるかどうかはわかりません。