Skip to content

About

Windows 按窗口记忆并自动切换输入法的轻量工具

Topics

Resources

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

KeyPersona

KeyPersona 在 Windows 上按窗口记住输入法。切回终端、浏览器、编辑器或资源管理器时,它会恢复该窗口上次使用的输入语言和中英文模式;没有记录时先使用匹配的用户规则,没有规则再使用全局默认值。

程序使用 AutoHotkey v2 和原生 Windows API,不依赖 Electron、WebView 或 Chromium。它常驻后台,通过托盘菜单管理设置,配置和学习状态保存在程序目录中。

运行要求

运行发布页提供的 KeyPersona.exe 只需要 64 位 Windows 10 或 Windows 11,以及一个当前用户可写的本地目录。EXE 已包含 AutoHotkey 运行时,用户不需要安装 AutoHotkey、PowerShell 7 或 Ahk2Exe。

直接运行 .ahk 源码时才需要 64 位 AutoHotkey v2。PowerShell 7 和 Ahk2Exe 只用于从源码构建 EXE,不是程序的运行依赖。

功能

  • 按当前会话窗口独立记忆输入法,跨重启按可配置的窗口身份恢复。
  • 支持全局默认输入法、当前窗口用户规则和应用用户规则。
  • 用户规则只提供没有记忆时的默认输入法,不会锁定窗口,也不会阻止手动切换。
  • 自动学习 Win+Space、语言栏和输入法内部中英文切换后的状态。
  • 可以关闭自动记忆;关闭后只在进入窗口时执行匹配的用户规则,未匹配窗口保持原状。
  • 使用 TSF profile 区分同一语言下的不同输入法。
  • 对支持标准 IMM 接口的中文输入法记忆中文/英文内部模式。
  • 自动发现新增输入法,并把可选择状态补充到运行时 config.ini。
  • 自动清理重复或已经不可用的输入法状态、规则和学习记录。
  • 前台切换后先等待 Windows 自己恢复输入法,仅在状态不符时补偿切换。
  • 支持当前用户登录时自动启动。
  • 可选把中文模式下单独按反引号键的输出修正为 `,组合键保持原样。

当前实际验证过:

  • 英语(美国)- 美式键盘
  • 微信输入法 2.1.4.6

其他键盘布局和 TSF 输入法会自动发现;输入法内部模式能否读写取决于该输入法是否支持标准 IMM 接口。

安装与运行

从 GitHub Releases 下载 ZIP 或单独的 KeyPersona.exe。把 EXE 放进可写目录后运行;程序会在同一目录创建 config.ini、state.ini 和日志。

ZIP 中的 config.example.ini 是默认配置示例。升级现有安装时不要用它覆盖自己的 config.ini。

已安装 AutoHotkey v2 时,也可以直接运行源码:

.\KeyPersona.ahk

首次运行会在程序目录创建或使用:

  • config.ini:用户配置、命名状态和用户规则。
  • state.ini:程序自动学习的窗口状态。
  • state.ini.bak:状态文件损坏恢复副本。
  • KeyPersona.log:运行日志。

升级自旧名 IME Memory 时,原有 config.ini、state.ini、日志和自启动入口会自动迁移;配置和记忆不会重置。

托盘菜单

  • 启用自动切换
  • 自动记忆输入法
  • 开机自启动
  • 当前窗口、输入法状态、状态来源和短 ID
  • 设置全局默认输入法
  • 为当前窗口设置或取消默认输入法规则
  • 清除当前窗口的自动记忆
  • 清除所有自动记忆
  • 中文模式反引号修正
  • 打开配置文件或状态文件
  • 重新加载
  • 关于与退出

鼠标左键或右键单击托盘图标都可以打开菜单。

“全局默认(无用户规则)”描述规则层:没有用户规则时保持勾选,重复点击不执行操作;取消已有规则不会清除自动记忆。“清除当前窗口的自动记忆”和“清除所有自动记忆”只删除学习记录,不删除用户规则、命名输入法或全局默认值。

自动记忆开启时,恢复顺序是:当前会话记忆、持久记忆、用户规则、全局默认。规则只在没有记忆时提供初始值;用户手动切换后,新状态会被学习,下次进入窗口时优先恢复学习结果。

自动记忆关闭时,KeyPersona 不读取也不写入自动记忆。进入窗口时只执行匹配的用户规则;没有规则的窗口不切换。规则应用完成后不会持续检查或强制改回,因此用户仍可自由切换输入法。

动态输入法状态

KeyPersona 在启动、打开托盘菜单以及遇到未知活动 profile 时重新枚举当前用户启用的输入法。

  • 已存在相同“完整 profile ID + 内部模式”的状态时不会重复创建。
  • 中文 TIP 自动生成中文和英文两个命名状态。
  • 其他输入布局生成一个命名状态。
  • 同一实际状态出现多个名称时优先保留用户手写项,并更新引用它的规则。
  • profile 不再可用时删除对应状态、用户规则和自动记忆。
  • 全局默认失效时依次回退到有效中文状态、英语(美国)或任一有效状态。

自动生成的状态会写入运行时 config.ini,用户可以直接重命名或用于规则。

配置

自动记忆开关:

[general]
autoMemory=1

命名状态示例:

[state.wetype-chinese]
profile=0804:{86598FB9-66A2-463E-B9C2-AEB906D477AD}{607FDF85-FCC8-4DBD-A365-41296F980C9C}
imeOpen=1
conversion=preserve
sentence=preserve

应用用户规则示例:

[rule.raycast]
enabled=1
priority=100
exe=Raycast.exe
state=english-us

规则还可以使用 pathRegex、classRegex 和 titleRegex。同一规则内填写的条件全部需要匹配。

规则表示“这个窗口没有自动记忆时默认用什么”,不是强制锁定。以 Windows Terminal 的英语规则为例:第一次进入时使用 English US;随后手动切换到中文不会被改回,自动记忆开启时还会记住中文。

通过托盘建立的当前窗口规则保存在 [window-rule.<短 ID>]。Edge、Chrome、Firefox、Explorer 和 Zettlr 默认使用 exe + class + 标准化标题 作为跨重启身份,其他应用默认按 exe 共享状态。

开机自启动

“开机自启动”在当前用户的标准 Startup 文件夹创建 KeyPersona.lnk,不需要管理员权限。快捷方式动态保存当前 EXE 路径、参数和工作目录;移动程序后,从新位置重新勾选即可更新。

关闭时会删除当前与旧版启动入口。旧版 Run 注册项和 IME Memory.lnk 会在升级时迁移,避免重复启动。

从源码构建

构建环境与工具

项目没有需要另外下载的第三方代码库,也不使用包管理器。以上要求只用于开发和构建;最终用户只运行 EXE 时不需要安装这些工具。

在任意克隆目录运行:

pwsh -NoProfile -File .\build.ps1

默认输出:

dist\KeyPersona.exe
dist\config.ini

安装到指定目录:

pwsh -NoProfile -File .\build.ps1 -InstallDirectory '<install-directory>'

AutoHotkey 运行时或 Ahk2Exe 不在标准位置时:

pwsh -NoProfile -File .\build.ps1 `
  -RuntimePath '<path-to-AutoHotkey64.exe>' `
  -CompilerPath '<path-to-Ahk2Exe.exe>'

也可以使用环境变量 KEYPERSONA_AHK_RUNTIME 和 KEYPERSONA_AHK_COMPILER。构建脚本与仓库所在位置、安装目录无关。

也可以把 Ahk2Exe.exe 放进仓库根目录的 build-tools,构建脚本会自动发现。

生成发布 ZIP:

pwsh -NoProfile -File .\build.ps1 -Package

构建默认执行源码自检、编译后自检和隔离烟雾测试。

已知边界

  • 用户配置按设计保存在程序目录,因此程序必须位于当前用户可写的本地目录。
  • 网络盘或移动盘在登录时尚未就绪会导致自启动失败。
  • 普通权限进程可能无法向管理员权限窗口发送输入法消息。
  • 浏览器没有向普通 Win32 程序暴露跨重启稳定窗口 ID;标题相同的浏览器窗口可能无法区分。
  • 未签名发行包可能触发 Windows SmartScreen 或安全软件提示。

项目

KeyPersona 采用 MIT License。

作者:浮枕 @universesaurora

About

Windows 按窗口记忆并自动切换输入法的轻量工具

Topics

Resources

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages