Skip to content

Releases: Crucialmer/Tcursor

Tcursor v3.13 正式版

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 14:33

Tcursor v3.13 发行说明(正式版)

概述

Tcursor v3.13 是一次针对 Google Chrome 浏览器长时间运行后光标提示符号失灵与分离不稳定 以及 Chrome 网页/主页搜索框未开始输入时光标提示符号偏左 两大深层痛点问题的专项攻坚根治版本。彻底重构了 UIA 异步调用队列模型并消除级联超时死锁;对 Chromium 后端实施退避豁免与全树深搜防护;支持 Chromium 渲染宿主跨 PID 归属鉴权与周期性轻量 COM 代理垃圾回收;并全面打通 Chromium AXSystemCaretWin 物理系统光标首选调用链路与网页搜索框放大镜图标智能避让,实现全场景长时间运行毫秒级稳定响应与未输入/打字全阶段像素级精准对齐。


核心改进与深层技术根因修复

1. 彻底根治 Chrome 长时间运行后变得不稳定与指示符号分离失灵 Bug

  • 深层技术根因:
    1. UIA 工作线程队列级联超时与 Convoy 效应:在 Chrome 长时间运行多标签页或挂载扩展的场景下,单次跨进程 UIA 查询偶发需 6090ms。调用端轮询每 2030ms 发出一个请求。一旦前序请求排队耗时超过 CallTimeoutMs,调用端超时放弃,但后台工作线程仍将超时废弃的请求执行到底。后续每个请求一入队就背负着前一个请求的延迟,形成全链级联超时死锁;
    2. CaptureChain 对 Chromium 错误施加 3 秒死锁退避惩罚:原 SlowFailureMs 为 100ms。当发生上述跨进程偶发超时时,耗时达到门限,CaptureChain 将其判定为“慢失败”并对 UIA 后端处以渐进退避(250ms -> 3000ms)。然而对于 Chromium,Windows 底层 Win32 GUI 与 MSAA 均不支持网页内部输入,UIA 是唯一可用后端!一旦 UIA 被禁用退避长达 3 秒,Chrome 将完全没有任何可用后端,导致光标符号瞬间消失或停滞数秒;
    3. 步骤 3 FindFirstDescendant 深度全树遍历卡死 Chromium:当 FocusedElement() 瞬态为 null 时,步骤 3 对顶层 Chrome 窗口执行 element.FindFirstDescendant(...)。在多标签页复杂的 Chrome 树中,全树扫描耗时高达 500~2000ms,严重阻塞后台线程并导致死锁;
    4. Chromium 多进程架构 Renderer 子进程 PID 误判:网页 <input> 在 UIA 中的 NativeWindowHandle 常为 0,而 focusedPid 是 Chromium 的渲染子进程 PID,与顶层窗口的主浏览器 PID 不相等。此前的 belongs 校验将其误判为外来元素而丢弃;
    5. COM RCW 代理对象长时堆积:长时运行每秒数十次 UIA 调用积压了海量 COM 代理对象,导致 Windows COM IPC 通道与 Chrome 内部无障碍桥接严重滞后。
  • 全链路精准攻坚:
    1. UiaCaretCapture 请求对象新增 CreatedAt 与 Abandoned 标志,调用端超时立即标记放弃;后台工作线程检测到已废弃请求直接丢弃,彻底消除排队拥堵导致的级联超时死锁;同时将超时门限提升至 200ms;
    2. 新增每 300 次调用周期性轻量 GC.Collect(1),高效回收 COM RCW 代理对象,防止 IPC 句柄累积;
    3. 升级 belongs 多进程归属判定:当 focusedPid != hwndPid 时,验证两者是否同属 Chrome/Edge 浏览器进程,同属则判定归属成立;
    4. 步骤 3 针对 Chrome_WidgetWin 窗口彻底跳过 FindFirstDescendant 全树深搜,杜绝卡死 Chromium;
    5. CaptureChain 调整 SlowFailureMs 至 300ms,并在退避机制中对 Chrome_WidgetWin 实施绝对豁免,坚决不切断 Chromium 的 UIA 通道。

