docs: add example for taking screenshot (#20531)
This commit is contained in:
		
					parent
					
						
							
								c73e34fb9e
							
						
					
				
			
			
				commit
				
					
						db91673f23
					
				
			
		
					 3 changed files with 93 additions and 0 deletions
				
			
		
							
								
								
									
										25
									
								
								docs/fiddles/media/screenshot/take-screenshot/index.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								docs/fiddles/media/screenshot/take-screenshot/index.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					  <head>
 | 
				
			||||||
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
 | 
					  </head>
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					      <h3>Take a Screenshot</h3>
 | 
				
			||||||
 | 
					      <i>Supports: Win, macOS, Linux <span>|</span> Process: Renderer</i>
 | 
				
			||||||
 | 
					       <div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <div>
 | 
				
			||||||
 | 
					            <button id="screen-shot">View Demo</button>
 | 
				
			||||||
 | 
					            <span id="screenshot-path"></span>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <p>This demo uses the <code>desktopCapturer</code> module to gather screens in use and select the entire screen and take a snapshot of what is visible.</p>
 | 
				
			||||||
 | 
					          <p>Clicking the demo button will take a screenshot of your current screen and open it in your default viewer.</p>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <script>
 | 
				
			||||||
 | 
					      // You can also require other files to run in this process
 | 
				
			||||||
 | 
					      require('./renderer.js')
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										25
									
								
								docs/fiddles/media/screenshot/take-screenshot/main.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								docs/fiddles/media/screenshot/take-screenshot/main.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					const { BrowserWindow, app } = require('electron')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let mainWindow = null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function createWindow () {
 | 
				
			||||||
 | 
					  const windowOptions = {
 | 
				
			||||||
 | 
					    width: 600,
 | 
				
			||||||
 | 
					    height: 300,
 | 
				
			||||||
 | 
					    title: 'Take a Screenshot',
 | 
				
			||||||
 | 
					    webPreferences: {
 | 
				
			||||||
 | 
					      nodeIntegration: true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mainWindow = new BrowserWindow(windowOptions)
 | 
				
			||||||
 | 
					  mainWindow.loadFile('index.html')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mainWindow.on('closed', () => {
 | 
				
			||||||
 | 
					    mainWindow = null
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.on('ready', () => {
 | 
				
			||||||
 | 
					  createWindow()
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										43
									
								
								docs/fiddles/media/screenshot/take-screenshot/renderer.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								docs/fiddles/media/screenshot/take-screenshot/renderer.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					const { desktopCapturer } = require('electron')
 | 
				
			||||||
 | 
					const { screen, shell } = require('electron').remote
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const fs = require('fs')
 | 
				
			||||||
 | 
					const os = require('os')
 | 
				
			||||||
 | 
					const path = require('path')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const screenshot = document.getElementById('screen-shot')
 | 
				
			||||||
 | 
					const screenshotMsg = document.getElementById('screenshot-path')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					screenshot.addEventListener('click', (event) => {
 | 
				
			||||||
 | 
					  screenshotMsg.textContent = 'Gathering screens...'
 | 
				
			||||||
 | 
					  const thumbSize = determineScreenShotSize()
 | 
				
			||||||
 | 
					  const options = { types: ['screen'], thumbnailSize: thumbSize }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  desktopCapturer.getSources(options, (error, sources) => {
 | 
				
			||||||
 | 
					    if (error) return console.log(error)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sources.forEach((source) => {
 | 
				
			||||||
 | 
					      const sourceName = source.name.toLowerCase()
 | 
				
			||||||
 | 
					      if (sourceName === 'entire screen' || sourceName === 'screen 1') {
 | 
				
			||||||
 | 
					        const screenshotPath = path.join(os.tmpdir(), 'screenshot.png')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fs.writeFile(screenshotPath, source.thumbnail.toPNG(), (error) => {
 | 
				
			||||||
 | 
					          if (error) return console.log(error)
 | 
				
			||||||
 | 
					          shell.openExternal(`file://${screenshotPath}`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          const message = `Saved screenshot to: ${screenshotPath}`
 | 
				
			||||||
 | 
					          screenshotMsg.textContent = message
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function determineScreenShotSize () {
 | 
				
			||||||
 | 
					  const screenSize = screen.getPrimaryDisplay().workAreaSize
 | 
				
			||||||
 | 
					  const maxDimension = Math.max(screenSize.width, screenSize.height)
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    width: maxDimension * window.devicePixelRatio,
 | 
				
			||||||
 | 
					    height: maxDimension * window.devicePixelRatio
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue