2012-10-18 24 views
5

Tôi thiết kế một trên bàn phím màn hình,Làm cách nào để xác định ngôn ngữ nhập hiện tại?

tôi cần phải xác định ngôn ngữ được thiết lập bởi người sử dụng và ngôn ngữ ông đang sử dụng hiện nay trong các chủ đề khác,

tức là tôi cần phải biết ngôn ngữ được chọn trong trình chuyển đổi ngôn ngữ của thanh tác vụ:

language switcher

PS văn hóa hiện tại trả về ngôn ngữ được sử dụng trong ứng dụng bàn phím ảo, mà không phải là trường hợp tôi đang tìm kiếm.

Trả lời

5

Giải pháp là lấy Bố cục bàn phím cho cửa sổ nền trước và sau đó áp dụng nó cho bàn phím ảo , và kiểm tra ngôn ngữ theo những cách thông thường ..

  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(); 
5

bạn cũng có thể được sử dụng 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); 
      } 
     } 
    } 
}