2. 彻底根治 Chrome 中未开始输入时光标提示符号偏左 Bug

  • 深层技术根因:
    1. 此前代码将 TryMsaaCaret(element, topHwnd, out caret) 严格限定在 if (isAddressBar),所有网页内部输入框(如 Google 搜索框、百度搜索框)从未调用过 MSAA;
    2. 当网页输入框为空(未开始输入)时,UIA 文本范围无字符,TryCaretViaExpandUnit 必然返回 false;
    3. 代码降级到 TryCaretFromEditBounds,硬编码取普通单行输入框 padX = 10 * scale。然而 Google 搜索主页(google.com)、百度等现代搜索框左侧有宽达 36~40px 的放大镜 🔍 图标!10px 直接落在了放大镜图标正中央,比真实的文字起始光标偏左了近 30 像素;一旦用户开始打字,输入框内有了字符,TryCaretViaExpandUnit 立即生效并精准锚定在字符右侧,表现为“未开始输入时偏左,开始输入后正常”;
  • 全链路精准修复:
    1. 在 TryElementCaret 中,取消 isAddressBar 限制,对所有处于折叠纯光标态(或选区为空态)的可编辑元素均优先执行 TryMsaaCaret(element, topHwnd, out caret),直接提取 Chromium 内部 AXSystemCaretWin 维护的物理系统光标屏幕坐标(自带 bounds 包围盒有效性验证),未输入与打字阶段位置完全一致;
    2. 在 TryCaretFromEditBounds 中拓展网页搜索框(Google gLFyf / ComboBox / 包含“搜索”或“Search”)识别,未探测到图标时自动采用 38px * scale 安全内衬,垂直居中排版,彻底消除左侧放大镜 10px 假光标。

零回归与稳定性保证

  • 通用应用零回归:严格保证 EmEditor 真实字号跟随与垂直对齐、Chrome 网址栏光标跟随、Google 搜索主页 ComboBox 支持、划选文字不随鼠标跑、微信输入法输拼音尾端跟随、Windows 资源管理器、记事本等通用程序 100% 正常。
  • 界面外观绝对冻结(零变动):严格保持 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局零修改。
  • 代码自检完备性:--selftest 验证全部后端与分层窗口渲染测试均输出 RESULT: OK。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 614 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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 正式版

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 14:18

Tcursor v3.12 发行说明(正式版)

概述

Tcursor v3.12 是一次针对 EmEditor 等专业纯文本/代码编辑器中提示符号垂直基准位置不正确(字号变大时横切字符字形、字号变小时过度下坠) 与 Google Chrome 网址栏(Omnibox)中提示符号位置偏离锁头图标与鼠标点击不跟随 的专项攻坚根治版本。彻底重构了通用文本编辑器在各字号下的垂直基准对齐机制,坚决废止对常规字体行高的强制覆盖;全面升级了 Chrome 网址栏的多语言/跨平台 UIA 标识探测与 Chromium AXSystemCaretWin 活跃系统物理光标优先调用链路,并在未输入时精准避开锁头图标,实现全场景毫厘不差的像素级高精度定位。


核心改进与深层技术根因修复

1. 彻底修复 EmEditor 中光标提示符号位置不正确 Bug(恢复真实字号基线跟随与大型编辑视口兜底隔离)

  • 深层技术根因:
    1. CaretController.cs 行高强制归一化篡改(垂直 Y 偏离主因):此前版本在 !isChatApp 分支中对 caretH <= maxUiLineH (44px) 的光标一律强行覆盖为 effectiveBottom = caret.Top + 22px * scale。EmEditor 属于专业纯文本与代码编辑器,用户广泛自定义 9pt (13px)、10pt (15px)、12pt (18px)、16pt (24px) 等字号与行距。当字体较小时,强行归一化导致符号大幅下坠,甚至覆盖下一行文字;当字体或行距较大时,强行归一化导致符号向上侵入文字内部,直接横切字符字形;
    2. GuiCaretCapture.cs 零高/反向高度被误拒:Win32 自绘编辑器在特定状态下报告 rcCaret.Bottom == rcCaret.Top,此前 if (bottomRight.Y - topLeft.Y <= 0) return false; 导致 GuiCaretCapture 被误判失败;
    3. CaptureChain.TryFallbackCaret 灾难性左上角假光标穿透:当主捕获后端穿透到兜底逻辑时,TryFallbackCaret 对类名命中 isEditClass 的控件无高度上限约束,将整个 1920×1080 编辑视口的外框左上角 (focusRect.Left + 8, focusRect.Top + 4) 误当做光标,导致符号突发瞬移至全屏第一行第一列。
  • 全链路精准修复:
    1. 在 CaretController.cs 中,对处于常规排版字号范围(12px * scale <= caretH <= 48px * scale)内的光标,100% 遵照真实 caret.Bottom 锚定,彻底消除强制归一化导致的字形侵入与过度下坠;仅在 caretH < 12px 时补偿至 18px,caretH > 48px 时折叠至 20px;
    2. 在 GuiCaretCapture.cs 中容忍零高度与反向高度,自动按 Math.Max(14, Math.Abs(diffY)) 兜底保证 GUI 捕获首发命中;
    3. 在 CaptureChain.TryFallbackCaret 中增加 if (!isChat && h > (int)Math.Round(54 * scale)) return false;,严禁对大型代码编辑器(EmEditorView、Scintilla)套用窗口左上角兜底坐标。

