переключение языка ввода

Консольное приложение не может автоматически, программно переключать раскладку клавиатуры.

Приложение Windows Forms так же не может автоматически, программно переключать раскладку клавиатуры. Повторяю, автоматически! Что бы приложению переключить не автоматически, а с помощью, например, нажатия кнопки, нужно подключить функцию WINAPI, такую как ActivateKeyboardLayout().

Только приложение WPF, с помощью класса InputLanguageManager может автоматически, программно переключить раскладку клавиатуры.

В данном примере, приложение показывает культуру и регион по умолчанию.
Раскладку клавиатуры по умолчанию.
Дальше, пользователь попадает в поле "Раскладка клавиатуры русская", поле ввода становится активным, приложение автоматически изменяет раскладку клавиатуры на русскую.
А если пользователь попадает в поле "Раскладка клавиатуры английская", поле ввода становится активным, приложение автоматически изменяет раскладку клавиатуры на английскую.
Изменение раскладки клавиатуры можно увидеть в системном трее и в поле ввода "Раскладка клавиатуры текущая".

Создайте WPF приложение и назовите его WpfLoadLanguage. Замените код. Скомпилируйте и запустите на выполнение.
Скрыть

Показать

Копировать
  MainWindow.xaml  
  • <Window x:Class="WpfLoadLanguage.MainWindow"
  •   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  •   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  •   Title="MainWindow"
  •   Height="500"
  •   Width="700">
  •  <Grid x:Name="FormMain" Margin="0,0,0,-2" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" Loaded="FormMain_Loaded">
  •   <!--коллекция рядов-->
  •   <Grid.RowDefinitions>
  •    <RowDefinition></RowDefinition>
  •    <RowDefinition></RowDefinition>
  •    <RowDefinition></RowDefinition>
  •    <RowDefinition></RowDefinition>
  •    <RowDefinition></RowDefinition>
  •   </Grid.RowDefinitions>
  •   <!--коллекция колонок-->
  •   <Grid.ColumnDefinitions>
  •    <ColumnDefinition></ColumnDefinition>
  •    <ColumnDefinition></ColumnDefinition>
  •   </Grid.ColumnDefinitions>
  •   <Label Name="Label1" Grid.Row="0" Grid.Column="0"  Content="Культура и регион по умолчанию" VerticalAlignment="Center" Margin="50,0,0,0" FontSize="14" FontWeight="Bold"></Label>
  •   <TextBox Name="TextBox1" Grid.Row="0" Grid.Column="1" Text="" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="25,0,0,0" FontSize="14" Width="200" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" Foreground="Red" Background="White" Height="25" Padding="0,1" IsReadOnly="True">
  •    <TextBox.Effect>
  •     <DropShadowEffect/>
  •    </TextBox.Effect>
  •   </TextBox>
  •   <Label x:Name="Label2" Content="Раскладка клавиатуры по умолчанию" Margin="50,0,0,0" Grid.Row="1" VerticalAlignment="Center" BorderThickness="0" FontSize="14" FontWeight="Bold" RenderTransformOrigin="0.5,0.5" Background="Transparent"></Label>
  •   <TextBox x:Name="TextBox2" Grid.Column="1" HorizontalAlignment="Center" Height="25" Margin="25,0,0,0" Grid.Row="1" TextWrapping="Wrap" VerticalAlignment="Center" Width="200" Foreground="Blue" FontSize="14" FontWeight="Bold" TextAlignment="Center" Padding="0,1" IsReadOnly="True">
  •    <TextBox.Effect>
  •     <DropShadowEffect/>
  •    </TextBox.Effect>
  •   </TextBox>
  •   <Label x:Name="Label3" Content="Раскладка клавиатуры текущая" Margin="50,0,0,0" Grid.Row="2" VerticalAlignment="Center" FontWeight="Bold" FontSize="14"></Label>
  •   <TextBox x:Name="TextBox3" Grid.Column="1" HorizontalAlignment="Center" Height="25" Margin="25,0,0,0" Grid.Row="2" TextWrapping="Wrap" VerticalAlignment="Center" Width="200" Foreground="Red" FontWeight="Bold" FontSize="14" TextAlignment="Center" Padding="0,1" IsReadOnly="True">
  •    <TextBox.Effect>
  •     <DropShadowEffect/>
  •    </TextBox.Effect>
  •   </TextBox>
  •   <Label x:Name="Label4" Content="Раскладка клавиатуры русская" Margin="50,0,0,0" Grid.Row="3" VerticalAlignment="Center" FontWeight="Bold" FontSize="14"></Label>
  •   <TextBox x:Name="TextBox4" Grid.Column="1" HorizontalAlignment="Center" Height="25" Margin="25,0,0,0" Grid.Row="3" TextWrapping="Wrap" VerticalAlignment="Center" Width="200" Foreground="Red" FontSize="14" Padding="5,1,0,1" GotFocus="TextBox4_GotFocus">
  •    <TextBox.Effect>
  •     <DropShadowEffect/>
  •    </TextBox.Effect>
  •   </TextBox>
  •   <Label x:Name="Label5" Content="Раскладка клавиатуры английская" Margin="50,0,0,0" Grid.Row="4" VerticalAlignment="Center" FontWeight="Bold" FontSize="14"></Label>
  •   <TextBox x:Name="TextBox5" Grid.Column="1" HorizontalAlignment="Center" Height="25" Margin="25,0,0,0" Grid.Row="4" TextWrapping="Wrap" VerticalAlignment="Center" Width="200" Foreground="Blue" Padding="5,1,0,1" FontSize="14" GotFocus="TextBox5_GotFocus">
  •    <TextBox.Effect>
  •     <DropShadowEffect/>
  •    </TextBox.Effect>
  •   </TextBox>
  •  </Grid>
  • </Window>
