desktopCapturer 模块是 Electron 中用于捕获屏幕和窗口的模块。通过使用这个模块,你可以获取屏幕或窗口的视频流,用于实时展示或录制屏幕内容。

以下是一个简单的例子,演示如何使用 desktopCapturer 模块获取屏幕截图:
const { app, BrowserWindow, desktopCapturer } = require('electron');

let mainWindow;

app.on('ready', () => {
  mainWindow = new BrowserWindow({ width: 800, height: 600 });

  mainWindow.loadFile('index.html'); // 加载你的 HTML 文件

  // 获取屏幕截图
  desktopCapturer.getSources({ types: ['screen'], thumbnailSize: { width: 800, height: 600 } })
    .then(sources => {
      if (sources.length > 0) {
        // 在窗口中显示屏幕截图
        mainWindow.webContents.send('screenshot', sources[0].thumbnail.toDataURL());
      }
    })
    .catch(error => console.error(error));
});

// 在主进程中监听截图请求
ipcMain.on('capture-screen', () => {
  desktopCapturer.getSources({ types: ['screen'], thumbnailSize: { width: 800, height: 600 } })
    .then(sources => {
      if (sources.length > 0) {
        // 发送截图给渲染进程
        mainWindow.webContents.send('screenshot', sources[0].thumbnail.toDataURL());
      }
    })
    .catch(error => console.error(error));
});

在这个例子中,我们使用 desktopCapturer.getSources 方法获取屏幕截图。在主进程中,我们在应用程序就绪后创建了一个主窗口,并在窗口加载完成后使用 desktopCapturer.getSources 方法获取屏幕截图。然后,我们通过 mainWindow.webContents.send 方法将截图数据发送给渲染进程。

在渲染进程中,我们可以监听 screenshot 事件,以接收并显示屏幕截图:
// 在渲染进程中监听截图事件
ipcRenderer.on('screenshot', (event, dataUrl) => {
  const img = document.getElementById('screenshot');
  img.src = dataUrl;
});

在渲染进程的 HTML 文件中,我们可以使用 <img> 元素显示屏幕截图:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Screen Capture Example</title>
</head>
<body>
  <img id="screenshot" alt="Screenshot">
  <button onclick="captureScreen()">Capture Screen</button>

  <script>
    const { ipcRenderer } = require('electron');

    // 发送请求截图的消息到主进程
    function captureScreen() {
      ipcRenderer.send('capture-screen');
    }
  </script>
</body>
</html>

这只是一个简单的示例,你可以根据应用的需求扩展和改进代码。注意,屏幕捕获可能涉及到用户隐私和安全问题,因此需要在用户明确同意的情况下使用。


转载请注明出处:http://www.zyzy.cn/article/detail/10931/Electron