我正在为 Games Overlay 项目工作,该项目使用 Electron 和 desktopCapturer 从电子之外的全屏窗口捕获一些屏幕截图。我正在使用您可以在 Electron 文档中找到的默认方法:
desktopCapturer.getSources()
使用;获取源代码navigator.mediaDevices.getUserMedia()
用;开始视频流- 创建标签并使用
video.srcObject = stream
;设置视频流 - 在 with 中绘制视频内容
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
并使用callback(canvas.toDataURL('image/png'));
它在几乎所有应用程序中都能完美运行,但在这个特别的全屏游戏中我遇到了一个问题:它工作正常并且可以正确打印屏幕,直到游戏窗口上方有一些东西,一些例子:
- 通过窗口键盘键打开窗口菜单;
- 在其上方拖动另一个非全屏窗口;
- 在其上方覆盖一个透明的电子窗口;
画布生成的图像上的结果似乎是游戏打开之前的最后一个已知状态:有时是我的桌面工作区,有时是当时打开的另一个应用程序,有时是游戏本身的加载屏幕。
我现在拥有的解决方案是在打印屏幕之前隐藏我的覆盖窗口并在此之后再次显示它,但是我必须为此解决方案工作设置 100+- ms 超时,这会导致我的覆盖层出现难看的闪烁。
我在其他一些全屏游戏中测试了相同的代码,它工作得很好。
有什么想法吗?我不知道问题是否出在 Electron 中,或者游戏是否有某些窗口配置导致了这种情况。
提前谢谢!