From b283b562ee96493a31f8595cf42479a3e1cdb2b8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 May 2026 05:51:53 +0000 Subject: [PATCH 1/4] Initial plan From 5fa836aff9f075cd5e99761cb7e7bfcb75921d3c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 May 2026 06:00:34 +0000 Subject: [PATCH 2/4] docs: add mstsc embedding feasibility analysis Agent-Logs-Url: https://github.com/coderbusy/Avalonia.Controls.WebView/sessions/fa570ce7-a73a-4fa2-98e8-328a66a46f0c Co-authored-by: Soar360 <15421284+Soar360@users.noreply.github.com> --- docs/mstsc-feasibility.md | 74 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/mstsc-feasibility.md diff --git a/docs/mstsc-feasibility.md b/docs/mstsc-feasibility.md new file mode 100644 index 0000000..074faae --- /dev/null +++ b/docs/mstsc-feasibility.md @@ -0,0 +1,74 @@ +# 研究:在 Avalonia.Controls.WebView 思路下内嵌 mstsc(Remote Desktop ActiveX)可行性 + +## 1. 项目现状调研(与本议题相关) + +基于当前代码,项目已经具备“平台适配器 + NativeControlHost + HWND 重父子关系”的通用能力,关键点如下: + +- 统一抽象层:`IWebViewAdapter` / `WebViewAdapter`(`src/Avalonia.Controls.WebView.Core/IWebViewAdapter.cs`、`WebViewAdapter.cs`) +- 宿主承载层:`NativeWebViewControlHost` 通过 `CreateNativeControlCore` 创建并承载原生句柄(`src/Avalonia.Controls.WebView/NativeWebViewControlHost.cs`) +- Windows 下已有两类实现: + - WebView1(WinRT/COM 互操作):`src/Avalonia.Controls.WebView.Core/Win/WebView1/*` + - WebView2(COM 互操作):`src/Avalonia.Controls.WebView.Core/Win/WebView2/*` +- 已有 `SetParent(HWND)`、尺寸同步、事件回调、资源释放等关键流程(如 `WebView1Adapter`、`WebView2BaseAdapter`) + +结论:项目在“无 WinForms,直接托管 Windows 原生/COM 控件”方面已有成熟基础,这和 mstsc 控件集成路径是同一技术方向。 + +## 2. mstsc 相关技术要点 + +mstsc 可编程能力主要来自 Remote Desktop ActiveX(`mstscax.dll`)及其 COM 接口族(如 `IMsRdpClient*`)。 + +典型特征: + +- 本质是 ActiveX/COM 控件,不是纯托管控件 +- 需要 STA 线程与消息循环 +- 需要原生窗口宿主(HWND)与 in-place 激活/尺寸/焦点管理 +- 事件通过 COM 事件机制回调(连接点模型) + +这意味着:若不依赖 WinForms `AxHost`,就需要自己做一层 ActiveX 宿主包装(或复用现有原生封装库)。 + +## 3. 可行性结论 + +**可行,但复杂度中到高,建议以 PoC 先行。** + +原因: + +1. 本项目已经验证了同类能力(COM + HWND + NativeControlHost) +2. mstsc 控件形态与 WebView1/2 不同,但“承载和生命周期管理”方法可复用 +3. 真正难点在 ActiveX 宿主细节、输入焦点、安全策略与兼容性,不在 Avalonia 侧 + +## 4. 关键实现点(建议) + +1. **新增独立适配器层(Windows only)** + 参考 `Win/WebView1`、`Win/WebView2` 结构,新增 `Win/Rdp` 目录,避免影响现有 WebView 逻辑。 + +2. **先做最小 PoC** + - 能创建控件并嵌入 `NativeControlHost` + - 能设置服务器地址并连接/断开 + - 能稳定响应 resize、focus、dispose + +3. **线程与生命周期** + - 所有 COM 创建/调用保持在 STA/UI 线程 + - 明确释放顺序(事件解绑 -> 断开连接 -> COM 释放) + - 处理异常断连与宿主销毁竞态 + +4. **输入和窗口行为** + - 焦点切换、快捷键、鼠标捕获、DPI/缩放 + - 多显示器和窗口重建(reparent)场景 + +5. **能力边界** + - 先聚焦“内嵌显示 + 基本连接” + - 高级能力(重定向、网关、高级认证策略)分阶段引入 + +## 5. 注意事项与风险 + +- **安全**:凭据处理、证书校验、剪贴板/磁盘重定向策略必须默认安全 +- **系统依赖**:功能随 Windows 版本和远程桌面组件能力差异而变化 +- **维护成本**:ActiveX/COM 宿主代码可维护性与测试成本明显高于 WebView2 +- **测试要求**:需要真实 Windows 环境联调(CI 很难完整覆盖) + +## 6. 建议的落地策略 + +1. 先提交 PoC 分支验证“可嵌入 + 可连接 + 可释放” +2. PoC 通过后再抽象公共接口,并补齐错误处理与安全默认项 +3. 最终再评估是否对外公开 API,避免过早承诺全部 mstsc 高级特性 + From 6f34aeb1c476f25bfe99c85fef57ba031a27a993 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 May 2026 06:01:04 +0000 Subject: [PATCH 3/4] docs: apply review formatting fixes Agent-Logs-Url: https://github.com/coderbusy/Avalonia.Controls.WebView/sessions/fa570ce7-a73a-4fa2-98e8-328a66a46f0c Co-authored-by: Soar360 <15421284+Soar360@users.noreply.github.com> --- docs/mstsc-feasibility.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/mstsc-feasibility.md b/docs/mstsc-feasibility.md index 074faae..067b7e1 100644 --- a/docs/mstsc-feasibility.md +++ b/docs/mstsc-feasibility.md @@ -15,7 +15,7 @@ ## 2. mstsc 相关技术要点 -mstsc 可编程能力主要来自 Remote Desktop ActiveX(`mstscax.dll`)及其 COM 接口族(如 `IMsRdpClient*`)。 +mstsc 可编程能力主要来自 Remote Desktop ActiveX (`mstscax.dll`)及其 COM 接口族 (如 `IMsRdpClient*`)。 典型特征: @@ -71,4 +71,3 @@ mstsc 可编程能力主要来自 Remote Desktop ActiveX(`mstscax.dll`)及 1. 先提交 PoC 分支验证“可嵌入 + 可连接 + 可释放” 2. PoC 通过后再抽象公共接口,并补齐错误处理与安全默认项 3. 最终再评估是否对外公开 API,避免过早承诺全部 mstsc 高级特性 - From 53ecafc1fb032ce97cb383dfff068fe84ebf594d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 May 2026 06:01:32 +0000 Subject: [PATCH 4/4] docs: normalize chinese parenthesis formatting Agent-Logs-Url: https://github.com/coderbusy/Avalonia.Controls.WebView/sessions/fa570ce7-a73a-4fa2-98e8-328a66a46f0c Co-authored-by: Soar360 <15421284+Soar360@users.noreply.github.com> --- docs/mstsc-feasibility.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mstsc-feasibility.md b/docs/mstsc-feasibility.md index 067b7e1..95ddc10 100644 --- a/docs/mstsc-feasibility.md +++ b/docs/mstsc-feasibility.md @@ -15,7 +15,7 @@ ## 2. mstsc 相关技术要点 -mstsc 可编程能力主要来自 Remote Desktop ActiveX (`mstscax.dll`)及其 COM 接口族 (如 `IMsRdpClient*`)。 +mstsc 可编程能力主要来自 Remote Desktop ActiveX(`mstscax.dll`)及其 COM 接口族(如 `IMsRdpClient*`)。 典型特征: