从完全不同的系统进程访问 Electron API

Access Electron API from a completely different system process

我正在寻找一种方法来捕获 VS Code 扩展主机的屏幕截图 window。这个 window 在我的扩展测试 运行 时打开(这来自 VS 代码扩展的默认 Yeoman 模板)。

我无法使用我的扩展程序的上下文,因为该扩展程序只能访问 VS Code API 和 VS Code 运行s 扩展程序,这些扩展程序位于与 Electron 进程(主进程或渲染器)不同的节点进程中. IPC 通过 API 而不是 运行 进程中的扩展使用。

我可以 运行 Electron 渲染器进程中的此代码(使用 DevTools 或作为 Electron 应用程序脚本的一部分)来捕获 Electron window:

const electron = require('electron');
electron.remote.getCurrentWindow().capturePage(image => {
  //electron.clipboard.writeImage(image);
  electron.clipboard.writeText(image.toDataURL());
  console.log('Data URL is in clipboard.');
});

我已经验证将它放在 VS Code window DevTools 中会生成正确的数据 URI。

为了能够从不同的节点进程执行此操作,只知道代码 window PID,我想我应该将调试器附加到 VS 代码扩展主机 Electron window 并且使用 CDP,我会向 运行 发出 Runtime.evaluate 调用,就好像它已输入到 DevTools 中一样。

但是,我正在努力附加调试器。一般有两种做法:

我现在对 Windows 感兴趣,所以我从一个新的节点进程发出 Windows 行。调试器附加成功后应该发生的是目标进程应该打印出如下内容:

Debugger listening on ws://127.0.0.1:9229/cf49bcfe-d922-4f89-b438-57755d254198
For help see https://nodejs.org/en/docs/inspector

但是在我的情况下,这仅在我使用 --inspect 启动准系统 Electron 应用程序然后发出 process._debugProcess(proc.pid); 时有效,没有 --inspect 它不会引发错误,但是也不附加调试器。

process._debugProcess 现在适用于 Electron 5。