0

我正在寻找一种方法来捕获 VS Code 扩展主机窗口的屏幕截图。当我的扩展程序的测试正在运行时,此窗口会打开(这来自 VS Code 扩展程序的默认 Yeoman 模板)。

我不能使用我的扩展程序的上下文,因为扩展程序只能访问 VS Code API,并且 VS Code 在与 Electron 不同的 Node 进程(主进程或渲染器)中运行扩展。IPC 通过 API 使用,而不是在进程中运行扩展。

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

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 窗口 DevTools 中会产生正确的数据 URI。

为了能够从不同的 Node 进程执行此操作,只知道代码窗口 PID,我想我会将调试器附加到 VS Code 扩展主机 Electron 窗口并使用 CDP 我会发出Runtime.evaluate调用以运行上述代码如果它被输入到 DevTools。

但是,我正在努力附加调试器。通常有两种方法可以做到:

  • kill -s SIGUSR1 <node-pid>适用于 Unix/macOS
  • process._debugProcess(proc.pid);适用于 Windows

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

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

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

4

1 回答 1

0

process._debugProcess现在使用 Electron 5 为我工作。

于 2018-07-08T07:59:43.050 回答