文章

powerhsell 切换输入法

powerhsell 切换输入法

前言

更新 Windows 11 24H2 26100.3476 之后,在利用 alt+tab 切换窗口之后,会将微软拼音输入法自动切换为中文输入,设置为英文输入之后,还是会自动切换中文,有些命令行窗口每次都需要手动重新设置为英文,有点太麻烦了,所以尝试使用 powershell/pwsh 来切换输入法

我主要的系统还是 Windows 11,因为有些个人常用的软件大部分都是 Windows 平台的,切换过 deepin 、fedora、Ubuntu、debain 试用,有些工作中使用的软件不支持,特定的 vpn 软件即便使用 wine 也不行。终端工具使用的是 windows terminal + pwsh7

互联网搜索问题的时候,发现也有人在提问,好像很早之前就有这个问题了,不过我是最近更新系统之后才遇到这个问题的

解决方案

先说解决方案,后续再解释

因为每次打开 Windows terminal 的时候都是中文输入,终端命令肯定还是英文为主,所以这里通过 pwsh + sendkeys 来模拟按下 shift 键切换微软拼音的中英文输入,默认为中文,所以按下 shift 之后就会切换为英文,避免手动切换,将以下代码保存到 pwsh profile 文件中就行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
## 查看 pwsh profile 文件路径,已经有配置文件就直接新增代码就行,没有的话就新建一个文件
echo $profile

nvim $profile
## 自动切换中英文输入,避免每次启动的时候都是中文输入,每次 tab 切换窗口之后都会自动切换中文,fuck Windows,不然只能添加英文键盘,修改默认英文 en-US 键盘。模拟按下键盘 shift 键
function Switch-ChineseEnglishMode {
  if ($isWindows)
  {
# 添加 Windows Forms 引用以使用 SendKeys 功能
    Add-Type -AssemblyName System.Windows.Forms
# 模拟按下 Shift 键来切换中英文输入
    [System.Windows.Forms.SendKeys]::SendWait("+")

# 或者使用以下命令模拟 Ctrl+Space 组合键
# [System.Windows.Forms.SendKeys]::SendWait("^{SPACE}")

# Write-Host "已尝试切换中英文输入模式"
  }
  # linux 一般不需要自动切换,先注释掉
  # else
  # {
  #   Write-Host "当前操作系统不支持自动切换中英文输入模式"
  # }
}

switch-chineseenglishmode

之后每次打开 pwsh 的时候就会自动切换英文输入了。如果存在多个键盘布局,需要直接切换键盘,可以使用 alt + shift 组合键来切换键盘

1
2
## % 表示 alt
[System.Windows.Forms.SendKeys]::SendWait('%+')

切换/新增键盘布局

在搜索解决方案的时候看见另一种切换键盘布局的方案,这种方案不太建议,因为 New-WinUserLanguageList 命令创建了全新的语言列表,然后用这个新列表完全替换了系统中的现有语言列表。这就导致了原先设置的其他输入法和语言被移除了。会导致你原有的键盘布局被覆盖,已经添加的键盘被删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 获取当前可用的输入法和语言列表
$CurrentLanguages = Get-WinUserLanguageList

# 显示当前语言和输入法设置
$CurrentLanguages | Format-Table -Property LanguageTag, InputMethodTips, AutoCorrect, Spellchecking

# 切换到英文(美国)键盘
$EnglishUS = New-WinUserLanguageList -Language "en-US"
Set-WinUserLanguageList -LanguageList $EnglishUS -Force

# 切换到中文(简体)输入法
$ChinesePRC = New-WinUserLanguageList -Language "zh-CN"
$ChinesePRC[0].InputMethodTips.Add('0804:00000804') # 添加中文输入法
Set-WinUserLanguageList -LanguageList $ChinesePRC -Force

参考

直接利用 pwsh + sendkey 来模拟按键,应该是最简单的解决方案了,安装了 Windows 和 pwsh 都是系统自带的,不需要在编码和安装其他工具

sendkeys 键位

https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.forms.sendkeys?view=netframework-4.8

若要指定在按下键(如 ENTER 或 TAB)时未显示的字符,以及表示操作而不是字符的键,请使用下表中的代码。

代码
Backspace {BACKSPACE}、{BS}或 {BKSP}
BREAK {BREAK}
Caps Lock {CAPSLOCK}
DEL 或 DELETE {DELETE} 或 {DEL}
向下键 {DOWN}
End {END}
Enter {ENTER} 或 ~
ESC {ESC}
HELP {HELP}
Home {HOME}
INS 或 INSERT {INSERT} 或 {INS}
向左键 {LEFT}
Num Lock {NUMLOCK}
Page Down {PGDN}
Page Up {PGUP}
打印屏幕 {PRTSC} (保留供将来使用)
向右键 {RIGHT}
Scroll Lock {SCROLLLOCK}
Tab {TAB}
向上键 {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}
小键盘加 {ADD}
小键盘减 {SUBTRACT}
小键盘乘 {MULTIPLY}
小键盘除 {DIVIDE}

若要指定键与 SHIFT、CTRL 和 ALT 键的任意组合,请在键代码前面加上以下代码中的一个或多个。

代码
SHIFT +
Ctrl ^
ALT %

若要指定应按住 SHIFT、Ctrl 和 ALT 的任何组合,同时按下其他几个键,请将这些键的代码括在括号中。 例如,若要指定在按下 E 和 C 时按住 SHIFT,请使用“+ (EC) ”。 若要指定在按下 E 时按住 SHIFT,后跟不带 SHIFT 的 C,请使用“+EC”。

若要指定重复键,请使用 {key number} 格式。 必须在键和数字之间放置空格。 例如,{LEFT 42} 表示按向左键 42 次;{h 10} 表示按 H 10 次。

本文由作者按照 CC BY 4.0 进行授权

© TheDarkStarJack. 保留部分权利。

[本站总访问量次] [本站访客数人次] [本文总阅读量次]

本站采用 Jekyll 主题 Chirpy