2. 彻底修复 Chrome 网址栏(Omnibox)中光标提示符号位置不正确 Bug(MSAA 活跃系统光标优先与首字内衬校准)

  • 深层技术根因:
    1. 网址栏类名/属性识别断裂:在不同系统与语言环境下,Chrome Views 网址栏的 UIA ClassName 常为 ViewsTextfieldEdit 或为空,真正的标识存在于 AutomationId(OmniboxViewViews)与 Name(“地址和搜索栏” / “Address and search bar”)。此前代码仅检查 clsName.Contains("Omnibox"),导致地址栏识别失败;
    2. MSAA 物理光标调用次序滞后与空文本阻断:Chrome Views 网址栏的 UIA TextPattern 无法测量字符屏幕矩形,必须依赖 Chromium 内部维护的 AXSystemCaretWin(MSAA OBJID_CARET)。此前代码将 MSAA 置于 TryCaretViaExpandUnit 之后且限定 hasText 必须为真,导致未输入或点击时 MSAA 未能正确接管;
    3. 未输入时虚假 6px 留白落在锁头图标上:此前在未探测到左侧图标时取 padX = 6px。Chrome 网址栏左侧包含宽度约 28~34px 的锁头/安全图标,导致未输入时光标提示符号直接被画在锁头图标正中央。
  • 全链路精准修复:
    1. 全面拓展 isAddressBar 识别逻辑,支持 ClassName、AutomationId 及多语言 Name;
    2. 针对 isAddressBar 在纯折叠光标状态下优先调用 TryMsaaCaret,以最高优先级提取 Chromium AXSystemCaretWin 活跃系统光标,实现鼠标点击与打字时毫厘不差的物理屏幕光标跟随;
    3. 将未探测到图标时的未输入内衬修正为标准安全内衬 34px * scale,精准落在首字输入起始基线上。

零回归与稳定性保证

  • 通用应用零回归:严格保证 Google 搜索主页(ComboBox 角色支持)、文字划选不跟鼠标(仅纯折叠光标显示)、微信打字不横跳及垂直对齐、Windows 资源管理器、记事本等通用程序 100% 正常。
  • 界面外观绝对冻结:严格保持 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局零修改。
  • 代码自检完备性:--selftest 验证全部后端与分层窗口渲染测试均输出 RESULT: OK。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 614 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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 正式版

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 13:54

Tcursor v3.11 发行说明(正式版)

概述

Tcursor v3.11 是一次针对 Google Chrome 中 Google 搜索主页输入框无提示符号 与 文字划选(从后向前或从前向后)时提示符号跟随鼠标移动 的专项攻坚根治版本。全面重构了 Web 可编辑控件的鉴权体系,无缝支持携带 role="combobox" 的现代搜索与下拉建议输入框;同时彻底清除了鼠标坐标伪造光标的残留逻辑,坚决落实“仅在存在跳动的纯文字插入光标时才显示提示符号”的设计铁律,在用户划选文本时彻底隐藏符号并绝不随鼠标位移。


核心改进与深层技术根因修复

