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 次。