2012-06-15 8 views
8

Sto scrivendo un'applicazione che richiede di cambiare la lingua del sistema quando l'applicazione stessa è NON MESSA A FUOCO. Ho paura che l'unico modo per farlo è utilizzando il gancio di Windows che non riesco a capire appieno al momento. qualche pensiero?Modifica lingua di sistema C#

EDIT: Soluzione

[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

Intendi dire che una particolare applicazione richiede che la lingua del sistema sia cambiata da quella che generalmente l'utente non usa? –

+0

Il problema è sapere quando non si è a fuoco o cambiare la lingua del sistema? –

+0

Cambiare la lingua richiede un login/logout ... intendi l'inserimento della lingua? – vcsjones

risposta

1

Si potrebbe provare this answer, che utilizza le chiamate API di Windows.

+0

Grazie a questo mi ha portato alla risposta e correggerò la mia domanda con la risposta se qualcun altro inciampa su questo problema: D –

2

Per cambiare la lingua di input è possibile utilizzare questo codice:

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

e si può fare ogni volta che l'applicazione (o il tuo thread) è aperta.

+0

Questo non è d'aiuto poiché questo codice cambia la lingua di input nel thread corrente. Sto chiedendo qualcosa che possa cambiare la lingua di input del sistema senza l'applicazione messa a fuoco (proprio come se l'utente avesse premuto alt + shift) –

+0

@ user1459484 se il tuo thread è aperto puoi farlo. lo stato di messa a fuoco della forma non cambia nulla. –

+0

Beh, questo potrebbe essere un problema della mia parte in cui non mi sono spiegato abbastanza chiaramente, ho bisogno dell'input della lingua per cambiare non nella mia applicazione ma nella finestra aperta corrente. diciamo che sto digitando il blocco note in russo, quindi voglio un'applicazione per cambiarlo in inglese –

2

Penso che sarebbe molto più semplice mappare un altro layout di tastiera e "tradurre" l'input invece di modificare le impostazioni di Windows, soprattutto senza il concorso dell'utente.

Prima di completare la risposta, ahmadali shafiee ha pubblicato il codice che avevo in mente. Sii elegante, seguici.

Problemi correlati