2012-10-18 7 views
5

Io sono la progettazione di una tastiera su schermo,Come determinare la lingua di input corrente?

ho bisogno di determinare la lingua stata impostata la lingua che sta usando ora nelle altri thread utente e che,

cioè ho bisogno di sapere la lingua selezionata nel switcher lingua barra delle applicazioni:

language switcher

PS la lingua corrente restituisce la lingua utilizzata nell'applicazione della tastiera su schermo, che non è il caso che sto cercando ..

risposta

5

La soluzione era ottenere il layout della tastiera per la finestra in primo piano e quindi applicarlo alla tastiera sullo schermo e controllo per la lingua nei modi consueti ..

  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

è anche possibile ottenere utilizzando 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); 
      } 
     } 
    } 
}