gpt4 book ai didi

javascript - 退出前捕获 Electron 窗口的屏幕截图

转载 作者:太空宇宙 更新时间:2023-11-04 15:42:18 24 4
gpt4 key购买 nike

在 Electron 应用程序中,我可以使用以下方法从主进程中截取窗口的屏幕截图:

let win = new BrowserWindow(/* ... */);
let capturedPicFilePath = /* where I want that saved */
win.capturePage((img) => {
fs.writeFile(capturedPicFilePath, img.toPng(), () => console.log(`Saved ${capturedPicFilePath}`))
})

太棒了。现在我想在应用程序退出之前执行此操作。 Electron 发射 particular event为此,我尝试使用:

Event: 'before-quit' : emitted before the application starts closing its windows.

问题:如果我在该事件的处理程序中使用与上面相同的代码,则会创建文件,但该文件为空。

我猜这是因为屏幕截图是以异步方式进行的,并且发生时窗口已经关闭。

所以这对我不起作用:

app.on('before-quit', (event) => {
win.capturePage(function(img) {
fs.writeFile(capturedPicFilePath, img.toPng(), () => console.log(`Saved ${capturedPicFilePath}`))
})
})

编辑 1:在渲染器进程中使用 window.onbeforeunload 执行此操作也会失败。执行屏幕截图也为时已晚。我在主控制台中得到这个(即它进入终端):

Attempting to call a function in a renderer window that has been closed or released.

上下文:目前我正在探索屏幕捕获的局限性(主要是为了支持目的),并找到了这一点。还不确定我会如何处理这种边缘情况,我想到的不仅仅是为了支持,我还在考虑在启动时显示先前状态的模糊图片(我的应用程序的某些部分需要 1-2 秒才能加载)。

有什么想法吗?

最佳答案

我以前也遇到过类似的问题,我通过使用窗口关闭事件然后阻止它关闭来解决它。一旦我的操作执行完毕,我就运行 app.quit()

window.on('close', function (event) {
event.preventDefault();

let capturedPicFilePath = /* where you want it saved */
window.capturePage((img) => {
fs.writeFile(capturedPicFilePath, img.toPng(), () =>
console.log(`Saved ${capturedPicFilePath}`));

app.quit(); // quit once screenshot has saved.
});
});

希望这有帮助!

关于javascript - 退出前捕获 Electron 窗口的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43779624/

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