2012-06-15 22 views
8

Estoy escribiendo una aplicación que necesito para cambiar el idioma del sistema cuando la aplicación en sí es NO ENFOCADO. Me temo que la única forma de hacerlo es mediante el uso de Windows hook que no puedo entender del todo en este momento. alguna idea?Cambiando el idioma del sistema C#

EDIT: Solución

[DllImport("user32.dll")] 
private static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam); 

[DllImport("user32.dll")] 
private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags); 

private static uint WM_INPUTLANGCHANGEREQUEST = 0x0050; 
private static int HWND_BROADCAST = 0xffff; 
private static string en_US = "00000409"; 
private static uint KLF_ACTIVATE = 1; 

private static void ChangeLanguage() 
{ 
    PostMessage(HWND_BROADCAST,WM_INPUTLANGCHANGEREQUEST, IntPtr.Zero ,LoadKeyboardLayout(en_US,KLF_ACTIVATE)); 
} 
+0

¿Quiere decir que una aplicación en particular requiere que se cambie el idioma del sistema del que el usuario generalmente no usa? –

+0

¿El problema es saber cuándo no está enfocado o cambiar el idioma del sistema? –

+0

Cambiar el idioma requiere un inicio/cierre de sesión ... ¿se refiere a la entrada de idioma? – vcsjones

Respuesta

1

Puede probar this answer, que utiliza llamadas a la API de Windows.

+0

Gracias, esto me llevó a la respuesta y voy a editar mi pregunta con la respuesta si alguien más tropieza con este problema: D –

2

Para cambiar el idioma de entrada se puede utilizar este código:

private void ChangeKeboardLayout(System.Globalization.CultureInfo CultureInfo) 
    { 
     InputLanguage c = InputLanguage.FromCulture(CultureInfo); 
     InputLanguage.CurrentInputLanguage = c; 
    } 

y se puede hacer que cada vez que la aplicación (o el hilo) está abierta.

+0

Esto no ayudará ya que este código cambia el idioma de entrada en el hilo actual. Estoy pidiendo algo que pueda cambiar el idioma de entrada del sistema sin la aplicación en foco (como si el usuario presionara alt + shift) –

+0

@ user1459484 si su hilo está abierto, puede hacerlo. el estado de enfoque de formulario no cambia nada. –

+0

Bueno, este podría ser un problema de mi parte, en el que no me expliqué lo suficientemente claro, necesito el ingreso de idioma para cambiar no en mi aplicación, sino en la ventana abierta actual. digamos que ahora estoy escribiendo en el bloc de notas en ruso, entonces quiero que la aplicación cambie a inglés –

2

Creo que sería mucho más fácil asignar otro diseño de teclado y "traducir" la entrada en lugar de cambiar la configuración de Windows, especialmente sin el concurso del usuario.

Antes de terminar la respuesta ahmadali shafiee publicó el código que tenía en mente. Sé elegante, ve con eso.

Cuestiones relacionadas