在退出之前捕获Electron窗口的屏幕截图

时间:2017-05-04 09:56:32

标签: javascript electron

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

SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.

真棒。现在我想在应用退出之前做到这一点。电子为此发出particular event,我试图使用:

  

事件:let win = new BrowserWindow(/* ... */); let capturedPicFilePath = /* where I want that saved */ win.capturePage((img) => { fs.writeFile(capturedPicFilePath, img.toPng(), () => console.log(`Saved ${capturedPicFilePath}`)) }) :在应用程序开始关闭窗口之前发出。

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

我猜它是因为屏幕截图是以异步方式拍摄的,当窗口发生时窗口已经关闭。

所以这对我不起作用:

'before-quit'

编辑1:在app.on('before-quit', (event) => { win.capturePage(function(img) { fs.writeFile(capturedPicFilePath, img.toPng(), () => console.log(`Saved ${capturedPicFilePath}`)) }) }) 的渲染器过程中执行此操作也会失败。执行屏幕截图也为时已晚。我在主控制台中得到它(即它转到终端):

  

尝试在已关闭或释放的渲染器窗口中调用函数。

背景信息:目前我正在探索屏幕捕获可能做的限制(主要是出于支持目的),并找到了一个。还不确定我会用这个边缘情况做什么,我想到它不仅仅是为了支持,我还考虑在启动时显示以前状态的模糊图片(我的应用程序的某些部分需要1-2秒才能加载)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

之前我遇到过类似的问题,我通过使用窗口关闭事件绕过它,然后阻止它关闭。一旦我的行动完成,我就跑了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.
    });
});

希望这有帮助!