Repository navigation
Tcursor v3.9 正式版
Tcursor v3.9 发行说明(正式版)
概述
Tcursor v3.9 是一次针对 微信搜索框光标提示垂直对齐不一致 与 微信输入法输拼音阶段提示符号首尾来回跳跃 的专项攻坚根治版本。彻底解决了在微信顶栏搜索框中提示符号“时而偏上、时而正常”的纵向位置漂移,以及在使用微信输入法或主流输入法打字输入拼音字母过程中,提示符号在拼音串开头和结尾来回频繁横跳的严重缺陷,确保光标提示符号始终稳定贴合在拼音字母尾部。
核心改进与深层技术根因修复
1. 彻底根治微信搜索框光标提示符号“时而偏上、时而正常”Bug(退化行高补齐与单行搜索框居中排版)
- 深层技术根因:
- TSF 退化光标行高误判(偏上根因):在
CaretController中,当 TSF 或底层窗口报告纯光标折叠选区(caretH < 10px * scale,例如折叠选区caretH == 1)时,此前逻辑误假设底层top直接位于文字基线(Baseline),执行了effectiveBottom = caret.Top + 1px。然而 TSFITfContextView::GetTextExt报告的top实际上是字符或单行的顶边(Top),仅加 1px 导致底边被强行绘制在字符顶部基线上方,比正常光标(caret.Bottom = caret.Top + 16px)生生上移了 15px,产生严重的“偏上”缺陷;当 Win32 GUI 线程光标恢复并报告正常高度(16px)时又恢复正常,两者交替触发表现为“有时候偏上、有时候正常”; - UIA 容器边界误套用多行聊天留白(未输入偏下剪刀差):在
UiaCaretCapture.TryCaretFromEditBounds中,微信左上角的单行搜索框(容器高度仅 24~28px)因进程名被粗暴判为isChat,套用了多行聊天窗口专属的大顶部边距(padY = 8 * scale)与caretHeight = 16 * scale,未执行单行输入框的垂直居中排版,导致未输入时偏向底边,与打字时的文字基线存在纵向剪刀差。
- TSF 退化光标行高误判(偏上根因):在
- 退化光标行高智能补齐:
在CaretController的即时通讯应用校准中,当caretH < 10px * scale时,严密补齐为微信标准单行字号行高(effectiveBottom = caret.Top + 16 * scale),与正常 Win32 Caret 报告的 16px 底部实现 100% 绝对一致,彻底消除 15px 的突发跳变; - 单行搜索框垂直居中精准排版:
在UiaCaretCapture中严格界定bounds.Height <= 36 * scale的微信控件为单行搜索框,执行(bounds.Height - caretHeight) / 2精准垂直居中排版与安全内边距,使未输入、放入光标与打字全阶段的纵向坐标 100% 严密贴合。
2. 彻底根治微信输入法打字输拼音阶段提示符号首尾来回跳跃 Bug(组字串末尾恒定锚定机制)
- 深层技术根因:
- TSF 拼音组字串跨度锚点错误:在
TsfCaretCapture中,调用 TSFGetTextExt测量拼音组字串(Composition Range)时,返回的包围盒跨度包含left(拼音串首字母起始坐标)与right(拼音串末字母结束坐标)。此前代码直接将矩形左端赋给光标(caret = new CaretRect(left, ...)),导致CaretController将提示符号定位于拼音字母开头; - Win32 系统光标与 TSF 跨度锚点相反:Win32
GuiCaretCapture通过GetGUIThreadInfo读取系统光标时,微信输入法与主流 IME 会将系统插入点光标置于拼音串末尾(caret.Left == right); - 捕获后端交替触发导致高频横跳:打字输拼音过程中,随着按键触发、IME 消息泵处理以及光标闪烁,
GUI捕获器与TSF捕获器高频交替命中(GUI 命中时在末尾,TSF 命中时在开头),导致提示符号在拼音文本首尾剧烈来回横跳,而非跟随在拼音字母后方。
- TSF 拼音组字串跨度锚点错误:在
- 全链路末尾插入点恒定锚定:
- 在
TsfCaretCapture中,当right > left + 1(存在拼音组字串或文本选区跨度)时,光标有效插入点绝对锚定在文本末端(caretX = right),杜绝输出首字母坐标; - 在
UiaCaretCapture中,对Text2.GetCaretRange与Text.GetSelection同样建立末端锚定,若选区存在有效字符宽度,统一取selRect.Right; - 在
CaretController控制核心中建立第二道坚固防线:任何后端报告caret.Right > caret.Left + 1时,横向坐标统一严格取caret.Right,使提示符号在整个输拼音阶段始终稳定贴合在拼音字母尾部(caret.Right),彻底杜绝首尾来回跳跃!
- 在
零回归与稳定性保证
- 通用应用零回归:严格保证 Chrome 网址栏与网页输入框、Windows 资源管理器、微信聊天框、记事本、EmEditor 等通用应用的高精度定位保持 100% 正常。
- 界面外观绝对冻结:严格保持 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局零修改。
- 代码自检完备性:
--selftest验证全部后端与分层窗口渲染测试均输出RESULT: OK。
三、下载与使用说明
- 下载下方附件
Tcursor.zip(仅约 614 KB,需本机安装有官方 .NET 10 桌面运行时); - 解压后进入
Tcursor文件夹,运行Tcursor.exe(在系统托盘后台常驻); - 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。
四、发布资产与哈希校验
解压 Tcursor.zip 后为 Tcursor/ 文件夹,包含 Tcursor.exe、Tcursor.pdb、LICENSE 以及 THIRD-PARTY-NOTICES.txt。
- 压缩包名称:
Tcursor.zip - 压缩包大小:628,781 字节(约 614 KB)
- zip sha256:
CB1B960003160B0A8997E2785976CD9BC8B0B80B1E929A70370A12AF1BD3BCE6 - exe sha256:
040B279C1E6E2837B4C7F8A49C8B70007488CD063326C9A0CEFEB22AFC583A0D
五、开源协议与鸣谢
- 本软件以 GNU 通用公共许可证第 3 版(GPL-3.0) 发布,© 2026 Crucialmer。