Skip to content

截图功能

功能特性

  • ✅ 多平台支持 (Windows/macOS/Linux)
  • ✅ 全局快捷键支持 (Ctrl+Alt+A)
  • ✅ 托盘菜单集成
  • ✅ 右键菜单集成
  • ✅ 自动识别操作 (保存文件/复制到剪切板)
  • ✅ 防止重复截图保护

核心实现

截图服务 (ScreenService)

采用多平台适配策略:

  • Windows: 集成第三方工具 ScreenCapture.exe
  • macOS: 使用系统原生 screencapture 命令
  • Linux: 调用 gnome-screenshot 工具
javascript
// packages/main/src/services/screen-service.js
class ScreenService {
  // 防止重入锁
  static isCapturing = false;
  // 默认超时时间
  static TIMEOUT = 60 * 2 * 1000;

  /**
   * 执行截图
   */
  static async captureScreen() {
    // 检查是否正在截图中
    if (ScreenService.isCapturing) {
      return { success: false, type: 'busy', message: '截图正在进行中' };
    }

    ScreenService.isCapturing = true;

    try {
      const platform = process.platform;
      let result;

      if (platform === 'win32') {
        result = await ScreenService.captureWindows();
      } else if (platform === 'darwin') {
        result = await ScreenService.captureMac();
      } else if (platform === 'linux') {
        result = await ScreenService.captureLinux();
      }
      return result;
    } finally {
      ScreenService.isCapturing = false;
    }
  }

  // ... 具体平台实现代码
}

路径配置

path-config.js 中配置截图工具路径,支持开发环境和生产环境自动切换。

javascript
// packages/main/src/config/path-config.js
// 截图程序路径(开发环境和生产环境)
const SCREEN_CAPTURE_EXE_PATH = app?.isPackaged
  ? path.join(NODE_SERVER_PATH, '/deps/ScreenCapture.exe')
  : path.join(NODE_SERVER_PATH, '/deps/ScreenCapture.exe');

功能集成

1. 全局快捷键

global-shortcut.js 中注册全局快捷键 Ctrl+Alt+A

javascript
registerScreenCapture() {
  const result = globalShortcut.register('CmdOrCtrl+Alt+A', async () => {
    try {
      logger.info('通过快捷键触发截图');
      await ScreenService.safeCaptureScreen();
    } catch (error) {
      logger.error('快捷键截图失败:', error);
    }
  });
}

2. 菜单集成

在托盘菜单和右键菜单中添加截图选项。

javascript
// packages/main/src/config/menu-config.js
{
  label: '截图',
  accelerator: 'CmdOrCtrl+Alt+A',
  click: async () => {
    try {
      await ScreenService.safeCaptureScreen();
    } catch (error) {
      logger.error('菜单截图失败:', error);
    }
  },
}

平台差异说明

平台实现方式特性依赖
WindowsScreenCapture.exe支持区域选择、画笔标注、保存文件/剪切板需内置 exe 文件
macOSscreencapture -i -c系统原生交互式截图,直接复制到剪切板无需额外依赖
Linuxgnome-screenshot -a -c区域选择并复制到剪切板需安装 gnome-screenshot

使用说明

  1. 快捷键启动: 按下 Ctrl + Alt + A (Mac下为 Cmd + Alt + A)。
  2. 菜单启动:
    • 右键点击应用窗口内容区域,选择"截图"。
    • 点击系统托盘图标,选择"截图"。
  3. 操作结果:
    • Windows: 截图后可选择保存文件(自动打开保存路径)或点击完成(复制到剪切板)。
    • Mac/Linux: 截图完成后图像数据自动复制到系统剪切板,可直接粘贴使用。

基于 MIT 许可发布