5

オンスクリーンキーボードを設計していますが、

ユーザーが設定した言語と、他のスレッドで現在使用している言語を特定する必要があります。

つまり、タスクバーの言語スイッチャーで選択されている言語を知る必要があります。

言語スイッチャー

PSの現在のカルチャは、オンスクリーンキーボードアプリケーションで使用されている言語を返しますが、私が探しているのはそうではありません。

4

2 に答える 2

7

解決策は、フォアグラウンド ウィンドウのキーボード レイアウトを取得し、それをオンスクリーン キーボードに適用して、通常の方法で言語を確認することでした。

            IntPtr fore = GetForegroundWindow();
            uint tpid = GetWindowThreadProcessId(fore, IntPtr.Zero);
            IntPtr hKL = GetKeyboardLayout(tpid);
            hKL = (IntPtr)(hKL.ToInt32() & 0x0000FFFF);
            InputLanguageManager m = InputLanguageManager.Current;
            m.CurrentInputLanguage = new System.Globalization.CultureInfo(hKL.ToInt32());
            //IntPtr i = LoadKeyboardLayout(hKL.ToString(), 1);

            InputLanguage = InputLanguageManager.Current.CurrentInputLanguage.ToString();
于 2012-10-18T12:11:34.093 に答える
5

WMIを使用して取得することもできます。

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_BIOS"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_BIOS instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("CurrentLanguage: {0}", queryObj["CurrentLanguage"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}
于 2012-10-18T12:41:21.490 に答える