- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
代码引用 : https://github.com/aredfox/screencapturer
问题描述 :
Here是 electron带有“MainWindow”的应用程序,其中包含一个“开始捕获”按钮。一旦单击它会向主进程触发一个事件,然后主进程会启动一个新的、单独的“BrowserWindow”对象,称为“captureWindow”,它自己的 capture.html 和 capture.js 相关联。在 capture.js 中,每三秒制作一次屏幕截图并将其保存到 c:\temp\screencap(这是一个演示应用程序来说明问题,因此我暂时没有对其进行配置和硬编码路径)。每次在“craptureWindow”中进行捕获时,它都会卡住,这是我所期望的。但是,“mainWindow”对象也卡住了,这是我没想到的。 我应该如何处理这个问题,以便在另一个“BrowserWindow”对象中运行进程时主窗口不会卡住?我假设 Electron BrowserWindows(或“标签”)有一个单独的线程?
编辑 20/12/2016
可能的罪魁祸首是 desktopCapturer.getSources()。
附录:发现问题必须在getMainSource
的代码块内,因为当我缓存该“源”结果时,它不会卡住整个 Electron 。因此,一定是过滤方法或获取屏幕本身导致了卡住问题。
function getMainSource(desktopCapturer, screen, done) {
const options = {
types: ['screen'], thumbnailSize: screen.getPrimaryDisplay().workAreaSize
}
desktopCapturer.getSources(options, (err, sources) => {
if (err) return console.log('Cannot capture screen: ', err)
const isMainSource = source => source.name === 'Entire screen' || source.name === 'Screen 1'
done(sources.filter(isMainSource)[0])
})
}
最佳答案
如果您想跨平台捕获屏幕截图,我建议您使用以下方法,而不是依赖内置的 Electron API。并不是说它们不好,但它们不适合例如每三秒截屏一次。
我的解决方案是 npm-module desktop-screenshot - 和一个名为 hazardous 的 npm 包,因为这是 Windows 和 asar 执行所需要的。
我最终实现的代码是这样的——它可能是您问题的灵感来源/示例。
/* ******************************************************************** */
/* MODULE IMPORTS */
import { remote, nativeImage } from 'electron';
import path from 'path';
import os from 'os';
import { exec } from 'child_process';
import moment from 'moment';
import screenshot from 'desktop-screenshot';
/* */
/*/********************************************************************///
/* ******************************************************************** */
/* CLASS */
export default class ScreenshotTaker {
constructor() {
this.name = "ScreenshotTaker";
}
start(cb) {
const fileName = `cap_${moment().format('YYYYMMDD_HHmmss')}.png`;
const destFolder = global.config.app('capture.screenshots');
const outputPath = path.join(destFolder, fileName);
const platform = os.platform();
if(platform === 'win32') {
this.performWindowsCapture(cb, outputPath);
}
if(platform === 'darwin') {
this.performMacOSCapture(cb, outputPath);
}
if(platform === 'linux') {
this.performLinuxCapture(cb, outputPath);
}
}
performLinuxCapture(cb, outputPath) {
// debian
exec(`import -window root "${outputPath}"`, (error, stdout, stderr) => {
if(error) {
cb(error, null, outputPath);
} else {
cb(null, stdout, outputPath);
}
});
}
performMacOSCapture(cb, outputPath) {
this.performWindowsCapture(cb, outputPath);
}
performWindowsCapture(cb, outputPath) {
require('hazardous');
screenshot(outputPath, (err, complete) => {
if(err) {
cb(err, null, outputPath);
} else {
cb(null, complete, outputPath);
}
});
}
}
/*/********************************************************************///
关于javascript - Electron UI BrowserWindow 卡住主 BrowserWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41223268/
以下代码有效: import { app, BrowserWindow } from 'electron'; class Main { static mainWindow: Electron.
代码引用 : https://github.com/aredfox/screencapturer 问题描述 : Here是 electron带有“MainWindow”的应用程序,其中包含一个“开始捕
我的标题可能没有正确表达我的问题,但我找不到简洁的方法来表达问题。 问题是这样的: 我有一个由 IPC 事件触发的 BrowserWindow。当 BroswerWindow 打开时,它会向主进程发送
我调用 dialog.showOpenDialog() 来查找文件夹的路径。但问题是这不会阻塞 mainWindow。当标准路径选择 GUI 出现时,程序必须在路径选择完成后才能继续工作。谷歌搜索并意
在 electron.service.ts 的文件夹 providers 中,我有代码: import { Injectable } from '@angular/core'; // If you i
我第一次在我的 MacBook 上试用 Electron,因为我想要一个可以在其中编写桌面应用程序的环境。在退休之前我是一名程序员,使用过各种语言,但没有太多 javascript。 我正在浏览在线教
我的应用程序是全屏游戏的叠加层(alwaysOnTop),当用户单击我的叠加层时,它会获得焦点并在他们的游戏顶部显示任务栏。集中注意力很好,但我不能显示任务栏。 它在 BrowserWindow do
如果我的 Electron 应用程序打开和关闭了许多BrowserWindow,那么每个应用程序是否都具有唯一的ID? 因此,在我的应用一次运行中,如果我打开一个BrowserWindow并关闭它,然
我希望我的主窗口是屏幕的100%,而不是全屏,并且不能调整大小。 const electron = require('electron'); const url = require('url'); c
刚刚开始使用 Electron,我希望能够使用 loadURL 加载页面,但不替换整个页面。 这里的想法是如何使用像部分/模板这样的东西,这样我就可以在顶部和底部拥有一致的布局,但将不断变化的内容引入
请问有没有动态设置位置或将浏览器窗口移动到右下角的方法? BrowserWindow.setPosition(x, y) 最佳答案 您可以使用 the screen API ,并使用 fixed wi
有没有办法在 electron 中关闭 BrowserWindow 时返回值? 充其量我希望有一种方法可以从关闭事件中获取变量: win.on('closed', function(variables
当我创建一个新的 BrowserWindow 并使用 loadURL 在渲染器中使用一个 html 文件时,我猜在加载 css 之前我可以看到一闪而过的无样式内容半秒钟。 window.loadURL
我正在创建多个 UI 测试,而不是打开 Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow 的新实例,我想检查 BrowserWindow
问题 是否有可能在 Electron 中制作一个BrowserWindow,透明和模糊?因为它模糊了所有背景内容,包括应用程序和墙纸。 如果可能的话,我将如何做到这一点? 例子 这是我试过的一些代码。
const BrowserWindow = require('electron') const win = new BrowserWindow({ width: 800, height: 600 })
我正在使用 BrowserWindow.loadURL("http://google.com") 在 ElectronJS 中加载页面。稍后在我的应用程序中,我需要通过一些哈希值(例如 http://
我对 Electron 、nodejs 和 javascript 很陌生,但我一直在稳步学习,取得了不错的结果,但我在这里遇到了一些障碍,并且没有找到类似的问题。然而,我确实找到了一个有人以相同方式使
我想从渲染进程中创建一个“Worker”BrowserWindow。工作进程将进行一些长时间运行的计算并定期返返回告。 看起来我可以使用 remote 模块在渲染器进程中执行此操作,而不是直接在主进程
我想知道BrowserWindow位于两个或多个屏幕上。 我猜 Electron API 没有给出方法。我怎样才能做到这一点?有什么办法吗?? 最佳答案 没有直接的方法可以实现这一点。但是以下绝对可以
我是一名优秀的程序员,十分优秀!