Скрыть

Показать

Копировать
  MainWindow.xaml.cs  
  • using System;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Text;
  • using System.Threading.Tasks;
  • using System.Windows;
  • using System.Windows.Controls;
  • using System.Windows.Data;
  • using System.Windows.Documents;
  • using System.Windows.Input;
  • using System.Windows.Media;
  • using System.Windows.Media.Imaging;
  • using System.Windows.Navigation;
  • using System.Windows.Shapes;
  •  
  • //подключить пространство имен
  • using System.Globalization;
  •  
  • //добавить ссылку на System.Windows.Forms
  • //подключить пространство имен
  • using System.Windows.Forms;
  •  
  • namespace WpfLoadLanguage {
  •  /// <summary>
  •  /// Interaction logic for MainWindow.xaml
  •  /// </summary>
  •  public partial class MainWindow : Window {
  •   public MainWindow() {
  •    InitializeComponent();
  •   }
  •  
  •   private void FormMain_Loaded(object sender, RoutedEventArgs e) {
  •    //культура и регион установленные в системе по умолчанию
  •    TextBox1.Text = CultureInfo.InstalledUICulture.ToString();
  •    //раскладка клавиатуры по умолчанию
  •    TextBox2.Text = InputLanguage.DefaultInputLanguage.Culture.ToString();
  •    //для поля ввода TextBox4 устанавливаем раскладку клавиатуры на русскую
  •    InputLanguageManager.SetInputLanguage(TextBox4, new CultureInfo("ru-RU"));
  •    //для поля ввода TextBox5 устанавливаем раскладку клавиатуры на английскую
  •    InputLanguageManager.SetInputLanguage(TextBox5, new CultureInfo("en-US"));
  •   }
  •  
  •   private void TextBox4_GotFocus(object sender, RoutedEventArgs e) {
  •    /*как только поле ввода TextBox4 станет активным, в поле
  •    ввода TextBox3 отобразится текущая раскладка клавиатуры*/
  •    TextBox3.Text = InputLanguageManager.Current.CurrentInputLanguage.ToString();
  •   }
  •  
  •   private void TextBox5_GotFocus(object sender, RoutedEventArgs e) {
  •    /*как только поле ввода TextBox5 станет активным, в поле
  •    ввода TextBox3 отобразится текущая раскладка клавиатуры*/
  •    TextBox3.Text = InputLanguageManager.Current.CurrentInputLanguage.ToString();
  •   }
  •  }
  • }