electron-screenshots 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/preload.js +15 -1
- package/lib/screenshots.d.ts +1 -0
- package/lib/screenshots.js +115 -89
- package/package.json +3 -3
package/lib/preload.js
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
3
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
4
|
+
if (ar || !(i in from)) {
|
|
5
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
6
|
+
ar[i] = from[i];
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
var electron_1 = require("electron");
|
|
4
13
|
var map = new Map();
|
|
@@ -7,6 +16,10 @@ electron_1.contextBridge.exposeInMainWorld('screenshots', {
|
|
|
7
16
|
console.log('contextBridge ready');
|
|
8
17
|
electron_1.ipcRenderer.send('SCREENSHOTS:ready');
|
|
9
18
|
},
|
|
19
|
+
reset: function () {
|
|
20
|
+
console.log('contextBridge reset');
|
|
21
|
+
electron_1.ipcRenderer.send('SCREENSHOTS:reset');
|
|
22
|
+
},
|
|
10
23
|
save: function (arrayBuffer, data) {
|
|
11
24
|
console.log('contextBridge save', arrayBuffer, data);
|
|
12
25
|
electron_1.ipcRenderer.send('SCREENSHOTS:save', Buffer.from(arrayBuffer), data);
|
|
@@ -27,7 +40,8 @@ electron_1.contextBridge.exposeInMainWorld('screenshots', {
|
|
|
27
40
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
28
41
|
args[_i - 1] = arguments[_i];
|
|
29
42
|
}
|
|
30
|
-
|
|
43
|
+
console.log.apply(console, __spreadArray(['contextBridge on', channel, fn], args, false));
|
|
44
|
+
fn.apply(void 0, args);
|
|
31
45
|
};
|
|
32
46
|
var listeners = (_a = map.get(fn)) !== null && _a !== void 0 ? _a : {};
|
|
33
47
|
listeners[channel] = listener;
|
package/lib/screenshots.d.ts
CHANGED
package/lib/screenshots.js
CHANGED
|
@@ -112,39 +112,23 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
112
112
|
* 开始截图
|
|
113
113
|
*/
|
|
114
114
|
Screenshots.prototype.startCapture = function () {
|
|
115
|
+
var _a, _b;
|
|
115
116
|
return __awaiter(this, void 0, void 0, function () {
|
|
116
|
-
var
|
|
117
|
-
return __generator(this, function (
|
|
118
|
-
switch (
|
|
117
|
+
var _c, bound, display, imageUrl;
|
|
118
|
+
return __generator(this, function (_d) {
|
|
119
|
+
switch (_d.label) {
|
|
119
120
|
case 0:
|
|
120
121
|
this.logger('startCapture');
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
// 防止用户连续截图
|
|
124
|
-
];
|
|
122
|
+
_c = (0, getBoundAndDisplay_1.default)(), bound = _c.bound, display = _c.display;
|
|
123
|
+
return [4 /*yield*/, Promise.all([this.capture(display), this.isReady])];
|
|
125
124
|
case 1:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
// 防止用户连续截图
|
|
129
|
-
return [4 /*yield*/, this.endCapture()];
|
|
125
|
+
imageUrl = (_d.sent())[0];
|
|
126
|
+
return [4 /*yield*/, this.createWindow(bound)];
|
|
130
127
|
case 2:
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
_a.
|
|
134
|
-
|
|
135
|
-
this.createWindow(boundAndDisplay);
|
|
136
|
-
// 捕捉桌面之后显示窗口
|
|
137
|
-
// 避免截图窗口自己被截图
|
|
138
|
-
return [4 /*yield*/, this.capture(boundAndDisplay)];
|
|
139
|
-
case 3:
|
|
140
|
-
// 捕捉桌面之后显示窗口
|
|
141
|
-
// 避免截图窗口自己被截图
|
|
142
|
-
_a.sent();
|
|
143
|
-
if (!this.$win) {
|
|
144
|
-
return [2 /*return*/];
|
|
145
|
-
}
|
|
146
|
-
this.$win.show();
|
|
147
|
-
this.$win.focus();
|
|
128
|
+
_d.sent();
|
|
129
|
+
this.$view.webContents.send('SCREENSHOTS:capture', display, imageUrl);
|
|
130
|
+
(_a = this.$win) === null || _a === void 0 ? void 0 : _a.show();
|
|
131
|
+
(_b = this.$win) === null || _b === void 0 ? void 0 : _b.focus();
|
|
148
132
|
return [2 /*return*/];
|
|
149
133
|
}
|
|
150
134
|
});
|
|
@@ -159,11 +143,8 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
159
143
|
switch (_a.label) {
|
|
160
144
|
case 0:
|
|
161
145
|
this.logger('endCapture');
|
|
162
|
-
this
|
|
163
|
-
// 保证 UI 有足够的时间渲染
|
|
164
|
-
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(function () { return resolve(); }, 77); })];
|
|
146
|
+
return [4 /*yield*/, this.reset()];
|
|
165
147
|
case 1:
|
|
166
|
-
// 保证 UI 有足够的时间渲染
|
|
167
148
|
_a.sent();
|
|
168
149
|
if (!this.$win) {
|
|
169
150
|
return [2 /*return*/];
|
|
@@ -187,74 +168,121 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
187
168
|
_this.$view.webContents.send('SCREENSHOTS:setLang', lang);
|
|
188
169
|
});
|
|
189
170
|
};
|
|
171
|
+
Screenshots.prototype.reset = function () {
|
|
172
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
173
|
+
return __generator(this, function (_a) {
|
|
174
|
+
switch (_a.label) {
|
|
175
|
+
case 0:
|
|
176
|
+
// 重置截图区域
|
|
177
|
+
this.$view.webContents.send('SCREENSHOTS:reset');
|
|
178
|
+
// 保证 UI 有足够的时间渲染
|
|
179
|
+
return [4 /*yield*/, Promise.race([
|
|
180
|
+
new Promise(function (resolve) { return setTimeout(function () { return resolve(); }, 500); }),
|
|
181
|
+
new Promise(function (resolve) { return electron_1.ipcMain.once('SCREENSHOTS:reset', function () { return resolve(); }); })
|
|
182
|
+
])];
|
|
183
|
+
case 1:
|
|
184
|
+
// 保证 UI 有足够的时间渲染
|
|
185
|
+
_a.sent();
|
|
186
|
+
return [2 /*return*/];
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
};
|
|
190
191
|
/**
|
|
191
192
|
* 初始化窗口
|
|
192
193
|
*/
|
|
193
|
-
Screenshots.prototype.createWindow = function (
|
|
194
|
-
var
|
|
195
|
-
this
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
194
|
+
Screenshots.prototype.createWindow = function (bound) {
|
|
195
|
+
var _a, _b;
|
|
196
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
197
|
+
var _this = this;
|
|
198
|
+
return __generator(this, function (_c) {
|
|
199
|
+
switch (_c.label) {
|
|
200
|
+
case 0:
|
|
201
|
+
// 重置截图区域
|
|
202
|
+
return [4 /*yield*/, this.reset()
|
|
203
|
+
// 复用未销毁的窗口
|
|
204
|
+
];
|
|
205
|
+
case 1:
|
|
206
|
+
// 重置截图区域
|
|
207
|
+
_c.sent();
|
|
208
|
+
// 复用未销毁的窗口
|
|
209
|
+
if (!this.$win || ((_b = (_a = this.$win) === null || _a === void 0 ? void 0 : _a.isDestroyed) === null || _b === void 0 ? void 0 : _b.call(_a))) {
|
|
210
|
+
this.$win = new electron_1.BrowserWindow({
|
|
211
|
+
title: 'screenshots',
|
|
212
|
+
x: bound.x,
|
|
213
|
+
y: bound.y,
|
|
214
|
+
width: bound.width,
|
|
215
|
+
height: bound.height,
|
|
216
|
+
useContentSize: true,
|
|
217
|
+
frame: false,
|
|
218
|
+
show: false,
|
|
219
|
+
autoHideMenuBar: true,
|
|
220
|
+
transparent: true,
|
|
221
|
+
resizable: false,
|
|
222
|
+
movable: false,
|
|
223
|
+
// focusable: true, 否则窗口不能及时响应esc按键,输入框也不能输入
|
|
224
|
+
focusable: true,
|
|
225
|
+
fullscreen: true,
|
|
226
|
+
// 设为true 防止mac新开一个桌面,影响效果
|
|
227
|
+
simpleFullscreen: true,
|
|
228
|
+
backgroundColor: '#00000000',
|
|
229
|
+
titleBarStyle: 'hidden',
|
|
230
|
+
alwaysOnTop: true,
|
|
231
|
+
enableLargerThanScreen: true,
|
|
232
|
+
skipTaskbar: true,
|
|
233
|
+
hasShadow: false,
|
|
234
|
+
minimizable: false,
|
|
235
|
+
maximizable: false,
|
|
236
|
+
paintWhenInitiallyHidden: false
|
|
237
|
+
});
|
|
238
|
+
// 确保获得焦点
|
|
239
|
+
this.$win.on('show', function () {
|
|
240
|
+
var _a;
|
|
241
|
+
(_a = _this.$win) === null || _a === void 0 ? void 0 : _a.focus();
|
|
242
|
+
setImmediate(function () {
|
|
243
|
+
var _a;
|
|
244
|
+
(_a = _this.$win) === null || _a === void 0 ? void 0 : _a.focus();
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
this.$win.setBounds(bound);
|
|
249
|
+
this.$win.setBrowserView(this.$view);
|
|
250
|
+
this.$view.setBounds({
|
|
251
|
+
x: 0,
|
|
252
|
+
y: 0,
|
|
253
|
+
width: bound.width,
|
|
254
|
+
height: bound.height
|
|
255
|
+
});
|
|
256
|
+
return [2 /*return*/];
|
|
257
|
+
}
|
|
258
|
+
});
|
|
225
259
|
});
|
|
226
|
-
this.$win.setBrowserView(this.$view);
|
|
227
|
-
this.$view.setBounds(bound);
|
|
228
|
-
// 重置截图区域
|
|
229
|
-
this.$view.webContents.send('SCREENSHOTS:reset');
|
|
230
260
|
};
|
|
231
|
-
Screenshots.prototype.capture = function (
|
|
232
|
-
var display = _a.display;
|
|
261
|
+
Screenshots.prototype.capture = function (display) {
|
|
233
262
|
return __awaiter(this, void 0, void 0, function () {
|
|
234
263
|
var NodeScreenshots, capturer, image, err_1, sources, source;
|
|
235
|
-
return __generator(this, function (
|
|
236
|
-
switch (
|
|
264
|
+
return __generator(this, function (_a) {
|
|
265
|
+
switch (_a.label) {
|
|
237
266
|
case 0:
|
|
238
267
|
this.logger('SCREENSHOTS:capture');
|
|
239
|
-
|
|
268
|
+
_a.label = 1;
|
|
240
269
|
case 1:
|
|
241
|
-
|
|
270
|
+
_a.trys.push([1, 4, , 6]);
|
|
242
271
|
return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require('node-screenshots')); })];
|
|
243
272
|
case 2:
|
|
244
|
-
NodeScreenshots = (
|
|
273
|
+
NodeScreenshots = (_a.sent()).Screenshots;
|
|
245
274
|
capturer = NodeScreenshots.fromDisplay(display.id);
|
|
246
|
-
this.logger('SCREENSHOTS:NodeScreenshots.fromDisplay(%d) %o', display.id, capturer);
|
|
275
|
+
this.logger('SCREENSHOTS:capture NodeScreenshots.fromDisplay(%d) %o', display.id, capturer);
|
|
247
276
|
if (!capturer) {
|
|
248
277
|
throw new Error("NodeScreenshots.fromDisplay(".concat(display.id, ") get null"));
|
|
249
278
|
}
|
|
250
279
|
return [4 /*yield*/, capturer.capture()];
|
|
251
280
|
case 3:
|
|
252
|
-
image =
|
|
253
|
-
|
|
254
|
-
return [3 /*break*/, 6];
|
|
281
|
+
image = _a.sent();
|
|
282
|
+
return [2 /*return*/, "data:image/png;base64,".concat(image.toString('base64'))];
|
|
255
283
|
case 4:
|
|
256
|
-
err_1 =
|
|
257
|
-
this.logger('SCREENSHOTS:
|
|
284
|
+
err_1 = _a.sent();
|
|
285
|
+
this.logger('SCREENSHOTS:capture NodeScreenshots capture() error %o', err_1);
|
|
258
286
|
return [4 /*yield*/, electron_1.desktopCapturer.getSources({
|
|
259
287
|
types: ['screen'],
|
|
260
288
|
thumbnailSize: {
|
|
@@ -263,9 +291,10 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
263
291
|
}
|
|
264
292
|
})];
|
|
265
293
|
case 5:
|
|
266
|
-
sources =
|
|
294
|
+
sources = _a.sent();
|
|
267
295
|
source = void 0;
|
|
268
|
-
// Linux系统上,screen.getDisplayNearestPoint 返回的 Display 对象的 id
|
|
296
|
+
// Linux系统上,screen.getDisplayNearestPoint 返回的 Display 对象的 id
|
|
297
|
+
// 和这里 source 对象上的 display_id(Linux上,这个值是空字符串) 或 id 的中间部分,都不一致
|
|
269
298
|
// 但是,如果只有一个显示器的话,其实不用判断,直接返回就行
|
|
270
299
|
if (sources.length === 1) {
|
|
271
300
|
source = sources[0];
|
|
@@ -276,13 +305,10 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
276
305
|
});
|
|
277
306
|
}
|
|
278
307
|
if (!source) {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
console.error("Can't find screen source");
|
|
282
|
-
return [2 /*return*/];
|
|
308
|
+
this.logger("SCREENSHOTS:capture Can't find screen source. sources: %o, display: %o", sources, display);
|
|
309
|
+
throw new Error("Can't find screen source");
|
|
283
310
|
}
|
|
284
|
-
|
|
285
|
-
return [3 /*break*/, 6];
|
|
311
|
+
return [2 /*return*/, source.thumbnail.toDataURL()];
|
|
286
312
|
case 6: return [2 /*return*/];
|
|
287
313
|
}
|
|
288
314
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "electron-screenshots",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "electron 截图插件",
|
|
5
5
|
"types": "lib/screenshots.d.ts",
|
|
6
6
|
"main": "lib/screenshots.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"debug": "^4.3.3",
|
|
39
39
|
"fs-extra": "^10.1.0",
|
|
40
40
|
"node-screenshots": "^0.0.3",
|
|
41
|
-
"react-screenshots": "^0.4.
|
|
41
|
+
"react-screenshots": "^0.4.4"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"electron": ">=11"
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"rimraf": "^3.0.2",
|
|
60
60
|
"typescript": "^4.5.5"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "4731a04ae6ad2afa477b54b472c28711c0c7eb16"
|
|
63
63
|
}
|