Last active
November 1, 2024 05:43
-
-
Save terry2010/4226c9e061fc6ca0feb9c57da04910e0 to your computer and use it in GitHub Desktop.
electron-mainWindow-capture
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<title>Document</title> | |
</head> | |
<body> | |
<video style="display:none;" height="900"></video> | |
<canvas id="screenshot-canvas" style="display:none"></canvas> | |
<img id="screenshot-img" style="display:none"/> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Access information about media sources that can be used to capture audio | |
// and video from the desktop using the navigator.mediaDevices.getUserMedia API. | |
// | |
// For more info, see: | |
// https://electronjs.org/docs/api/desktop-capturer | |
const { app, BrowserWindow,desktopCapturer ,screen } = require('electron') | |
const path = require('path') | |
let mainWindow | |
app.whenReady().then(() => { | |
mainWindow = new BrowserWindow({ | |
height: 600, | |
width: 600, | |
webPreferences: { | |
nodeIntegration: false, // default in Electron >= 5 | |
contextIsolation: true, // default in Electron >= 12 | |
preload: path.join(__dirname, 'preload.js') | |
} | |
}) | |
mainWindow.loadFile('index.html') | |
mainWindow.webContents.openDevTools({ mode: 'detach' }) | |
setTimeout(startCapture,1000) | |
}) | |
function startCapture () { | |
let allDisp = screen.getAllDisplays() | |
desktopCapturer.getSources({ types: ['screen'] }).then(async sources => { | |
for (const source of sources) { | |
allDisp.forEach((sc,k)=>{ | |
if(source.display_id == sc.id) { | |
mainWindow.webContents.send('SET_SOURCE', source.id,sc.scaleFactor,sc.size) | |
} | |
}) | |
} | |
}) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "deserted-motion-diagnose-g6mmj", | |
"productName": "deserted-motion-diagnose-g6mmj", | |
"description": "My Electron application description", | |
"keywords": [], | |
"main": "./main.js", | |
"version": "1.0.0", | |
"author": "terry", | |
"scripts": { | |
"start": "electron ." | |
}, | |
"dependencies": {}, | |
"devDependencies": { | |
"electron": "17.0.0" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const { ipcRenderer } = require('electron') | |
ipcRenderer.on('SET_SOURCE', async (event, sourceId,scaleFactor,size) => { | |
try { | |
const stream = await navigator.mediaDevices.getUserMedia({ | |
audio: false, | |
video: { | |
mandatory: { | |
chromeMediaSource: 'desktop', | |
chromeMediaSourceId: sourceId, | |
minWidth: 1280, | |
maxWidth: 10000, | |
minHeight: 720, | |
maxHeight: 4000 | |
} | |
} | |
}) | |
handleStream(stream,scaleFactor,size) | |
} catch (e) { | |
handleError(e) | |
} | |
}) | |
function handleStream (stream,scaleFactor,size) { | |
const video = document.querySelector('video') | |
video.srcObject = stream | |
video.onloadedmetadata = function(e) | |
{ | |
video.play() | |
console.log('video.size',this.videoWidth,this.videoHeight) | |
var canvas = document.getElementById('screenshot-canvas') | |
canvas.width = this.videoWidth | |
canvas.height = this.videoHeight | |
var ctx = canvas.getContext('2d') | |
ctx.drawImage(video,0,0,canvas.width,canvas.height) | |
video.remove() | |
document.getElementById('screenshot-img').src = canvas.toDataURL("image/png") | |
document.getElementById('screenshot-img').style.display = "block" | |
console.log('screen-size,scaleFactor',size,scaleFactor) | |
console.log('screenshot-img:size:', | |
canvas.width, | |
canvas.height) | |
} | |
} | |
function handleError (e) { | |
console.log(e) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment