Консольное приложение не может автоматически, программно переключать раскладку клавиатуры.
Приложение Windows Forms так же не может автоматически, программно переключать раскладку клавиатуры. Повторяю, автоматически! Что бы приложению переключить не автоматически, а с помощью, например, нажатия кнопки, нужно подключить функцию WINAPI, такую как ActivateKeyboardLayout().
Только приложение WPF, с помощью класса InputLanguageManager может автоматически, программно переключить раскладку клавиатуры.
В данном примере, приложение показывает культуру и регион по умолчанию.
Приложение Windows Forms так же не может автоматически, программно переключать раскладку клавиатуры. Повторяю, автоматически! Что бы приложению переключить не автоматически, а с помощью, например, нажатия кнопки, нужно подключить функцию WINAPI, такую как ActivateKeyboardLayout().
Только приложение WPF, с помощью класса InputLanguageManager может автоматически, программно переключить раскладку клавиатуры.
В данном примере, приложение показывает культуру и регион по умолчанию.
Раскладку клавиатуры по умолчанию.
Дальше, пользователь попадает в поле "Раскладка клавиатуры русская", поле ввода становится активным, приложение автоматически изменяет раскладку клавиатуры на русскую.
А если пользователь попадает в поле "Раскладка клавиатуры английская", поле ввода становится активным, приложение автоматически изменяет раскладку клавиатуры на английскую.
Изменение раскладки клавиатуры можно увидеть в системном трее и в поле ввода "Раскладка клавиатуры текущая".
Создайте WPF приложение и назовите его WpfLoadLanguage. Замените код. Скомпилируйте и запустите на выполнение.
А если пользователь попадает в поле "Раскладка клавиатуры английская", поле ввода становится активным, приложение автоматически изменяет раскладку клавиатуры на английскую.
Изменение раскладки клавиатуры можно увидеть в системном трее и в поле ввода "Раскладка клавиатуры текущая".
Создайте WPF приложение и назовите его WpfLoadLanguage. Замените код. Скомпилируйте и запустите на выполнение.
MainWindow.xaml
<Windowx: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"> -
<Gridx: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> -
<LabelName="Label1"Grid.Row="0"Grid.Column="0"Content="Культура и регион по умолчанию"VerticalAlignment="Center"Margin="50,0,0,0"FontSize="14"FontWeight="Bold"></Label> -
<TextBoxName="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> -
<Labelx: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> -
<TextBoxx: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> -
<Labelx:Name="Label3"Content="Раскладка клавиатуры текущая"Margin="50,0,0,0"Grid.Row="2"VerticalAlignment="Center"FontWeight="Bold"FontSize="14"></Label> -
<TextBoxx: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> -
<Labelx:Name="Label4"Content="Раскладка клавиатуры русская"Margin="50,0,0,0"Grid.Row="3"VerticalAlignment="Center"FontWeight="Bold"FontSize="14"></Label> -
<TextBoxx: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> -
<Labelx:Name="Label5"Content="Раскладка клавиатуры английская"Margin="50,0,0,0"Grid.Row="4"VerticalAlignment="Center"FontWeight="Bold"FontSize="14"></Label> -
<TextBoxx: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>
<Windowx: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"> -
<Gridx: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> -
<LabelName="Label1"Grid.Row="0"Grid.Column="0"Content="Культура и регион по умолчанию"VerticalAlignment="Center"Margin="50,0,0,0"FontSize="14"FontWeight="Bold"></Label> -
<TextBoxName="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> -
<Labelx: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> -
<TextBoxx: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> -
<Labelx:Name="Label3"Content="Раскладка клавиатуры текущая"Margin="50,0,0,0"Grid.Row="2"VerticalAlignment="Center"FontWeight="Bold"FontSize="14"></Label> -
<TextBoxx: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> -
<Labelx:Name="Label4"Content="Раскладка клавиатуры русская"Margin="50,0,0,0"Grid.Row="3"VerticalAlignment="Center"FontWeight="Bold"FontSize="14"></Label> -
<TextBoxx: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> -
<Labelx:Name="Label5"Content="Раскладка клавиатуры английская"Margin="50,0,0,0"Grid.Row="4"VerticalAlignment="Center"FontWeight="Bold"FontSize="14"></Label> -
<TextBoxx: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
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Windows.Navigation;usingSystem.Windows.Shapes;//подключить пространство именusingSystem.Globalization;//добавить ссылку на System.Windows.Forms//подключить пространство именusingSystem.Windows.Forms;namespaceWpfLoadLanguage {-
/// <summary> -
/// Interaction logic for MainWindow.xaml -
/// </summary> -
publicpartialclassMainWindow : Window { -
publicMainWindow() { -
InitializeComponent(); -
} -
privatevoidFormMain_Loaded(objectsender, RoutedEventArgs e) { -
//культура и регион установленные в системе по умолчанию -
TextBox1.Text = CultureInfo.InstalledUICulture.ToString(); -
//раскладка клавиатуры по умолчанию -
TextBox2.Text = InputLanguage.DefaultInputLanguage.Culture.ToString(); -
//для поля ввода TextBox4 устанавливаем раскладку клавиатуры на русскую -
InputLanguageManager.SetInputLanguage(TextBox4,newCultureInfo("ru-RU")); -
//для поля ввода TextBox5 устанавливаем раскладку клавиатуры на английскую -
InputLanguageManager.SetInputLanguage(TextBox5,newCultureInfo("en-US")); -
} -
privatevoidTextBox4_GotFocus(objectsender, RoutedEventArgs e) { -
/*как только поле ввода TextBox4 станет активным, в поле -
ввода TextBox3 отобразится текущая раскладка клавиатуры*/ -
TextBox3.Text = InputLanguageManager.Current.CurrentInputLanguage.ToString(); -
} -
privatevoidTextBox5_GotFocus(objectsender, RoutedEventArgs e) { -
/*как только поле ввода TextBox5 станет активным, в поле -
ввода TextBox3 отобразится текущая раскладка клавиатуры*/ -
TextBox3.Text = InputLanguageManager.Current.CurrentInputLanguage.ToString(); -
} -
} }
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Windows.Navigation;usingSystem.Windows.Shapes;//подключить пространство именusingSystem.Globalization;//добавить ссылку на System.Windows.Forms//подключить пространство именusingSystem.Windows.Forms;namespaceWpfLoadLanguage {-
/// <summary> -
/// Interaction logic for MainWindow.xaml -
/// </summary> -
publicpartialclassMainWindow : Window { -
publicMainWindow() { -
InitializeComponent(); -
} -
privatevoidFormMain_Loaded(objectsender, RoutedEventArgs e) { -
//культура и регион установленные в системе по умолчанию -
TextBox1.Text = CultureInfo.InstalledUICulture.ToString(); -
//раскладка клавиатуры по умолчанию -
TextBox2.Text = InputLanguage.DefaultInputLanguage.Culture.ToString(); -
//для поля ввода TextBox4 устанавливаем раскладку клавиатуры на русскую -
InputLanguageManager.SetInputLanguage(TextBox4,newCultureInfo("ru-RU")); -
//для поля ввода TextBox5 устанавливаем раскладку клавиатуры на английскую -
InputLanguageManager.SetInputLanguage(TextBox5,newCultureInfo("en-US")); -
} -
privatevoidTextBox4_GotFocus(objectsender, RoutedEventArgs e) { -
/*как только поле ввода TextBox4 станет активным, в поле -
ввода TextBox3 отобразится текущая раскладка клавиатуры*/ -
TextBox3.Text = InputLanguageManager.Current.CurrentInputLanguage.ToString(); -
} -
privatevoidTextBox5_GotFocus(objectsender, RoutedEventArgs e) { -
/*как только поле ввода TextBox5 станет активным, в поле -
ввода TextBox3 отобразится текущая раскладка клавиатуры*/ -
TextBox3.Text = InputLanguageManager.Current.CurrentInputLanguage.ToString(); -
} -
} }