1. 彻底修复 Chrome 中 Google 搜索主页不显示光标提示符号 Bug(扩展网页可编辑控件支持 ComboBox 角色)

  • 深层技术根因:
    1. 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;
    2. 非编辑元素拦截逻辑的误杀:此前版本在拦截网页普通段落/正文时,在 CaptureCore 与 TryElementCaret 中硬编码了 focused.ControlType != ControlType.Edit,将 ControlType.ComboBox 直接当作非编辑阅读区并强制拦截(置 focusedIsChromiumNonEdit = true),导致用户在 Google 搜索框无论未输入、点击还是打字均被彻底阻断;
    3. 空控件边界推算支持缺失:此前 IsEditableControl 仅支持 ControlType.Edit,使 Google 搜索框在未输入/空内容时无法借由控件几何边界推算光标初始位置。
  • 智能可编辑控件鉴权体系(IsEditableControl):
    1. 升级 IsEditableControl,全面支持 ControlType.Edit 与 ControlType.ComboBox,同时联动验证 IsEnabled == true 以及 ValuePattern.IsReadOnly == false,精确支持 Google 搜索主页、Bing 搜索、各类带下拉建议的现代 Web 输入框;
    2. 严格阻断网页普通文本(<p>、<h1>、<a>、<div>、<span> 等均为 Text/Group/Hyperlink),保持网页正文点击 100% 零误弹。

2. 彻底根治划选文字时提示符号跟随鼠标移动 Bug(坚决执行纯折叠光标鉴权,根除鼠标光标伪造漏洞)

  • 深层技术根因:
    1. 当用户从后向前(或从前向后)按住鼠标拖拽划选成片文字时,ITextPattern.GetSelection() 处于非折叠选区状态(Start != End),此时界面处于文本高亮选中态,根本不存在跳动的文本插入光标;
    2. 此前代码在选区包含单个字符(宽度 <= 16px)时误将其当作光标采用;而在划选较长文本时,此前代码又穿透调用了 TryCaretFromMousePoint,利用鼠标瞬时物理坐标在文本控件内拾取对应字符包围盒并伪造成光标,导致提示符号在划选过程中完全跟着鼠标指针游走,严重违背了“仅在有输入文本光标跳动时才显示”的设计原则。
  • 纯折叠光标严格鉴权与假光标彻底清除:
    1. 引入折叠选区双重精准校验(CompareEndpoints == 0 且 range.GetText(1) == ""),严格限定 text2.GetCaretRange 与 text.GetSelection 必须处于纯文字插入点(折叠态)才允许提取光标;
    2. 当检测到处于非折叠选区(成片划选中、双击选词、拖选等)时,坚决返回 false 并立即隐藏符号,杜绝任何符号显示;
    3. 彻底移除 TryCaretFromMousePoint 鼠标伪造光标逻辑,彻底根除任何提示符号跟随鼠标游走的漏洞。

零回归与稳定性保证

  • 通用应用零回归:严格保证 Chrome 网址栏与网页输入框、微信输入法输拼音尾端跟随、微信搜索框/聊天框垂直对齐、Windows 资源管理器、记事本等通用程序 100% 正常。
  • 界面外观绝对冻结:严格保持 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局零修改。
  • 代码自检完备性:--selftest 验证全部后端与分层窗口渲染测试均输出 RESULT: OK。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 614 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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 正式版

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 13:43

Tcursor v3.10 发行说明(正式版)

概述

Tcursor v3.10 是一次针对 Chrome 浏览器刚打开或切换标签页时未输入状态下初始位置错误与延迟恢复 以及 通用软件中光标提示符号“一开始正常,过一会儿右移了”漂移缺陷 的攻坚根治版本。彻底解决了 Chrome 刚打开或前后台切换时提示符号出现在旧标签页陈旧坐标或虚假偏移位置的问题,并排除了全局代码对光标右侧坐标的误篡改,使通用文本编辑器及办公软件在打字与停顿间保持 100% 稳定锚定在真实文字光标处。


核心改进与深层技术根因修复

1. 彻底根除 Chrome 刚打开或切换时未输入状态下初始位置错误与延迟恢复 Bug(Chromium MSAA 污染隔离与回退拦截)

  • 深层技术根因:
    1. Chromium MSAA 顶层窗口光标陈旧废弃缓存污染:Chromium 顶层窗口(Chrome_WidgetWin_1)实现了单例 AXSystemCaretWin(系统光标桥接器)。当 Chrome 刚打开或在标签页/窗口间切换时,UIA 跨进程连接瞬间因 IPC 调度产生微弱延迟(>150ms),捕获链降级到全局 MsaaCaretCapture;此前代码未过滤 Chromium 类名,全局 MSAA 立即读取了顶层窗口留存的陈旧废弃光标坐标,导致 CaptureChain 将 _lastGood[chromePid] 锁定为 "MSAA"。在后续多轮轮询中持续采纳该错误坐标,表现为未输入时提示符号出现在荒谬位置;直到用户“点击别处”使 Chromium 更新光标或“等一会儿”系统光标闪烁消失导致 MSAA 失败,捕获链才回退到 UIA 恢复正常;
    2. UIA 步骤 3 网页正文焦点误回退搜索顶栏网址栏:在 UiaCaretCapture.CaptureCore 步骤 3 中,当用户在前台查看 Chrome 网页正文时,虽然步骤 1 识别了网页非编辑元素并拦截,但步骤 3 仍向全窗口子树搜索 HasKeyboardFocus == true 的 Edit 控件,将处于休眠激活态的顶栏 OmniboxViewViews 搜出并调用 TryCaretFromEditBounds,导致在网页正文浏览时误在地址栏弹出提示符号;
    3. 网址输入框未输入虚假留白与全选 URL 穿透:在 UiaCaretCapture.TryCaretFromEditBounds 中,针对 isSearchOrAddress(即 OmniboxViewViews),此前在未探测到内部子图标时硬编码了 padX = 38 * scale。然而 OmniboxViewViews 自身是真实文本编辑框,其边界已在锁头图标右侧,文本实际起始内边距仅为 6px 左右。38px 的虚构留白导致未输入/刚打开时提示符号悬空在第 3~4 个字母上方;此外,当切换到 Chrome 时 Chrome 往往全选 URL(!IsCollapsed),此前代码穿透 IsCollapsed 分支执行了 TryCaretFromEditBounds,在全选 URL 上强行渲染了一个 38px 偏移的符号;
    4. 空地址栏 MSAA 残留光标污染:在 UiaCaretCapture.TryElementCaret 中,针对 Omnibox 调用 TryMsaaCaret 前未检查地址栏是否有文本内容。当新标签页地址栏为空(chrome://newtab)时,Chromium AXSystemCaretWin 仍残留上个网页的旧坐标,导致新开标签页地址栏为空时提示符号坐标失真。
  • 全链路治理与精准适配:
    1. 在 MsaaCaretCapture 中全面跳过 Chrome_WidgetWin 类名,坚决禁止全局 MSAA 读取 Chrome 窗口层级的陈旧废弃光标;
    2. 在 UiaCaretCapture.CaptureCore 中识别 focusedIsChromiumNonEdit,当焦点在网页非编辑区时直接返回 false,杜绝步骤 3 误抓取顶栏 Omnibox;
    3. 在 UiaCaretCapture.TryElementCaret 中将 TryCaretFromEditBounds 严格限制在 IsCollapsed(selRange) 纯折叠光标状态下,全选 URL 时坚决不虚构未输入光标;
    4. 在 TryElementCaret 中校验 Omnibox 必须包含有效文本才调用 TryMsaaCaret,杜绝空地址栏读取旧坐标;
    5. 将未探测到图标时的 padX 修正为真实单行文本内边距 6 * scale,使未输入、刚打开与光标闪烁基线 100% 严密贴合。

2. 彻底根治通用软件中光标提示符号“一开始正常,过一会儿右移了”漂移 Bug(移除全局 caret.Right 篡改)

  • 深层技术根因:
    1. 在 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 强行写入返回矩形;
    2. 在其他所有通用软件中(Notepad、Word、VS Code、富文本编辑器等):当用户光标处于字符间时,许多 UIA 接口返回的是光标所在单个字符的包围盒(宽度 8~14px),或者 Win32 粗光标本身宽度为 2px/3px;
    3. 当用户刚点击或刚打字时,GUI 后端先命中,报告单点光标(caret.Left),提示符号在字符左端(“一开始是正常的”);
    4. 停顿片刻后,光标闪烁或 UIA 后端接管,UIA 返回了宽度 > 1 的字符包围盒,v3.9 的全局代码误将其当作组字串并强行锚定到 caret.Right,使符号从字符左端瞬移到字符右端(右移了 8~14 像素!),表现为“过一会发现右移了”。
  • 组字串尾端隔离与通用光标基准坐标还原:
    1. 微信输入法拼音防横跳的真实来源已在 TsfCaretCapture.cs 内部将组字串的有效插入点置于 caret.Left = caretX = right,宽度设为 1,完全由 TSF 内部闭环输出尾端;
    2. 彻底还原 CaretController.cs 中的 x = caret.Left + offsetX - pad; 与 cx = caret.Left;,彻底移除误导性的 caret.Right 全局篡改;
    3. 彻底还原 UiaCaretCapture.cs 中的 caret = selRect;,消除所有导致通用软件“过一会儿右移”的漂移根源。

零回归与稳定性保证

  • 通用应用零回归:严格保证微信拼音输入尾端跟随不横跳、微信单行搜索框与多行聊天框垂直基线 100% 对齐、Chrome 网址栏与网页输入框、Windows 资源管理器、记事本等通用程序 100% 正常。
  • 界面外观绝对冻结:严格保持 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局零修改。
  • 代码自检完备性:--selftest 验证全部后端与分层窗口渲染测试均输出 RESULT: OK。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 614 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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 正式版

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 13:22

Tcursor v3.9 发行说明(正式版)

概述

Tcursor v3.9 是一次针对 微信搜索框光标提示垂直对齐不一致 与 微信输入法输拼音阶段提示符号首尾来回跳跃 的专项攻坚根治版本。彻底解决了在微信顶栏搜索框中提示符号“时而偏上、时而正常”的纵向位置漂移,以及在使用微信输入法或主流输入法打字输入拼音字母过程中,提示符号在拼音串开头和结尾来回频繁横跳的严重缺陷,确保光标提示符号始终稳定贴合在拼音字母尾部。


核心改进与深层技术根因修复

1. 彻底根治微信搜索框光标提示符号“时而偏上、时而正常”Bug(退化行高补齐与单行搜索框居中排版)

  • 深层技术根因:
    1. TSF 退化光标行高误判(偏上根因):在 CaretController 中,当 TSF 或底层窗口报告纯光标折叠选区(caretH < 10px * scale,例如折叠选区 caretH == 1)时,此前逻辑误假设底层 top 直接位于文字基线(Baseline),执行了 effectiveBottom = caret.Top + 1px。然而 TSF ITfContextView::GetTextExt 报告的 top 实际上是字符或单行的顶边(Top),仅加 1px 导致底边被强行绘制在字符顶部基线上方,比正常光标(caret.Bottom = caret.Top + 16px)生生上移了 15px,产生严重的“偏上”缺陷;当 Win32 GUI 线程光标恢复并报告正常高度(16px)时又恢复正常,两者交替触发表现为“有时候偏上、有时候正常”;
    2. UIA 容器边界误套用多行聊天留白(未输入偏下剪刀差):在 UiaCaretCapture.TryCaretFromEditBounds 中,微信左上角的单行搜索框(容器高度仅 24~28px)因进程名被粗暴判为 isChat,套用了多行聊天窗口专属的大顶部边距(padY = 8 * scale)与 caretHeight = 16 * scale,未执行单行输入框的垂直居中排版,导致未输入时偏向底边,与打字时的文字基线存在纵向剪刀差。
  • 退化光标行高智能补齐:
    在 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(组字串末尾恒定锚定机制)

  • 深层技术根因:
    1. TSF 拼音组字串跨度锚点错误:在 TsfCaretCapture 中,调用 TSF GetTextExt 测量拼音组字串(Composition Range)时,返回的包围盒跨度包含 left(拼音串首字母起始坐标)与 right(拼音串末字母结束坐标)。此前代码直接将矩形左端赋给光标(caret = new CaretRect(left, ...)),导致 CaretController 将提示符号定位于拼音字母开头;
    2. Win32 系统光标与 TSF 跨度锚点相反:Win32 GuiCaretCapture 通过 GetGUIThreadInfo 读取系统光标时,微信输入法与主流 IME 会将系统插入点光标置于拼音串末尾(caret.Left == right);
    3. 捕获后端交替触发导致高频横跳:打字输拼音过程中,随着按键触发、IME 消息泵处理以及光标闪烁,GUI 捕获器与 TSF 捕获器高频交替命中(GUI 命中时在末尾,TSF 命中时在开头),导致提示符号在拼音文本首尾剧烈来回横跳,而非跟随在拼音字母后方。
  • 全链路末尾插入点恒定锚定:
    1. 在 TsfCaretCapture 中,当 right > left + 1(存在拼音组字串或文本选区跨度)时,光标有效插入点绝对锚定在文本末端(caretX = right),杜绝输出首字母坐标;
    2. 在 UiaCaretCapture 中,对 Text2.GetCaretRange 与 Text.GetSelection 同样建立末端锚定,若选区存在有效字符宽度,统一取 selRect.Right;
    3. 在 CaretController 控制核心中建立第二道坚固防线:任何后端报告 caret.Right > caret.Left + 1 时,横向坐标统一严格取 caret.Right,使提示符号在整个输拼音阶段始终稳定贴合在拼音字母尾部(caret.Right),彻底杜绝首尾来回跳跃!

零回归与稳定性保证

  • 通用应用零回归:严格保证 Chrome 网址栏与网页输入框、Windows 资源管理器、微信聊天框、记事本、EmEditor 等通用应用的高精度定位保持 100% 正常。
  • 界面外观绝对冻结:严格保持 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局零修改。
  • 代码自检完备性:--selftest 验证全部后端与分层窗口渲染测试均输出 RESULT: OK。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 614 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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 正式版

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 13:07

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 死锁熔断)

  • 深层技术根因:
    1. Chromium 网页非编辑文本暴露 TextPattern 选区:在 Chrome / Chromium 浏览器中,网页普通正文(段落 <p>、标题 <h1>、链接 <a>、通用容器 <div> 等)同样实现了 ITextPattern;当用户在浏览网页中点击文章正文、链接或空白处时,Chromium 会在被点击的非编辑元素上生成零长度折叠选区,由于此前版本未限定网页元素必须属于编辑类型,导致这些纯阅读文本被误当作可编辑输入框并提取了字符矩形,在未点击任何输入框的情况下弹出了提示符号;
    2. MSAA 零宽伪光标穿透引发捕获链死锁:此前版本在 MsaaCaretCapture 中放宽了宽度判定(允许 width == 0)。Chrome 顶层窗口(Chrome_WidgetWin_1)的 AXSystemCaretWin 在整个浏览器运行期间始终维护着一个内部光标矩形(未处于打字状态时报告 width = 0, height = 20);width == 0 的穿透导致 MsaaCaretCapture 恒返回 true,使 CaptureChain 的 _lastGood 缓存被错误锁死在 MSAA 后端,即使 UIA 正确拦截了页面文档,后续帧也会被 MSAA 强制读取旧光标坐标而导致符号常驻不消。
  • 网页内容宿主物理隔离与非编辑元素绝对拦截:
    在 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。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 614 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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 正式版

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 12:17

Tcursor v3.7 发行说明(正式版)

概述

Tcursor v3.7 是一次针对 Google Chrome / Chromium 浏览器环境下光标高精度定位 的深度专项优化版本。彻底解决了在 Chrome 网页普通输入框(如百度、Google、Bing 等网页搜索框)未输入时光标提示符号位置偏右偏离真实光标的问题,以及在 Chrome 网址输入框(Omnibox)中未输入时鼠标点击定位光标、提示符号不会随点击位置移动的问题。


核心改进与深层技术根因修复

1. 彻底解决 Chrome 网页输入框未输入时原始位置偏右与误判 Bug(渲染宿主与原生壳层严格物理隔离)

  • 深层技术根因:
    在主流中英文搜索引擎(百度 baidu.com、Google、Bing、淘宝、B站等)中,网页 <input> 搜索框的 HTML name、placeholder 或 aria-label 普遍包含“搜索”或“Search”字样。此前版本在 TryCaretFromEditBounds 中通过字符串包含判定 isSearchOrAddress,导致这些普通的网页 <input> 元素被误判为桌面顶层地址栏,被赋予了针对桌面浏览器网址栏专属的大留白(38px * scale)。高达 38~57px 的虚假左留白直接导致提示符号悬空在网页输入框正中央偏右,严重偏离了用户刚点击放入光标时的真实起始位置。
  • 网页渲染宿主物理隔离算法(IsWebElement):
    引入 IsWebElement 判定机制,通过检查 UIA 元素所属的 HWND 以及向上递归 8 层的父级树是否包含 Chromium 渲染宿主窗口类(Chrome_RenderWidgetHostHWND)或 HTML ControlType.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。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 614 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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 正式版

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 11:44

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)即可直接调用 Win32 UpdateLayeredWindow,更新延迟从 20~40ms 降至 0.05ms 以内,彻底解除对主界面消息队列的依赖。
  • 窗口相对位移瞬时补偿(MoveTo):
    在目标窗口被用户按住标题栏拖动或平移动画时,输入光标在窗口内的相对坐标保持不变。新版在检测到前台窗口发生屏幕位移 $(\Delta X, \Delta Y)$ 时,以零 GDI 重建、零内存分配直接平移分层窗口。
  • 拖拽模态期间挂起耗时跨进程查询:
    在窗口位移期间直接以 8ms(~120 FPS)高频平移光标符号,跳过繁重的跨进程 UIA/TSF 查询,彻底消灭拖影、跳变与掉帧,实现 144Hz 极速跟手;窗口拖动停止后无缝恢复全量探测与校准。

