2017-05-04 53 views
0

在電子應用之前,我可以把我的窗口的屏幕截圖使用此的主要過程:捕捉截圖戒菸

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

真棒。現在我想在應用程序退出之前這樣做。電子發射應該是一個particular event,我試圖用:

事件:'before-quit':申請前發出開始關閉其窗口。

問題:如果我在一個處理器使用相同的代碼與上述針對該事件,該文件被創建,但空。

我猜這是因爲屏幕截圖是以異步方式拍攝的,而且當它發生時窗口已經關閉。

所以這並沒有爲我工作:

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

編輯1:在渲染過程中與window.onbeforeunload這樣做失敗了。執行屏幕截圖也爲時已晚。我在主控制檯(即它到達終端)得到了這個結果:

試圖在已關閉或釋放的渲染器窗口中調用函數。

上下文:現在我正在探索屏幕捕獲(主要用於支持目的)的可能性的限制,並找到一個。我還不確定我會怎麼處理這個邊緣情況,我想這不僅僅是爲了支持,我還考慮在啓動時顯示之前狀態的模糊圖片(我的應用程序的某些部分需要1-2秒才能加載)。

任何想法?

回答

0

我以前有類似的問題,我通過使用窗口關閉事件繞過它,然後阻止它關閉。一旦我的行動已經執行,我然後跑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. 
    }); 
}); 

希望這會有所幫助!

+0

非常感謝!我接受了你的答案,但是我必須添加一個布爾值守,以避免在關閉事件上循環→退出→關閉事件→退出......我在上面的代碼片段中執行的方式與我實際做的稍有不同,但這個想法就在那裏。 (該編輯仍在等待同行評審) –