Repository navigation
Releases: Crucialmer/Tcursor
Release list
Tcursor v3.13 正式版
Tcursor v3.13 发行说明(正式版)
概述
Tcursor v3.13 是一次针对 Google Chrome 浏览器长时间运行后光标提示符号失灵与分离不稳定 以及 Chrome 网页/主页搜索框未开始输入时光标提示符号偏左 两大深层痛点问题的专项攻坚根治版本。彻底重构了 UIA 异步调用队列模型并消除级联超时死锁;对 Chromium 后端实施退避豁免与全树深搜防护;支持 Chromium 渲染宿主跨 PID 归属鉴权与周期性轻量 COM 代理垃圾回收;并全面打通 Chromium AXSystemCaretWin 物理系统光标首选调用链路与网页搜索框放大镜图标智能避让,实现全场景长时间运行毫秒级稳定响应与未输入/打字全阶段像素级精准对齐。
核心改进与深层技术根因修复
1. 彻底根治 Chrome 长时间运行后变得不稳定与指示符号分离失灵 Bug
- 深层技术根因:
- UIA 工作线程队列级联超时与 Convoy 效应:在 Chrome 长时间运行多标签页或挂载扩展的场景下,单次跨进程 UIA 查询偶发需 60
90ms。调用端轮询每 2030ms 发出一个请求。一旦前序请求排队耗时超过CallTimeoutMs,调用端超时放弃,但后台工作线程仍将超时废弃的请求执行到底。后续每个请求一入队就背负着前一个请求的延迟,形成全链级联超时死锁; CaptureChain对 Chromium 错误施加 3 秒死锁退避惩罚:原SlowFailureMs为 100ms。当发生上述跨进程偶发超时时,耗时达到门限,CaptureChain将其判定为“慢失败”并对 UIA 后端处以渐进退避(250ms -> 3000ms)。然而对于 Chromium,Windows 底层 Win32 GUI 与 MSAA 均不支持网页内部输入,UIA 是唯一可用后端!一旦 UIA 被禁用退避长达 3 秒,Chrome 将完全没有任何可用后端,导致光标符号瞬间消失或停滞数秒;- 步骤 3
FindFirstDescendant深度全树遍历卡死 Chromium:当FocusedElement()瞬态为 null 时,步骤 3 对顶层 Chrome 窗口执行element.FindFirstDescendant(...)。在多标签页复杂的 Chrome 树中,全树扫描耗时高达 500~2000ms,严重阻塞后台线程并导致死锁; - Chromium 多进程架构 Renderer 子进程 PID 误判:网页
<input>在 UIA 中的NativeWindowHandle常为 0,而focusedPid是 Chromium 的渲染子进程 PID,与顶层窗口的主浏览器 PID 不相等。此前的belongs校验将其误判为外来元素而丢弃; - COM RCW 代理对象长时堆积:长时运行每秒数十次 UIA 调用积压了海量 COM 代理对象,导致 Windows COM IPC 通道与 Chrome 内部无障碍桥接严重滞后。
- UIA 工作线程队列级联超时与 Convoy 效应:在 Chrome 长时间运行多标签页或挂载扩展的场景下,单次跨进程 UIA 查询偶发需 60
- 全链路精准攻坚:
UiaCaretCapture请求对象新增CreatedAt与Abandoned标志,调用端超时立即标记放弃;后台工作线程检测到已废弃请求直接丢弃,彻底消除排队拥堵导致的级联超时死锁;同时将超时门限提升至 200ms;- 新增每 300 次调用周期性轻量
GC.Collect(1),高效回收 COM RCW 代理对象,防止 IPC 句柄累积; - 升级
belongs多进程归属判定:当focusedPid != hwndPid时,验证两者是否同属 Chrome/Edge 浏览器进程,同属则判定归属成立; - 步骤 3 针对
Chrome_WidgetWin窗口彻底跳过FindFirstDescendant全树深搜,杜绝卡死 Chromium; CaptureChain调整SlowFailureMs至 300ms,并在退避机制中对Chrome_WidgetWin实施绝对豁免,坚决不切断 Chromium 的 UIA 通道。
2. 彻底根治 Chrome 中未开始输入时光标提示符号偏左 Bug
- 深层技术根因:
- 此前代码将
TryMsaaCaret(element, topHwnd, out caret)严格限定在if (isAddressBar),所有网页内部输入框(如 Google 搜索框、百度搜索框)从未调用过 MSAA; - 当网页输入框为空(未开始输入)时,UIA 文本范围无字符,
TryCaretViaExpandUnit必然返回false; - 代码降级到
TryCaretFromEditBounds,硬编码取普通单行输入框padX = 10 * scale。然而 Google 搜索主页(google.com)、百度等现代搜索框左侧有宽达 36~40px 的放大镜 🔍 图标!10px 直接落在了放大镜图标正中央,比真实的文字起始光标偏左了近 30 像素;一旦用户开始打字,输入框内有了字符,TryCaretViaExpandUnit立即生效并精准锚定在字符右侧,表现为“未开始输入时偏左,开始输入后正常”;
- 此前代码将
- 全链路精准修复:
- 在
TryElementCaret中,取消isAddressBar限制,对所有处于折叠纯光标态(或选区为空态)的可编辑元素均优先执行TryMsaaCaret(element, topHwnd, out caret),直接提取 Chromium 内部AXSystemCaretWin维护的物理系统光标屏幕坐标(自带 bounds 包围盒有效性验证),未输入与打字阶段位置完全一致; - 在
TryCaretFromEditBounds中拓展网页搜索框(GooglegLFyf/ ComboBox / 包含“搜索”或“Search”)识别,未探测到图标时自动采用38px * scale安全内衬,垂直居中排版,彻底消除左侧放大镜 10px 假光标。
- 在
零回归与稳定性保证
- 通用应用零回归:严格保证 EmEditor 真实字号跟随与垂直对齐、Chrome 网址栏光标跟随、Google 搜索主页 ComboBox 支持、划选文字不随鼠标跑、微信输入法输拼音尾端跟随、Windows 资源管理器、记事本等通用程序 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,627 字节(约 614 KB)
- zip sha256:
85FFA15DE45C53EB162C0E2EE7B67F5B6543B792DE54FB41EF7ACAA7B0A092A9 - exe sha256:
FC40DFA18679404EE3AD3A1A5EFDBEA86CDF9781FCFD8A4FFC179B4174976593
五、开源协议与鸣谢
本项目采用 GNU General Public License v3.0 开源协议,遵循开源精神,感谢所有提供反馈与支持的开源社区用户!
Tcursor v3.12 正式版
Tcursor v3.12 发行说明(正式版)
概述
Tcursor v3.12 是一次针对 EmEditor 等专业纯文本/代码编辑器中提示符号垂直基准位置不正确(字号变大时横切字符字形、字号变小时过度下坠) 与 Google Chrome 网址栏(Omnibox)中提示符号位置偏离锁头图标与鼠标点击不跟随 的专项攻坚根治版本。彻底重构了通用文本编辑器在各字号下的垂直基准对齐机制,坚决废止对常规字体行高的强制覆盖;全面升级了 Chrome 网址栏的多语言/跨平台 UIA 标识探测与 Chromium AXSystemCaretWin 活跃系统物理光标优先调用链路,并在未输入时精准避开锁头图标,实现全场景毫厘不差的像素级高精度定位。
核心改进与深层技术根因修复
1. 彻底修复 EmEditor 中光标提示符号位置不正确 Bug(恢复真实字号基线跟随与大型编辑视口兜底隔离)
- 深层技术根因:
CaretController.cs行高强制归一化篡改(垂直 Y 偏离主因):此前版本在!isChatApp分支中对caretH <= maxUiLineH (44px)的光标一律强行覆盖为effectiveBottom = caret.Top + 22px * scale。EmEditor 属于专业纯文本与代码编辑器,用户广泛自定义 9pt (13px)、10pt (15px)、12pt (18px)、16pt (24px) 等字号与行距。当字体较小时,强行归一化导致符号大幅下坠,甚至覆盖下一行文字;当字体或行距较大时,强行归一化导致符号向上侵入文字内部,直接横切字符字形;GuiCaretCapture.cs零高/反向高度被误拒:Win32 自绘编辑器在特定状态下报告rcCaret.Bottom == rcCaret.Top,此前if (bottomRight.Y - topLeft.Y <= 0) return false;导致GuiCaretCapture被误判失败;CaptureChain.TryFallbackCaret灾难性左上角假光标穿透:当主捕获后端穿透到兜底逻辑时,TryFallbackCaret对类名命中isEditClass的控件无高度上限约束,将整个 1920×1080 编辑视口的外框左上角(focusRect.Left + 8, focusRect.Top + 4)误当做光标,导致符号突发瞬移至全屏第一行第一列。
- 全链路精准修复:
- 在
CaretController.cs中,对处于常规排版字号范围(12px * scale <= caretH <= 48px * scale)内的光标,100% 遵照真实caret.Bottom锚定,彻底消除强制归一化导致的字形侵入与过度下坠;仅在caretH < 12px时补偿至 18px,caretH > 48px时折叠至 20px; - 在
GuiCaretCapture.cs中容忍零高度与反向高度,自动按Math.Max(14, Math.Abs(diffY))兜底保证 GUI 捕获首发命中; - 在
CaptureChain.TryFallbackCaret中增加if (!isChat && h > (int)Math.Round(54 * scale)) return false;,严禁对大型代码编辑器(EmEditorView、Scintilla)套用窗口左上角兜底坐标。
- 在
2. 彻底修复 Chrome 网址栏(Omnibox)中光标提示符号位置不正确 Bug(MSAA 活跃系统光标优先与首字内衬校准)
- 深层技术根因:
- 网址栏类名/属性识别断裂:在不同系统与语言环境下,Chrome Views 网址栏的 UIA
ClassName常为ViewsTextfieldEdit或为空,真正的标识存在于AutomationId(OmniboxViewViews)与Name(“地址和搜索栏” / “Address and search bar”)。此前代码仅检查clsName.Contains("Omnibox"),导致地址栏识别失败; - MSAA 物理光标调用次序滞后与空文本阻断:Chrome Views 网址栏的 UIA
TextPattern无法测量字符屏幕矩形,必须依赖 Chromium 内部维护的AXSystemCaretWin(MSAAOBJID_CARET)。此前代码将 MSAA 置于TryCaretViaExpandUnit之后且限定hasText必须为真,导致未输入或点击时 MSAA 未能正确接管; - 未输入时虚假 6px 留白落在锁头图标上:此前在未探测到左侧图标时取
padX = 6px。Chrome 网址栏左侧包含宽度约 28~34px 的锁头/安全图标,导致未输入时光标提示符号直接被画在锁头图标正中央。
- 网址栏类名/属性识别断裂:在不同系统与语言环境下,Chrome Views 网址栏的 UIA
- 全链路精准修复:
- 全面拓展
isAddressBar识别逻辑,支持ClassName、AutomationId及多语言Name; - 针对
isAddressBar在纯折叠光标状态下优先调用TryMsaaCaret,以最高优先级提取 ChromiumAXSystemCaretWin活跃系统光标,实现鼠标点击与打字时毫厘不差的物理屏幕光标跟随; - 将未探测到图标时的未输入内衬修正为标准安全内衬
34px * scale,精准落在首字输入起始基线上。
- 全面拓展
零回归与稳定性保证
- 通用应用零回归:严格保证 Google 搜索主页(
ComboBox角色支持)、文字划选不跟鼠标(仅纯折叠光标显示)、微信打字不横跳及垂直对齐、Windows 资源管理器、记事本等通用程序 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,367 字节(约 614 KB)
- zip sha256:
6B75DB064C7CF923395636C4D392A9C638755049127625BCA51C20FC9DD99BED - exe sha256:
448D6203E3B4BCADEA1EB5B2540C74CDC4DF73B7FF6D52203F41A9A412E0F821
五、开源协议与鸣谢
- 本软件以 GNU 通用公共许可证第 3 版(GPL-3.0) 发布,© 2026 Crucialmer。
Tcursor v3.11 正式版
Tcursor v3.11 发行说明(正式版)
概述
Tcursor v3.11 是一次针对 Google Chrome 中 Google 搜索主页输入框无提示符号 与 文字划选(从后向前或从前向后)时提示符号跟随鼠标移动 的专项攻坚根治版本。全面重构了 Web 可编辑控件的鉴权体系,无缝支持携带 role="combobox" 的现代搜索与下拉建议输入框;同时彻底清除了鼠标坐标伪造光标的残留逻辑,坚决落实“仅在存在跳动的纯文字插入光标时才显示提示符号”的设计铁律,在用户划选文本时彻底隐藏符号并绝不随鼠标位移。
核心改进与深层技术根因修复
1. 彻底修复 Chrome 中 Google 搜索主页不显示光标提示符号 Bug(扩展网页可编辑控件支持 ComboBox 角色)
- 深层技术根因:
- ARIA
role="combobox"导致 UIA 映射为ControlType.ComboBox:Google 搜索主页(google.com)的中央核心搜索框在 HTML 中声明了role="combobox"属性(<textarea class="gLFyf" role="combobox" ...>)。Chromium 无障碍引擎(AXPlatformNodeWin)据此将该元素映射为 Windows UIA 的ControlType.ComboBox而非普通的ControlType.Edit; - 非编辑元素拦截逻辑的误杀:此前版本在拦截网页普通段落/正文时,在
CaptureCore与TryElementCaret中硬编码了focused.ControlType != ControlType.Edit,将ControlType.ComboBox直接当作非编辑阅读区并强制拦截(置focusedIsChromiumNonEdit = true),导致用户在 Google 搜索框无论未输入、点击还是打字均被彻底阻断; - 空控件边界推算支持缺失:此前
IsEditableControl仅支持ControlType.Edit,使 Google 搜索框在未输入/空内容时无法借由控件几何边界推算光标初始位置。
- ARIA
- 智能可编辑控件鉴权体系(
IsEditableControl):- 升级
IsEditableControl,全面支持ControlType.Edit与ControlType.ComboBox,同时联动验证IsEnabled == true以及ValuePattern.IsReadOnly == false,精确支持 Google 搜索主页、Bing 搜索、各类带下拉建议的现代 Web 输入框; - 严格阻断网页普通文本(
<p>、<h1>、<a>、<div>、<span>等均为Text/Group/Hyperlink),保持网页正文点击 100% 零误弹。
- 升级
2. 彻底根治划选文字时提示符号跟随鼠标移动 Bug(坚决执行纯折叠光标鉴权,根除鼠标光标伪造漏洞)
- 深层技术根因:
- 当用户从后向前(或从前向后)按住鼠标拖拽划选成片文字时,
ITextPattern.GetSelection()处于非折叠选区状态(Start != End),此时界面处于文本高亮选中态,根本不存在跳动的文本插入光标; - 此前代码在选区包含单个字符(宽度
<= 16px)时误将其当作光标采用;而在划选较长文本时,此前代码又穿透调用了TryCaretFromMousePoint,利用鼠标瞬时物理坐标在文本控件内拾取对应字符包围盒并伪造成光标,导致提示符号在划选过程中完全跟着鼠标指针游走,严重违背了“仅在有输入文本光标跳动时才显示”的设计原则。
- 当用户从后向前(或从前向后)按住鼠标拖拽划选成片文字时,
- 纯折叠光标严格鉴权与假光标彻底清除:
- 引入折叠选区双重精准校验(
CompareEndpoints == 0且range.GetText(1) == ""),严格限定text2.GetCaretRange与text.GetSelection必须处于纯文字插入点(折叠态)才允许提取光标; - 当检测到处于非折叠选区(成片划选中、双击选词、拖选等)时,坚决返回
false并立即隐藏符号,杜绝任何符号显示; - 彻底移除
TryCaretFromMousePoint鼠标伪造光标逻辑,彻底根除任何提示符号跟随鼠标游走的漏洞。
- 引入折叠选区双重精准校验(
零回归与稳定性保证
- 通用应用零回归:严格保证 Chrome 网址栏与网页输入框、微信输入法输拼音尾端跟随、微信搜索框/聊天框垂直对齐、Windows 资源管理器、记事本等通用程序 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,873 字节(约 614 KB)
- zip sha256:
43C150AB1ADDBB93F7897D570339156D8F843B790DFB861223F07006293ED6DF - exe sha256:
CDB37EE471515B64166ED485DF019FB164E33EFEDC58B42523542EC10818AAC8
五、开源协议与鸣谢
- 本软件以 GNU 通用公共许可证第 3 版(GPL-3.0) 发布,© 2026 Crucialmer。
Tcursor v3.10 正式版
Tcursor v3.10 发行说明(正式版)
概述
Tcursor v3.10 是一次针对 Chrome 浏览器刚打开或切换标签页时未输入状态下初始位置错误与延迟恢复 以及 通用软件中光标提示符号“一开始正常,过一会儿右移了”漂移缺陷 的攻坚根治版本。彻底解决了 Chrome 刚打开或前后台切换时提示符号出现在旧标签页陈旧坐标或虚假偏移位置的问题,并排除了全局代码对光标右侧坐标的误篡改,使通用文本编辑器及办公软件在打字与停顿间保持 100% 稳定锚定在真实文字光标处。
核心改进与深层技术根因修复
1. 彻底根除 Chrome 刚打开或切换时未输入状态下初始位置错误与延迟恢复 Bug(Chromium MSAA 污染隔离与回退拦截)
- 深层技术根因:
- Chromium MSAA 顶层窗口光标陈旧废弃缓存污染:Chromium 顶层窗口(
Chrome_WidgetWin_1)实现了单例AXSystemCaretWin(系统光标桥接器)。当 Chrome 刚打开或在标签页/窗口间切换时,UIA 跨进程连接瞬间因 IPC 调度产生微弱延迟(>150ms),捕获链降级到全局MsaaCaretCapture;此前代码未过滤 Chromium 类名,全局 MSAA 立即读取了顶层窗口留存的陈旧废弃光标坐标,导致CaptureChain将_lastGood[chromePid]锁定为"MSAA"。在后续多轮轮询中持续采纳该错误坐标,表现为未输入时提示符号出现在荒谬位置;直到用户“点击别处”使 Chromium 更新光标或“等一会儿”系统光标闪烁消失导致 MSAA 失败,捕获链才回退到 UIA 恢复正常; - UIA 步骤 3 网页正文焦点误回退搜索顶栏网址栏:在
UiaCaretCapture.CaptureCore步骤 3 中,当用户在前台查看 Chrome 网页正文时,虽然步骤 1 识别了网页非编辑元素并拦截,但步骤 3 仍向全窗口子树搜索HasKeyboardFocus == true的 Edit 控件,将处于休眠激活态的顶栏OmniboxViewViews搜出并调用TryCaretFromEditBounds,导致在网页正文浏览时误在地址栏弹出提示符号; - 网址输入框未输入虚假留白与全选 URL 穿透:在
UiaCaretCapture.TryCaretFromEditBounds中,针对isSearchOrAddress(即OmniboxViewViews),此前在未探测到内部子图标时硬编码了padX = 38 * scale。然而OmniboxViewViews自身是真实文本编辑框,其边界已在锁头图标右侧,文本实际起始内边距仅为 6px 左右。38px 的虚构留白导致未输入/刚打开时提示符号悬空在第 3~4 个字母上方;此外,当切换到 Chrome 时 Chrome 往往全选 URL(!IsCollapsed),此前代码穿透IsCollapsed分支执行了TryCaretFromEditBounds,在全选 URL 上强行渲染了一个 38px 偏移的符号; - 空地址栏 MSAA 残留光标污染:在
UiaCaretCapture.TryElementCaret中,针对 Omnibox 调用TryMsaaCaret前未检查地址栏是否有文本内容。当新标签页地址栏为空(chrome://newtab)时,ChromiumAXSystemCaretWin仍残留上个网页的旧坐标,导致新开标签页地址栏为空时提示符号坐标失真。
- Chromium MSAA 顶层窗口光标陈旧废弃缓存污染:Chromium 顶层窗口(
- 全链路治理与精准适配:
- 在
MsaaCaretCapture中全面跳过Chrome_WidgetWin类名,坚决禁止全局 MSAA 读取 Chrome 窗口层级的陈旧废弃光标; - 在
UiaCaretCapture.CaptureCore中识别focusedIsChromiumNonEdit,当焦点在网页非编辑区时直接返回false,杜绝步骤 3 误抓取顶栏 Omnibox; - 在
UiaCaretCapture.TryElementCaret中将TryCaretFromEditBounds严格限制在IsCollapsed(selRange)纯折叠光标状态下,全选 URL 时坚决不虚构未输入光标; - 在
TryElementCaret中校验 Omnibox 必须包含有效文本才调用TryMsaaCaret,杜绝空地址栏读取旧坐标; - 将未探测到图标时的
padX修正为真实单行文本内边距6 * scale,使未输入、刚打开与光标闪烁基线 100% 严密贴合。
- 在
2. 彻底根治通用软件中光标提示符号“一开始正常,过一会儿右移了”漂移 Bug(移除全局 caret.Right 篡改)
- 深层技术根因:
- 在 v3.9 中为了解决微信输入法输拼音横跳,在
CaretController.cs中添加了全局逻辑:int caretX = caret.Right > caret.Left + 1 ? caret.Right : caret.Left;,并在UiaCaretCapture.cs的TryElementCaret中将caretX = selRect.Right > selRect.Left + 1 ? selRect.Right : selRect.Left强行写入返回矩形; - 在其他所有通用软件中(Notepad、Word、VS Code、富文本编辑器等):当用户光标处于字符间时,许多 UIA 接口返回的是光标所在单个字符的包围盒(宽度 8~14px),或者 Win32 粗光标本身宽度为 2px/3px;
- 当用户刚点击或刚打字时,
GUI后端先命中,报告单点光标(caret.Left),提示符号在字符左端(“一开始是正常的”); - 停顿片刻后,光标闪烁或 UIA 后端接管,UIA 返回了宽度 > 1 的字符包围盒,v3.9 的全局代码误将其当作组字串并强行锚定到
caret.Right,使符号从字符左端瞬移到字符右端(右移了 8~14 像素!),表现为“过一会发现右移了”。
- 在 v3.9 中为了解决微信输入法输拼音横跳,在
- 组字串尾端隔离与通用光标基准坐标还原:
- 微信输入法拼音防横跳的真实来源已在
TsfCaretCapture.cs内部将组字串的有效插入点置于caret.Left = caretX = right,宽度设为 1,完全由 TSF 内部闭环输出尾端; - 彻底还原
CaretController.cs中的x = caret.Left + offsetX - pad;与cx = caret.Left;,彻底移除误导性的caret.Right全局篡改; - 彻底还原
UiaCaretCapture.cs中的caret = selRect;,消除所有导致通用软件“过一会儿右移”的漂移根源。
- 微信输入法拼音防横跳的真实来源已在
零回归与稳定性保证
- 通用应用零回归:严格保证微信拼音输入尾端跟随不横跳、微信单行搜索框与多行聊天框垂直基线 100% 对齐、Chrome 网址栏与网页输入框、Windows 资源管理器、记事本等通用程序 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,933 字节(约 614 KB)
- zip sha256:
B0521587280A8CFB33845C04CA8F0972ACD5E419D47D4C6996DBBCF8705ACC88 - exe sha256:
1468D411A5149F26AD5430919A6763483C69D2D9C000080061E2D19FC24FD996
五、开源协议与鸣谢
- 本软件以 GNU 通用公共许可证第 3 版(GPL-3.0) 发布,© 2026 Crucialmer。
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。
Tcursor v3.8 正式版
Tcursor v3.8 发行说明(正式版)
概述
Tcursor v3.8 是一次针对 文件资源管理器鼠标漂移跟随与 Chrome 网页非输入区误弹提示 的专项架构根治版本。彻底解决了在 Windows 文件资源管理器(地址栏/搜索框/文件列表)中提示符号跟随鼠标指针移动的异常现象,以及在 Google Chrome 中未将光标点击放入文本框时也会异常出现提示符号的 Bug。
核心改进与深层技术根因修复
1. 彻底解决文件管理器提示符号随鼠标移动 Bug(根除假光标鼠标坐标合成漏洞)
- 深层技术根因:
此前版本在TryCaretFromMousePoint中引入了基于鼠标物理 X 坐标的兜底合成逻辑(clampedX = mousePt.X)。在 Windows 文件资源管理器(现代 DirectUI / XAML 地址栏、搜索框、重命名框及列表视图)中,控件虽然承载了ITextPattern接口,但底层未对字符范围暴露像素级包围盒;当用户鼠标掠过或悬停在控件包围盒范围内时,text.RangeFromPoint(mousePt)成功返回文本区间但无几何边界,直接触发了该兜底合成,将鼠标当前瞬时物理 X 坐标强行伪造成了文字插入点光标,导致用户只要在控件内移动鼠标,提示符号便完全跟着鼠标指针游走,严重偏离了文本输入框的真实文字光标。 - 坚决杜绝鼠标指针伪造光标,恢复纯正无障碍几何提取:
彻底移除TryCaretFromMousePoint中对鼠标 X 坐标的伪造推算分支,严格规定仅在 UIA 接口通过TryRectOf或TryCaretViaExpandUnit真实返回字符屏幕几何矩形时才予以采纳;在未暴露字符几何时,平滑回退至可靠的控件边界几何锚点(TryCaretFromEditBounds),彻底杜绝提示符号跟随鼠标指针漂移的严重缺陷。
2. 彻底解决 Chrome 浏览网页未点击输入框出现提示符号 Bug(网页非编辑元素拦截与 MSAA 死锁熔断)
- 深层技术根因:
- Chromium 网页非编辑文本暴露 TextPattern 选区:在 Chrome / Chromium 浏览器中,网页普通正文(段落
<p>、标题<h1>、链接<a>、通用容器<div>等)同样实现了ITextPattern;当用户在浏览网页中点击文章正文、链接或空白处时,Chromium 会在被点击的非编辑元素上生成零长度折叠选区,由于此前版本未限定网页元素必须属于编辑类型,导致这些纯阅读文本被误当作可编辑输入框并提取了字符矩形,在未点击任何输入框的情况下弹出了提示符号; - MSAA 零宽伪光标穿透引发捕获链死锁:此前版本在
MsaaCaretCapture中放宽了宽度判定(允许width == 0)。Chrome 顶层窗口(Chrome_WidgetWin_1)的AXSystemCaretWin在整个浏览器运行期间始终维护着一个内部光标矩形(未处于打字状态时报告width = 0, height = 20);width == 0的穿透导致MsaaCaretCapture恒返回true,使CaptureChain的_lastGood缓存被错误锁死在 MSAA 后端,即使 UIA 正确拦截了页面文档,后续帧也会被 MSAA 强制读取旧光标坐标而导致符号常驻不消。
- Chromium 网页非编辑文本暴露 TextPattern 选区:在 Chrome / Chromium 浏览器中,网页普通正文(段落
- 网页内容宿主物理隔离与非编辑元素绝对拦截:
在UiaCaretCapture.TryElementCaret入口处建立严格的网页元素鉴权规则:凡处于 Chromium 渲染宿主窗口类(Chrome_RenderWidgetHostHWND)之下的元素,必须明确属于可编辑控件(element.ControlType == ControlType.Edit,涵盖<input>、<textarea>以及带编辑角色的contenteditable容器);任何网页正文段落、标题、链接、普通容器或空白区域一律绝对拦截并返回false,坚决禁止其产生打字光标; - MSAA 零宽光标过滤与 Chrome 网址栏专属精准调度:
在MsaaCaretCapture中严格恢复正宽度(width > 0与height > 0)有效性校验,杜绝(0,0,0,0)及零宽假光标污染捕获链;同时将TryMsaaCaret严格限制仅在控件非网页元素、明确属于 Chrome 网址栏(OmniboxViewViews)、拥有键盘输入焦点且选区为折叠状态时才精准调用,彻底消除误触发。
零回归与稳定性保证
- 通用应用零回归:严格保证微信聊天框、Windows 记事本、EmEditor、Windows 资源管理器等通用应用的高精度定位保持 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,680 字节(约 614 KB)
- zip sha256:
E6B752CFDB20EF852CB1D13DC891F4EBCDCEDF2AEF5673B34168530CC5B7F1B9 - exe sha256:
DABA3DCCB5263CECB62D5ECB67E85ED0ED88746816B5FD5C056076EFC9859F46
五、开源协议与鸣谢
- 本软件以 GNU 通用公共许可证第 3 版(GPL-3.0) 发布,© 2026 Crucialmer。
Tcursor v3.7 正式版
Tcursor v3.7 发行说明(正式版)
概述
Tcursor v3.7 是一次针对 Google Chrome / Chromium 浏览器环境下光标高精度定位 的深度专项优化版本。彻底解决了在 Chrome 网页普通输入框(如百度、Google、Bing 等网页搜索框)未输入时光标提示符号位置偏右偏离真实光标的问题,以及在 Chrome 网址输入框(Omnibox)中未输入时鼠标点击定位光标、提示符号不会随点击位置移动的问题。
核心改进与深层技术根因修复
1. 彻底解决 Chrome 网页输入框未输入时原始位置偏右与误判 Bug(渲染宿主与原生壳层严格物理隔离)
- 深层技术根因:
在主流中英文搜索引擎(百度baidu.com、Google、Bing、淘宝、B站等)中,网页<input>搜索框的 HTMLname、placeholder或aria-label普遍包含“搜索”或“Search”字样。此前版本在TryCaretFromEditBounds中通过字符串包含判定isSearchOrAddress,导致这些普通的网页<input>元素被误判为桌面顶层地址栏,被赋予了针对桌面浏览器网址栏专属的大留白(38px * scale)。高达 38~57px 的虚假左留白直接导致提示符号悬空在网页输入框正中央偏右,严重偏离了用户刚点击放入光标时的真实起始位置。 - 网页渲染宿主物理隔离算法(
IsWebElement):
引入IsWebElement判定机制,通过检查 UIA 元素所属的 HWND 以及向上递归 8 层的父级树是否包含 Chromium 渲染宿主窗口类(Chrome_RenderWidgetHostHWND)或 HTMLControlType.Document容器。
任何处于渲染宿主之内的控件均被严格确立为网页内部元素,坚决禁止其被误判为桌面原生地址栏(isSearchOrAddress恒为false); - 标准网页单行行高与垂直居中排版:
对于所有网页内部单行输入框,统一按真实 CSS 内边距(10px * scale)排版,并结合行高(18px * scale)执行纵向精准垂直居中(padY = (bounds.Height - caretHeight) / 2),使光标未输入/刚点击放入时的提示符号位置与首个输入字符的底边基线 100% 完美重合。
2. 彻底解决 Chrome 网址输入框(Omnibox)未输入时鼠标点击光标不移动 Bug(深度桥接 MSAA 活跃系统光标与鼠标智能拾取)
- 深层技术根因:
Chrome 网址栏(OmniboxViewViews)基于 Chromium 原生 Views 桌面控件框架开发。在 Windows UI Automation 规范下,Chromium Views 的平台节点委托器(ViewsAXPlatformNodeDelegate)未实现字符级边界测量接口(GetInnerTextRangeBoundsRect),导致对其 TextPattern 选区调用GetBoundingRectangles()时无论折叠光标还是单字符扩展单元恒返回空数组;此前逻辑因无法提取有效矩形,被迫强制退回TryCaretFromEditBounds并在整个前台焦点期间死锁在固定的静态初始坐标(bounds.Left + 38 * scale),导致无论用户在网址栏的 URL 内部点击任何位置,光标提示符号永远停留在最左侧不动。 - Chromium 活跃系统光标(MSAA
OBJID_CARET)深度桥接:
Chromium 内部为兼容 Windows 无障碍体系在顶层窗口(Chrome_WidgetWin_1)实现了AXSystemCaretWin系统光标桥接器。无论在网址栏中鼠标点击任意字符位置、键盘左右方向键移动光标,还是打字输入,Chromium 均会通过MoveCaretTo实时向OBJID_CARET投递绝对精准的物理屏幕坐标。新版在 UIA 获取折叠选区后优先调用TryMsaaCaret查询当前控件在当前前台顶层窗口与焦点子窗口中的活跃 MSAA 光标,直接获取像素级物理屏幕矩形,彻底攻克 Chromium Views 在 UIA 下不暴露字符几何的核心瓶颈; - 鼠标点击位置辅助感知与即时合成(
TryCaretFromMousePoint):
当用户使用鼠标点击网址栏任意字符处时,若底层瞬态尚未完成无障碍事件分发,利用text.RangeFromPoint(mousePt)验证鼠标点击命中有效文本区域,并在控件包围盒内直接合成精准的鼠标点击物理坐标,确保 100% 随点随移、零延迟跟手。
零回归与稳定性保证
- 通用应用零回归:严格保证 EmEditor、Windows 资源管理器、微信聊天框、记事本等既有高精度特性 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,966 字节(约 614 KB)
- zip sha256:
8C6A31E5FD7746A435223B8464E2E47A1078FE5D303231A84B0BAF0D9DC28BB3 - exe sha256:
00ED21DF031354355A714F6F57A8B75370922FA8C86DD12213177A0678F67851
五、开源协议与鸣谢
- 本软件以 GNU 通用公共许可证第 3 版(GPL-3.0) 发布,© 2026 Crucialmer。
Tcursor v3.6 正式版
Tcursor v3.6 发行说明(正式版)
概述
Tcursor v3.6 是一次针对 长时间运行稳定性(彻底消除长期运行后所有白名单软件均失效的问题) 与 窗口拖拽跟手度(彻底消除拖动目标窗口时光标提示符号的拖影、卡顿感与滞后) 的里程碑级架构优化版本。
核心改进与深层技术根因修复
1. 长时运行永久有效与全局白名单自愈机制(根治“运行久了失效、必须重启”Bug)
- TSF 全局状态仓 COM RCW 接口深度泄露修复:
StateDetector.QueryTsfGlobalState在每次查询时通过TF_GetGlobalCompartment生成compMgr、compOpenClose、compConv接口,但缺少显式 COM 释放;高频调用下 COM RCW 句柄与 RPC 槽位累积耗尽,导致进程 COM 子系统瘫痪并引发 UIA/TSF 全面崩溃。新版加入finally严格Marshal.ReleaseComObject释放,彻底消灭句柄与内存泄露。 - SysInfo 输入空闲时间 32 位溢出与时钟抖动下溢修复:
修复当操作系统的高精度采样时钟与dwTime发生微小抖动或系统运行跨越时间边界时,unchecked((uint)Environment.TickCount - lii.dwTime)下溢为4294967295ms导致idleMs > IdleStopMs永久成立、控制器死锁在暂停/隐藏状态的底层缺陷。 - UIA COM 异常向上传递与真自愈重建:
消除UiaCaretCapture.CaptureCore内部吞噬致命 COM 异常的漏洞,准确识别并向外传递RPC_E_DISCONNECTED、CO_E_OBJNOTCONNECTED、RPC_S_SERVER_UNAVAILABLE等致命断开错误,使WorkerLoop真实累计连续异常并在必要时触发RecycleAutomation重新初始化 UIA 自动化客户端。 - UIA 步骤 3 焦点编辑控件瞬时检索优化:
用FindFirstDescendant+HasKeyboardFocus == true替代耗时的FindAllDescendants全树遍历,杜绝在复杂窗口(Chrome、WeChat、VSCode、Explorer)中阻塞 COM 工作线程。 - GDI 屏幕 DC 与分层窗口跨锁屏/睡眠自愈保障:
LayeredSymbolWindow监听SystemEvents.SessionSwitch(锁屏 Win+L / 解锁)与SystemEvents.PowerModeChanged(睡眠 / 唤醒),在桌面切换与系统唤醒时主动重置屏幕 DC 与位图缓存,彻底杜绝 GDI 句柄失效。 - 空进程名短时缓存自愈:
优化ForegroundReader,对启动过渡或权限受限产生的空进程名仅做 500ms 短缓存,彻底消除 30 秒僵死期。
2. 窗口拖拽位移极速瞬时跟随算法(彻底消除拖动窗口时的拖影、卡顿与滞后感)
-
工作线程直接渲染(彻底消除 20~40ms 跨线程消息泵延迟):
为LayeredSymbolWindow引入内部线程同步锁_renderGate,使工作线程无需通过 WinForms UI 线程消息泵(Control.Invoke)即可直接调用 Win32UpdateLayeredWindow,更新延迟从 20~40ms 降至 0.05ms 以内,彻底解除对主界面消息队列的依赖。 -
窗口相对位移瞬时补偿(
MoveTo):
在目标窗口被用户按住标题栏拖动或平移动画时,输入光标在窗口内的相对坐标保持不变。新版在检测到前台窗口发生屏幕位移$(\Delta X, \Delta Y)$ 时,以零 GDI 重建、零内存分配直接平移分层窗口。 -
拖拽模态期间挂起耗时跨进程查询:
在窗口位移期间直接以 8ms(~120 FPS)高频平移光标符号,跳过繁重的跨进程 UIA/TSF 查询,彻底消灭拖影、跳变与掉帧,实现 144Hz 极速跟手;窗口拖动停止后无缝恢复全量探测与校准。
零回归与稳定性保证
- 通用应用零回归:严格保证 EmEditor、Windows 资源管理器、Chrome、微信输入等既有高精度特性 100% 保持正常。
- 界面外观绝对冻结:严格保持 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局零修改。
三、下载与使用说明
- 下载下方附件
Tcursor.zip(仅约 613 KB,需本机安装有官方 .NET 10 桌面运行时); - 解压后进入
Tcursor文件夹,运行Tcursor.exe(在系统托盘后台常驻); - 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。
四、发布资产与哈希校验
解压 Tcursor.zip 后为 Tcursor/ 文件夹,包含 Tcursor.exe、Tcursor.pdb、LICENSE 以及 THIRD-PARTY-NOTICES.txt。
- 压缩包名称:
Tcursor.zip - 压缩包大小:627,925 字节(约 613 KB)
- zip sha256:
A07996EBD1E400EFB415B8912ED3E8BE56A44E22BE003AB08101CBC271AA9A9E - exe sha256:
AE39B4720C2863AF655A0FD2E2EE9EDE0E30DC188A1B02742D9009C91D5C434A
五、开源协议与鸣谢
- 本软件以 GNU 通用公共许可证第 3 版(GPL-3.0) 发布,© 2026 Crucialmer。
v3.5 - 彻底解决Chrome网址输入框鼠标点击不移动与未输入位置偏差
Tcursor v3.5 发行说明(正式版)
概述
Tcursor v3.5 是一次针对 Chrome 网址输入框光标跟随 以及 Chrome 网页与微信未输入时初始位置偏位 的关键精度修复版本。通过深入挖掘 Chromium Views 与 Windows 无障碍架构(UIA)底层,突破了 Chromium 折叠选区无几何矩形的长期痛点,并建立了 DPI 动态感知的居中与真实边距模型。
核心改进与深层技术根因修复
1. 彻底解决 Chrome 网址输入框未输入与鼠标点击时光标提示符不移动问题
- Chromium Views 折叠选区还原机制:
在 Chrome 网址输入框(Omnibox)中,当光标为零长度折叠选区(纯插入点闪烁)时,Chromium 的IUIAutomationTextRange::GetBoundingRectangles()恒返回空数组[]。既有的TryCaretViaNeighborRange依赖MoveEndpointByUnit,而 Chromium Views 对该方法抛出COMException(E_NOTIMPL)导致推算直接失败抛弃,从而退回控件几何边界推算并死锁在固定坐标bounds.Left + 28,导致无论用户点击网址栏任何字符,提示符号永远被死锁在最左侧不动。 - 基于
ExpandToEnclosingUnit(Character)的像素级还原:
Chromium 完整实现了ExpandToEnclosingUnit(TextUnit.Character)。新版通过克隆折叠选区并扩展至单字符单元,直接提取光标所在字符的精确屏幕矩形;结合caretRange.CompareEndpoints判定光标位于字符左侧或右侧,实现纯光标插入点在 Chrome 网址栏与各类 Chromium 文本控件中的 100% 像素级跟随(完美支持鼠标点击定位与键盘左右移动)。 - 成片选区真实宽度保持(禁止假光标截断):
修正TryRectOf将宽选区粗暴限制为 16px 的缺陷,保留选区真实宽度,使成片拖选/全选整条 URL 时正确判定为非光标状态,杜绝选中文字时符号被画在起始端点。 - 实时鼠标坐标光标拾取辅助(
RangeFromPoint):
引入TryCaretFromMousePoint,在用户点击输入框的瞬态或端点未暴露时,联动当前鼠标物理坐标通过text.RangeFromPoint进行第二重高精度定位。
2. 彻底解决 Chrome 网页输入框未输入时原始位置不正确(偏上/偏左)问题
- 现代网页单行输入框垂直居中与安全内边距:
现代网页<input>(高度 3248px)普遍采用垂直居中排版与 1016px 内边距。此前硬编码padY = 4、padX = 6导致未输入时光标提示符号贴紧左上角(偏上 10px、偏左 6~10px)。新版引入 DPI 动态感知模型(GetDpiScaleFor),针对单行输入框严格执行单行行高(18px*scale)与容器高度垂直居中(padY = (bounds.Height - caretHeight) / 2),并设置10px * scale真实内边距,使未输入时的原始位置与首个输入字符完全重合。 - Chrome 网址输入框未输入时左侧芯片/锁头安全留白:
通过探测子元素动态避开左侧锁头/搜索芯片图标,未探测到时提供38px * scale(DPI 缩放)安全留白,杜绝未输入时符号与搜索图标重叠。
3. 彻底解决微信聊天输入框未输入时原始位置不正确问题
- 微信聊天输入框真实边距锚定:
微信聊天框MMRichEdit首行文字起始边距为左 12px、顶 8px。此前在未输入退回边界推算时,使用了通用的padX = 6、padY = 4,导致未输入时符号明显贴在左上角边框缝隙中。新版在TryCaretFromEditBounds与TryFallbackCaret中针对微信/即时通讯类应用统一设置padX = 12 * scale、padY = 8 * scale、caretHeight = 16 * scale,与CaretController的打字文字底边基准实现 100% 绝对咬合,彻底消灭光标刚放入与未输入时的跳变和偏差。
零回归与稳定性保证
- 通用应用零回归:严格保证 EmEditor、Windows 资源管理器、记事本等通用应用的高精度定位 100% 保持正常。
- 界面外观绝对冻结:严格保持 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局不变。
三、下载与使用说明
- 下载下方附件
Tcursor.zip(仅约 612 KB,需本机安装有官方 .NET 10 桌面运行时); - 解压后进入
Tcursor文件夹,运行Tcursor.exe(在系统托盘后台常驻); - 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。
四、发布资产与哈希校验
解压 Tcursor.zip 后为 Tcursor/ 文件夹,包含 Tcursor.exe、Tcursor.pdb、LICENSE 以及 THIRD-PARTY-NOTICES.txt。
- 压缩包名称:
Tcursor.zip - 压缩包大小:626,712 字节(约 612 KB)
- zip sha256:
60BB2FCEE6B25FB3239D53AE9A52031352CD303C8D4AB635E2C361A39C49B280 - exe sha256:
07AF5EE5041D5B37C39AA89E9CE9387E0448273BC832858C0F4D6930BEABC9B4
五、开源协议与鸣谢
- 本软件以 GNU 通用公共许可证第 3 版(GPL-3.0) 发布,© 2026 Crucialmer。
- 分发包内所包含的第三方开源组件(FlaUI.UIA3 等,均为 MIT 协议)详见
THIRD-PARTY-NOTICES.txt。
Tcursor 3.4 正式版
Tcursor 3.4 正式版 发布说明
Tcursor(输入法状态光标提示) 是一款在文本输入光标旁实时显示输入法状态符号的 Windows 绿色轻量辅助工具。支持中文、英文、大写锁定、英文键盘、日文、韩文六种状态,离线纯粹运行。
一、版本更新概述(Version 3.4 Overview)
Tcursor 3.4 正式版 重点解决并彻底根治了微信桌面客户端在用户真实使用中反馈的痛点缺陷:
「微信软件中,光标提示符号仍然偏下,可以结合视觉分析处理」
结合视觉与文本坐标几何逆向分析,我们锁定了导致提示符号在微信聊天框中持续悬空、无法贴合文字基线的深层根因,并在底层框架与控制器层面进行了系统性的三态基线对齐重构:
- TSF 进程内光标假膨胀根除(最关键偏下根因):
- 在微信(WeChat 3.x / Weixin 4.x / XEditor)中,TSF(Text Services Framework)的
ITfContextView::GetTextExt在纯光标折叠选区(未输入或无字符状态)时,底层直接报告文字基线(Baseline)退化坐标(top == bottom); - 此前版本在
TsfCaretCapture中简单执行bottom = top + 20强行填补虚假 20px 高度,导致基线位置被虚构出 20px 下沉矩形,使光标提示符号被推入文字下方的空白区域中(悬空 14~20px); - 新版恢复真实退化坐标(
bottom = top + 1),让上层精准感知基线位置并消除多余间隙。
- 在微信(WeChat 3.x / Weixin 4.x / XEditor)中,TSF(Text Services Framework)的
- 即时通讯应用专属基线三态精准对齐算法:
- 真实单行光标高度态(10~24px):Win32/UIA/TSF 报告真实字符高度时,有效底边严格直取
caret.Bottom,提示符号瞬间贴紧文字底边缘; - 基线退化残片态(< 10px):当 TSF 折叠选区或仅暴露文字基线时,顶边即为文字基线,有效底边直取
caret.Top + 1*scale,紧密咬合文字基准线,彻底消灭任何向下漂移与悬空间隙; - 超大多行包围盒折叠态(> 24px):当多行编辑区或空输入框报告整框包围盒(48~150px)时,首行文字严格按 14px*scale 标准聊天字号折叠,杜绝被容器拉扯到聊天框底部。
- 真实单行光标高度态(10~24px):Win32/UIA/TSF 报告真实字符高度时,有效底边严格直取
- 聊天应用多维度全谱系立体识别体系:
- 进程覆盖:
WeChat、Weixin、WXWork(企业微信)、QQ、TIM、DingTalk(钉钉)、Feishu(飞书)、Lark; - 窗口类名覆盖:
WeChatMainWndForPC、ChatWnd等,且在CaretController中始终保持窗口类名读取(needClass: true),杜绝类名未加载导致的判空漏判; - 标题与规则匹配全覆盖:支持含“微信”、
WeChat、Weixin、WXWork的白名单规则与窗口标题匹配,杜绝任何别名遗漏; - 管理员/高完整性级别进程名提取兜底:在
ForegroundReader中对Process.GetProcessById增加OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION)+K32GetModuleBaseNameW双重兜底,即便微信以管理员身份运行或受 UIPI 隔离,亦能 100% 正确解析进程名。
- 进程覆盖:
- 其他所有软件高精度定位零回归:
- 严格保持 EmEditor、Windows 资源管理器、记事本、Edge/Chrome 网页正常输入框的高精度光标捕捉与跟随。
- 界面外观绝对冻结(零变动):
- 严格保持经典的 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系与三标签页纯净布局不变。
发布继续全面聚焦超轻量小压缩包分发:单文件仅约 1.26 MB,压缩包仅约 610 KB,启动时直接借用系统已安装的官方 .NET 10 运行时,享受 Windows Update 自动提速优化与补丁,零系统残留纯便携。
二、核心修复与改进详解
1. 微信桌面端光标基线贴合对齐
- 针对微信 3.x(MMRichEdit)与微信 4.x(Qt/XEditor)自绘渲染机制,消除了原 TSF 假坐标膨胀造成的悬空距离,无论是“刚放入光标未输入”还是“连续打字输入中”,提示符号均紧贴第一行文字基线。
2. 全面覆盖企业微信(WXWork)与高权限运行环境
- 识别规则与进程信息提取全面覆盖 Enterprise WeChat(WXWork)及 TIM 等主流即时通讯工具,并支持跨完整性级别进程名读取。
三、下载与使用说明
- 下载下方附件
Tcursor.zip(仅约 610 KB,需本机安装有官方 .NET 10 桌面运行时); - 解压后进入
Tcursor文件夹,运行Tcursor.exe(在系统托盘后台常驻); - 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。
四、发布资产与哈希校验
解压 Tcursor.zip 后为 Tcursor/ 文件夹,包含 Tcursor.exe、Tcursor.pdb、LICENSE 以及 THIRD-PARTY-NOTICES.txt。
- 压缩包名称:
Tcursor.zip - 压缩包大小:625,091 字节(约 610 KB)
- zip sha256:
9A3DB54611B2AD4667145B74BE061EDC1AD986A20DC1D5E5C12374D81E640942 - exe sha256:
6E1F5758FAB19BDD6DDA44C85AC326A88217282C178DFC104330C4C6A88211C1
五、开源协议与鸣谢
- 本软件以 GNU 通用公共许可证第 3 版(GPL-3.0) 发布,© 2026 Crucialmer。
- 分发包内所包含的第三方开源组件(FlaUI.UIA3 等,均为 MIT 协议)详见
THIRD-PARTY-NOTICES.txt。