Триггер переключения раскладки клавиатуры

Ответить
alpap
Сообщения: 3
Зарегистрирован: 02 авг 2021, 21:13
Благодарил (а): 3 раза

Триггер переключения раскладки клавиатуры

Сообщение 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}
Аватара пользователя
cirus
Expert
Сообщения: 56
Зарегистрирован: 12 июн 2021, 17:53
Поблагодарили: 8 раз

Re: Триггер переключения раскладки

Сообщение 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
}
alpap
Сообщения: 3
Зарегистрирован: 02 авг 2021, 21:13
Благодарил (а): 3 раза

Re: Триггер переключения раскладки

Сообщение alpap »

в блокноте

опять этот блокнот
мне бы вообще уйти от открытого окна, но как определить текущую раскладку клавиатуры - вот вопрос, ни через Get-UICulture ни через реестр не выходит ее отследить.

Аватара пользователя
cirus
Expert
Сообщения: 56
Зарегистрирован: 12 июн 2021, 17:53
Поблагодарили: 8 раз

Re: Триггер переключения раскладки

Сообщение cirus »

как определить текущую раскладку

Wake up, Neo, select all

while($true){
Get-KeyboardLayout
sleep -m 200
}

Запустите скрипт, переключитесь на любое приложение и попереключайте языки, должно определять раскладку клавиатуры.

Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Триггер переключения раскладки

Сообщение Fors1k »

alpap писал(а): 24 окт 2021, 00:38

опять этот блокнот
мне бы вообще уйти от открытого окна

Блокнот тут просто как пример, так как ты же сам хотел брать раскладку с определенного окна:

alpap писал(а): 23 окт 2021, 15:21

Wake up, Neo, select all

$h = Find-Window -Title ...

Просто суть в том, что если у тебя включена в windows настройка "Позволить выбирать метод ввода для каждого окна приложения", то текущую раскладку клавиатуры можно получать для каждого окна его собственную отдельно. Посмотри в настройках клавиатуры, в каком статусе у тебя сейчас находится эта настройка?

Если тебе не нужно получать / устанавливать раскладку клавиатуры какому-то конкретному окну (или эта функция как раз-таки отключена, и раскладка клавиатуры во всех окнах всегда одинаковая), то просто не указывай параметр -Handle, как в примере выше.

alpap
Сообщения: 3
Зарегистрирован: 02 авг 2021, 21:13
Благодарил (а): 3 раза

Re: Триггер переключения раскладки

Сообщение 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}

а как на этом форуме поблагодарить за понравившийся ответ?

Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Триггер переключения раскладки

Сообщение 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

а как на этом форуме поблагодарить за понравившийся ответ?

В правом верхнем углу поста "палец вверх".

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: Allaxtn, Margaretmuc и 1 гость