Страница 1 из 1
Триггер переключения раскладки клавиатуры
Добавлено: 23 окт 2021, 15:21
alpap
Таким вот образом можно сделать переключение раскладки клавиатуры с ru на en и наоборот при каждом запуске скрипта, осталось повесить его на горячую клавишу или т.п. ?
Wake up, Neo, select all
$rus = Get-KeyboardLayouts|? Culture -Match 'ru'
$eng = Get-KeyboardLayouts|? Culture -Match 'en'
$h = Find-Window -Title $MyInvocation.MyCommand.Name
if ((Get-KeyboardLayout $h[0].handle).Culture -Match "ru") {Set-KeyboardLayout $eng}
if ((Get-KeyboardLayout $h[0].handle).Culture -Match "en") {Set-KeyboardLayout $rus}
Re: Триггер переключения раскладки
Добавлено: 23 окт 2021, 18:59
cirus
осталось повесить его на горячую клавишу
При нажатии клавиши Escape в блокноте будет меняться раскладка клавиатуры.
Wake up, Neo, select all
cls
$rus = Get-KeyboardLayouts|Where Culture -Match 'ru'
$eng = Get-KeyboardLayouts|Where Culture -Match 'en'
Clear-KeyState Escape
while($true){
$h = Find-Window -Title "Блокнот"
if(!$h){
Show-Hint "Окно не найдено" -Name "error" -BgColor "FF0000"
continue
}
if(Get-KeyState Escape){ # если нажата клавиша Escape
$lng = Get-KeyboardLayout $h[0].handle
if($lng -eq $rus){Set-KeyboardLayout $eng $h[0].handle}
if($lng -eq $eng){Set-KeyboardLayout $rus $h[0].handle}
while(Get-KeyState Escape){
Sleep -m 10 # ждать пока клавиша Escape нажата
}
}
Sleep -m 256
}
Re: Триггер переключения раскладки
Добавлено: 24 окт 2021, 00:38
alpap
опять этот блокнот
мне бы вообще уйти от открытого окна, но как определить текущую раскладку клавиатуры - вот вопрос, ни через Get-UICulture ни через реестр не выходит ее отследить.
Re: Триггер переключения раскладки
Добавлено: 24 окт 2021, 00:52
cirus
как определить текущую раскладку
Wake up, Neo, select all
while($true){
Get-KeyboardLayout
sleep -m 200
}
Запустите скрипт, переключитесь на любое приложение и попереключайте языки, должно определять раскладку клавиатуры.
Re: Триггер переключения раскладки
Добавлено: 24 окт 2021, 02:30
Fors1k
alpap писал(а): ↑24 окт 2021, 00:38
опять этот блокнот
мне бы вообще уйти от открытого окна
Блокнот тут просто как пример, так как ты же сам хотел брать раскладку с определенного окна:
alpap писал(а): ↑23 окт 2021, 15:21
Wake up, Neo, select all
$h = Find-Window -Title ...
Просто суть в том, что если у тебя включена в windows настройка "Позволить выбирать метод ввода для каждого окна приложения", то текущую раскладку клавиатуры можно получать для каждого окна его собственную отдельно. Посмотри в настройках клавиатуры, в каком статусе у тебя сейчас находится эта настройка?
Если тебе не нужно получать / устанавливать раскладку клавиатуры какому-то конкретному окну (или эта функция как раз-таки отключена, и раскладка клавиатуры во всех окнах всегда одинаковая), то просто не указывай параметр -Handle
, как в примере выше.
Re: Триггер переключения раскладки
Добавлено: 24 окт 2021, 06:52
alpap
эта функция как раз-таки отключена
просто не указывай параметр -Handle
Спасибо, так работает
Wake up, Neo, select all
$lng = Get-KeyboardLayout
$rus = Get-KeyboardLayouts|? Culture -Match 'ru'
$eng = Get-KeyboardLayouts|? Culture -Match 'en'
if ($lng|? Culture -Match 'ru') {Set-KeyboardLayout $eng}
if ($lng|? Culture -Match 'en') {Set-KeyboardLayout $rus}
а как на этом форуме поблагодарить за понравившийся ответ?
Re: Триггер переключения раскладки
Добавлено: 24 окт 2021, 13:02
Fors1k
alpap писал(а): ↑24 окт 2021, 06:52
Спасибо, так работает
Пожалуйста:)
Обнови ещё версию, несколько улучшил команду.
Кстати, в $lng у тебя всего один объект, так что для него Where-Object
можно не использовать:
Wake up, Neo, select all
if($lng.Culture -Match 'ru'){Set-KeyboardLayout $eng}
# или вот еще проще так
if($lng -eq $rus){Set-KeyboardLayout $eng}
Ну а хот кей можешь прикрутить по примеру из второго поста.
alpap писал(а): ↑24 окт 2021, 06:52
а как на этом форуме поблагодарить за понравившийся ответ?
В правом верхнем углу поста "палец вверх".