gpt4 book ai didi

ChromiumFx/Cef 如何将自定义 IPC 消息发送到渲染器进程并执行自定义 C# 代码

转载 作者:行者123 更新时间:2023-12-05 06:33:49 25 4
gpt4 key购买 nike

我一直在尝试弄清楚如何将我自己的自定义 IPC 消息从浏览器进程发送到渲染器进程,以便它可以在渲染器进程的 UI 线程上处理。我想在渲染器进程的实际 UI 线程上执行我自己的 c# 或 c++ 代码。

根据我在一些论坛上的发现,这应该通过实现 CefRenderProcessHandler 接口(interface)然后将我创建的类的实例返回到 CefApp 中的 GetRendererProcessHandler 函数来完成。

我不知道如何使用 ChromiumFx 和 ChromiumWebBrowser 类成功完成此任务。第一个问题是 ChromiumWebBrowser.Initialize 函数创建了 CfxApp 对象,因此我没有合适的地方附加到 GetRendererHandlerProcess 事件并响应我对此处引用的 CefRenderProcessHandler 接口(interface)的实现。 http://magpcss.org/ceforum/apidocs3/projects/(default)/CefRenderProcessHandler.html

根据我的阅读,我需要实现该接口(interface)的OnProcessMessageReceived函数,以便在Renderer进程接收到IPC消息时能够正确处理它。

出于探索目的,我尝试更改 ChromiumWebBrowser.Initialize 函数以接受我传入的 CfxApp 对象,以便我可以订阅 GenRenderHandlerProcess 并提供我自己的派生自 CfxRenderProcessHandler 的类,但我的事件处理程序从未被命中在浏览器进程中。

当这不起作用时,我接下来尝试附加到 ChromiumFx RenderProcessHandler 类中的 OnProcessmessageReceived 事件。现在,当我使用此代码发送消息时,它会在线程池线程(我假设代表实际渲染器进程中的渲染器线程)上命中我在浏览器进程中的断点。

CfrProcessMessage myMessage = CfrProcessMessage.Create("HelloWorld-Remote");
CfrListValue args = myMessage.ArgumentList;
bool success = args.SetString(0, "Chris");
success = e.Browser.SendProcessMessage(CfxProcessId.Renderer, myMessage);

这对我没有帮助,因为我想在实际渲染器进程 UI 线程上执行自定义 C# 代码。

我在 ChromiumFx 的 CfxProcessMessageCreateRemoteCall 类的 RemoteProcedure 方法中放置了一些调试语句。通过我的调试语句,我可以看到当我发送消息时,这段代码在实际的渲染器进程中被命中,但我看不到如何实现我自己的自定义代码来执行。我看不到在实际渲染过程中调用 OnProcessMessageReceived 函数的位置。

有什么我想念的吗?或者,在某处是否有使用 ChromiumFx 完成此操作的示例?这是该函数的文档链接。

http://magpcss.org/ceforum/apidocs3/projects/(default)/CefRenderProcessHandler.html#OnProcessMessageReceived(CefRefPtr%3CCefBrowser%3E,CefProcessId,CefRefPtr%3CCefProcessMessage%3E)

我相信我正在尝试做的是在进程运行时消息标题下的 cef wiki 页面中解释的内容:https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage#markdown-header-inter-process-communication-ipc

提前感谢您的任何帮助/想法。

最佳答案

您应该查看 CEF 文档的“入口点函数”部分 https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage#markdown-header-entry-point-function

您需要确保在渲染进程入口点设置了正确的渲染进程处理程序。

关于ChromiumFx/Cef 如何将自定义 IPC 消息发送到渲染器进程并执行自定义 C# 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50534567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com