小白伸手一个问题,关于CEF的,调用devtools里面的截图操作报错

wujiuqier wujiuqier 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在WinForm里面添加了一个CEF控件(用代码添加的没用设计器),然后在Form代码里面添加了invokeCapture属性,希望能通过这个方法来对CEF的整个页面截图。第一次截图是正常的,但是从第二次截图开始就一直报错,也截不出来。报错信息是“Generated MessageID 100002 doesn't match returned Message Id 100001”。有没有办法可以多次截图。

鄙人把github cefsharp那个DevToolsExtensions.cs那个代码复制到项目里面来了,然后也把命名空间改过来了。

那个DevToolsClient里面的lastMessageId变量是private的,也没个getter和setter,这个变量在CaptureScreenshot方法执行ExecuteDevToolsMethodAsync方法里面的语句时候要用到。这就很烦人了,ExecuteDevToolsMethodAsync要把这个类里面的lastMessageId和执行ExecuteDevToolsMethod方法返回的消息ID做比较,如果不一样就会报错并且强制终止执行,CEF控件的GetDevToolsClient方法也看了一下,这方法实际上也是直接new对象的,就是github那个示例代码的第36行,而这个new对象之后给lastMessageId赋值是相对于CEF是写死的。

这个问题鄙人在StackOverflow也问了,过了大半天没人回复,也没人点赞点踩。不知道CSDN这边有没有大佬会解决这个了。

        private async void invokeCapture()
{
try
{
byte[] result = await winformcefdemo.CefSharp.Example.DevTools.DevToolsExtensions.CaptureScreenShotAsPng(browser);

// task.Start();
// byte[] result = task.Result;
SaveFileDialog dialog = new SaveFileDialog();
DialogResult dresult = dialog.ShowDialog();
if (dresult == DialogResult.OK)
{
string path = dialog.FileName;
try
{
File.WriteAllBytes(path, result);
MessageBox.Show(path + " saved success");
} catch (Exception e)
{
MessageBox.Show(path + "Unknown error occurred when saving to file: " + e.Message);
}
}
}
catch (Exception ee)
{
MessageBox.Show("Unknown error occurred when capturing: " + ee.Message);
}
}
...全文

相关推荐

Burp内置浏览器修复工具包

Burp Suite Professional v2026.8版内置浏览器打不开修复包

(时光煮雨)

CEF 90.5.9 集成指南:版本解析、依赖文件与踩坑笔记

桌面应用嵌入浏览器内核,是提升界面能力与复用 Web 生态的常见需求,Chromium 因此成为首选内核。CEF(Chromium Embedded Framework)以精简封装的方式,将 Chromium 的渲染与网络能力集成到原生程序中,但版本对应关系、运行时依赖和进程模型却常被忽视。一个版本号的差异,可能引发页面渲染、安全策略甚至 TLS 协议的兼容性变化。在实际工程中,CEF 常用于内网系统、工控终端等场景,同时也容易与 Playwright 的 Chromium 独立浏览器、JCEF 的 Jav

weixin_30376509

UnityWebBrowser:基于CEF的现代嵌入式浏览器解决方案

嵌入式浏览器技术是现代应用开发中的重要组成部分,它允许在原生应用中无缝集成Web内容。其核心原理是通过进程隔离架构,将成熟的网页渲染引擎与主应用分离,确保稳定性与性能。这项技术的价值在于能够将丰富的Web生态引入到原生应用中,实现动态内容展示、复杂UI构建以及实时数据可视化。在游戏开发、工业仿真、数据仪表盘等应用场景中,嵌入式浏览器能够显著提升开发效率和用户体验。UnityWebBrowser正是基于Chromium Embedded Framework(CEF)引擎,为Unity开发者提供了高性能、可交互

高效办公的小叮当

CEF vs Electron vs Tauri:2025年桌面框架选型全解析

桌面应用开发中,如何利用Web技术构建跨平台客户端是核心难题。嵌入式浏览器框架、应用运行时与系统WebView壳方案,分别对应CEF、Electron和Tauri。它们虽同为Web UI容器,但在原理上各有侧重:CEF将Chromium嵌入原生应用,Electron捆绑Chromium与Node.js,Tauri则依赖系统WebView并采用Rust后端。技术价值体现在包体积、内存占用、系统API交互与团队学习成本上的显著差异。适用场景从工业软件、办公工具到轻量级包装壳各有分工。理解这些底层机制与取舍,才能

aoe41606

CEF、Electron、Tauri选型指南:从网页转EXE到工业终端的底层逻辑

桌面Web框架本质是将Web技术与原生能力融合的运行时载体,其核心差异在于进程模型、硬件访问深度和体积性能权衡。CEF作为Chromium嵌入式C++库,提供对GPU硬解、串口直连和ActiveX控件的底层控制能力,适用于ARM64视频低延迟、Windows服务集成等强约束场景;Electron以Node.js+Chromium双运行时封装为前端友好型全栈环境,生态丰富但体积大、升级风险高;Tauri则用Rust精简运行时复用系统WebView,实现超小体积与高安全性,适合轻量级跨平台应用。三者并非替代关系

weixin_34417200
评论 1
收藏 已收藏
分享
返回顶部
wujiuqier
.NET Framework 17,748 成员 24,324 内容