You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何操作另一个Delphi进程中WebView4Delphi的WebView2内容?

跨进程访问WebView4Delphi的WebView2组件

问题描述

需要跨进程访问另一个基于WebView4Delphi组件开发的Delphi程序中的WebView2,实现填充网页表单、点击按钮的操作。目前已通过窗口查找代码定位到网页所在窗口,但无法获取WebView2接口,现有窗口查找代码如下:

MainWindow := FindWindow('TFWebViewExplorer.UnicodeClass', nil);
if MainWindow = 0 then
  Exit;
LWnd := FindWindowEx(MainWindow, 0, 'TWVWindowParent', nil);
if LWnd <> 0 then
  LWnd := FindWindowEx(LWnd, 0, 'Chrome_WidgetWin_0', nil);
if LWnd <> 0 then
  LWnd := FindWindowEx(LWnd, 0, 'Chrome_WidgetWin_1', nil);
if LWnd <> 0 then
  LWnd := FindWindowEx(LWnd, 0, 'Intermediate D3D Window', nil);

目标是获取TWVBrowserBase类实例,调用其ExecuteScript()方法运行JavaScript实现需求。

可行解决方案

1. 目标进程主动暴露通信能力

在使用WebView4Delphi的目标程序中添加跨进程通信逻辑,接收外部指令后执行对应操作:

  • 注册Windows自定义消息,外部程序通过SendMessage发送包含JS脚本的消息,目标进程收到后调用TWVBrowserBase.ExecuteScript()执行
  • 采用命名管道、共享内存等IPC机制,外部程序将需要执行的JS脚本传递到目标进程,由目标进程内部调用WebView2接口执行

2. 启用WebView2远程调试协议

WebView2基于Chromium内核,支持远程调试协议,可通过该协议跨进程控制WebView2:

  • 在目标程序初始化WebView2时,设置调试端口参数:
    var
      LEnvOptions: TCoreWebView2EnvironmentOptions;
    begin
      LEnvOptions := TCoreWebView2EnvironmentOptions.Create;
      try
        LEnvOptions.AdditionalBrowserArguments := '--remote-debugging-port=9222';
        // 初始化WebView2环境时传入该Options
      finally
        LEnvOptions.Free;
      end;
    end;
    
  • 外部程序通过HTTP请求http://localhost:9222/json获取当前页面的调试目标信息,建立WebSocket连接后发送调试命令执行JS脚本

3. DLL注入目标进程

通过DLL注入技术,在目标进程空间内直接获取TWVBrowserBase实例:

  • 编写注入DLL,在DLL入口遍历目标进程的VCL组件树,定位到TWVBrowserBase类型的组件实例
  • 获取实例后直接调用其ExecuteScript()方法,执行所需的JavaScript代码

注意事项

  • 跨进程操作需确保程序具备足够权限,避免因权限不足导致操作失败
  • 使用远程调试协议时,需注意端口的安全性,防止未授权访问
  • DLL注入需熟悉Delphi内存操作与VCL组件模型,避免破坏目标进程的稳定性

内容的提问来源于stack exchange,提问作者tombones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:43:15