剪贴板:clipboard(主进程和渲染进程都能使用)
const {clipboard} = require('electron')
//剪贴板写入
clipboard.writeText('hello electron')
//读取剪贴板内容
console.log(clipboard.readText())
// preload-js/index.js 剪贴板读取本地图片
const cloneImg = ()=>{
return new Promise((resolve)=>{
clipboard.writeImage(path.resolve(__dirname,'../assets/icon.png'))
const nativeImage = clipboard.readImage()
resolve(nativeImage.toDataURL())
})
}
抓取图片 desktopCapturer
desktopCapturer.js
const { ipcMain,desktopCapturer } = require('electron')
//从屏幕获取图片
const capture = ()=>{
return desktopCapturer.getSources({
types:['window','screen'],
thumbnailSize:{
width:1366,
height:768
}
})
}
const getSource = (win)=>{
ipcMain.handle('get-img-catch',async ()=>{
console.log('get-img-catch')
let sources = await capture()
console.log(sources)
for(const source of sources){
if(source.name === 'Entire Screen'){
return source
}
}
})
}
module.exports = getSource
preload-js
//preload-js 部分
const catchImg = async ()=>{
//给主程序抛发事件,让主程序抓取图片
const result = await ipcRenderer.invoke('get-img-catch')
// 处理图片
const str = result.thumbnail.crop({ x: 0, y: 0, width: 1366, height: 768 })
return str.toDataURL()
}
main.js
const { app, BrowserWindow, Menu ,clipboard } = require('electron')
const path = require('path')
//引入主菜单和右键单击菜单
const contextMenu = Menu.buildFromTemplate(require('./menu/contextMenu'))
const mainMenu = Menu.buildFromTemplate(require('./menu/mainMenu'))
//导入视频截取功能
const getSource = require('./controller/desktopCapturer')
//引入托盘
const createTray = require('./controller/tray')
const createWindow = async ()=>{
const win = new BrowserWindow({
width:800,
height:600,
webPreferences:{
preload: path.resolve(__dirname,'./preload-js')
}
})
win.loadFile('./renderer/index.html')
//挂载右键单击菜单
win.webContents.on('context-menu',()=>{
contextMenu.popup()
})
win.webContents.openDevTools()
//挂载托盘
createTray(app,win)
// 挂载截屏方法
getSource(win)
}
app.whenReady().then(()=>{
createWindow()
app.on('activate',()=>{
if(BrowserWindow.getAllWindows().length === 0){
createWindow()
}
})
})
Menu.setApplicationMenu(mainMenu)
//适配mac 退出再次打开
app.on('window-all-closed',()=>{
if(process.platform !== 'darwin'){
app.quit()
}
})
点击抓取图片,获取全频截图
desktopCapturer.getSources()通过type获取不同屏幕可以是某个应用的界面