From 6a6f98959581ff49269cc72bda705b2f1029d50d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E5=8D=9A=E6=96=87?= <1323515022@qq.com> Date: Fri, 30 Oct 2026 10:30:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(agent):=20=E7=BB=9D=E5=AF=B9=E5=9D=90?= =?UTF-8?q?=E6=A0=87=E6=B3=A8=E5=85=A5=E5=8E=BB=E6=8E=89=20VIRTUALDESK?= =?UTF-8?q?=E2=80=94=E2=80=94=E6=B3=A8=E5=85=A5=E7=A9=BA=E9=97=B4=E4=B8=8E?= =?UTF-8?q?=E9=87=87=E9=9B=86=E7=A9=BA=E9=97=B4=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因(实测确认) capture 用 EnumOutputs(0) 只采**主屏**,AuthOk 报告的 width/height 也是主屏; 但 input 注入带 MOUSEEVENTF_VIRTUALDESK,归一化 0..=65535 被映射到**整个虚拟 桌面**。双显示器机器上虚拟桌面(主屏 2560x1440 + 副屏 1920x1080 在左)比主屏 宽得多,手机画面与指针位置系统性错位——点主屏任务栏,指针落到别处。 单显示器时两个空间重合,所以桌面 viewer 联调从未暴露。 修法 MOUSEEVENTF_ABSOLUTE 不带 VIRTUALDESK 时,0..=65535 恰好映射到主显示器, 与采集空间一致。协议注释「鼠标坐标为虚拟桌面归一化」的语义由「整个虚拟桌面」 修正为「被采集的输出」——桌面 viewer 是绝对定位透传,行为不变。 验证(vivo S6 -> 本机双屏,修复后) - 手机拖微信标题栏:窗口跟随手指移动(drag-before/after 截图对比) - App 状态栏 norm 坐标与视图坐标换算一致(view=(643,222) norm=(39017,23968)) --- agent/src/input.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/agent/src/input.rs b/agent/src/input.rs index 9ed19f9..e2e9f0d 100644 --- a/agent/src/input.rs +++ b/agent/src/input.rs @@ -76,9 +76,15 @@ pub fn virtual_desktop() -> (i32, i32, i32, i32) { pub fn handle(ev: InputEvent) { match ev { InputEvent::MouseMove { x, y } => { - // 主控端已按虚拟桌面归一化,这里直接透传 0..65535 + // 归一化坐标系 = **被采集的那个输出**(capture 用 EnumOutputs(0), + // 即主屏;AuthOk 的 width/height 也是它)。 + // MOUSEEVENTF_ABSOLUTE 不带 VIRTUALDESK 时,0..=65535 恰好映射到 + // 主显示器——与采集空间一致。 + // 曾经带 VIRTUALDESK:多显示器机器上注入空间变成整个虚拟桌面 + // (比主屏宽),手机画面与指针位置系统性错位(2026-10-30 实测)。 + // 单显示器时两者重合,所以桌面端从未暴露此问题。 send_mouse( - MOUSEEVENTF_ABSOLUTE.0 | MOUSEEVENTF_VIRTUALDESK.0 | MOUSEEVENTF_MOVE.0, + MOUSEEVENTF_ABSOLUTE.0 | MOUSEEVENTF_MOVE.0, x as i32, y as i32, 0,