零回归与稳定性保证

  • 通用应用零回归:严格保证 EmEditor、Windows 资源管理器、Chrome、微信输入等既有高精度特性 100% 保持正常。
  • 界面外观绝对冻结:严格保持 960×680 画幅、100px 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局零修改。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 613 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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网址输入框鼠标点击不移动与未输入位置偏差

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 11:08

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 纵向独立实时预览视口、全局圆角体系及三标签页纯净布局不变。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 612 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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 正式版

Choose a tag to compare

@Crucialmer Crucialmer released this 17 Oct 10:43

Tcursor 3.4 正式版 发布说明

Tcursor(输入法状态光标提示) 是一款在文本输入光标旁实时显示输入法状态符号的 Windows 绿色轻量辅助工具。支持中文、英文、大写锁定、英文键盘、日文、韩文六种状态,离线纯粹运行。


一、版本更新概述(Version 3.4 Overview)

Tcursor 3.4 正式版 重点解决并彻底根治了微信桌面客户端在用户真实使用中反馈的痛点缺陷:

「微信软件中,光标提示符号仍然偏下,可以结合视觉分析处理」

结合视觉与文本坐标几何逆向分析,我们锁定了导致提示符号在微信聊天框中持续悬空、无法贴合文字基线的深层根因,并在底层框架与控制器层面进行了系统性的三态基线对齐重构:

  1. 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),让上层精准感知基线位置并消除多余间隙。
  2. 即时通讯应用专属基线三态精准对齐算法:
    • 真实单行光标高度态(10~24px):Win32/UIA/TSF 报告真实字符高度时,有效底边严格直取 caret.Bottom,提示符号瞬间贴紧文字底边缘;
    • 基线退化残片态(< 10px):当 TSF 折叠选区或仅暴露文字基线时,顶边即为文字基线,有效底边直取 caret.Top + 1*scale,紧密咬合文字基准线,彻底消灭任何向下漂移与悬空间隙;
    • 超大多行包围盒折叠态(> 24px):当多行编辑区或空输入框报告整框包围盒(48~150px)时,首行文字严格按 14px*scale 标准聊天字号折叠,杜绝被容器拉扯到聊天框底部。
  3. 聊天应用多维度全谱系立体识别体系:
    • 进程覆盖: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% 正确解析进程名。
  4. 其他所有软件高精度定位零回归:
    • 严格保持 EmEditor、Windows 资源管理器、记事本、Edge/Chrome 网页正常输入框的高精度光标捕捉与跟随。
  5. 界面外观绝对冻结(零变动):
    • 严格保持经典的 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 等主流即时通讯工具,并支持跨完整性级别进程名读取。

三、下载与使用说明

  1. 下载下方附件 Tcursor.zip(仅约 610 KB,需本机安装有官方 .NET 10 桌面运行时);
  2. 解压后进入 Tcursor 文件夹,运行 Tcursor.exe(在系统托盘后台常驻);
  3. 右键托盘图标可进行光标符号与外观实时预览设置、白名单规则配置及以管理员身份重启等操作。

四、发布资产与哈希校验

解压 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。