我正在寻找一种捕获VS Code扩展宿主窗口的屏幕截图的方法。正在运行我的扩展程序的测试时(此窗口来自VS Code扩展程序的默认Yeoman模板),将打开此窗口。
我无法使用扩展程序的上下文,因为扩展程序只能访问VS Code API,并且VS Code在与Electron(主程序或渲染器)不同的Node进程中运行扩展程序。通过API使用IPC,而不是在进程内运行扩展。
我可以在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代码扩展主机Electron窗口,并使用CDP发出{{1} }来运行上面的代码,就像将其输入到DevTools中一样。
但是,我正在努力附加调试器。通常有两种方法可以做到:
Runtime.evaluate
用于Unix / macOS kill -s SIGUSR1 <node-pid>
(对于Windows)我现在对Windows感兴趣,因此我从新的Node进程发出Windows行。成功连接调试器后应该发生的是目标进程应打印出如下内容:
process._debugProcess(proc.pid);
但是,在我的情况下,这仅在我使用Debugger listening on ws://127.0.0.1:9229/cf49bcfe-d922-4f89-b438-57755d254198
For help see https://nodejs.org/en/docs/inspector
启动准系统电子应用程序然后发出--inspect
的情况下有效,而没有process._debugProcess(proc.pid);
则不会引发错误,但是不会要么连接调试器。
答案 0 :(得分:0)
StudentIds
现在可用于Electron 5。