Угловые, электронные, машинописные и роботы - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь использовать Typescript вместе с Electron и RobotJS.Я новичок во всех этих технологиях, поэтому мне не хватает глубокого понимания того, что происходит за кулисами, поэтому я не могу по-настоящему соединить точки в этом вопросе.Electron и мое приложение работают нормально, все компилируется, но RobotJS не будет работать.Я получаю следующую ошибку:

ERROR in ./node_modules/robotjs/build/Release/robotjs.node 1:0
Module parse failed: Unexpected character '�' (1:0)
You may need an appropriate loader to handle this file type.
(Source code omitted for this binary file)

Я пытался пересобрать RobotJS для Electron, но он все равно не работает.Это модуль нативного узла?Я не уверен, нужно сначала прочитать об этом, чтобы выяснить, что мне с ним делать, если это действительно так.

Это вообще возможно?Спасибо и хорошего дня!

LE: Похоже, я пытался использовать robotjs, который опирается на узел (основной процесс) из углового (визуализированный процесс).Когда я переместил то, что я пытался сделать с robotjs, из углового компонента в main.ts, управляемый электроном, это сработало.Я постараюсь найти способ использовать его из углового, я полагаю, межпроцессного взаимодействия или чего-то еще, поскольку я пока не мог найти другого пути.Все еще жду идей, так как я сейчас в темноте.Спасибо!

1 Ответ

0 голосов
/ 28 января 2019

Хорошо, понял это. По сути, вы не можете получить доступ к API Electron Node.js прямо из Angular. Для этого вам понадобится замечательный инструмент под названием ngx-electron. Читайте об этом здесь или просто Google. После того, как вы установите этот инструмент, вы можете просто настроить его обслуживание, поскольку большинство инструкций проинструктируют вас, а затем использовать Electron remote, чтобы получить доступ к robotjs. В основном это:

const robot = this._electronService.remote.require('robotjs');
// The example supplied by robotjs
robot.setMouseDelay(2);

const twoPI = Math.PI * 2.0;
const screenSize = robot.getScreenSize();
const height = (screenSize.height / 2) - 10;
const width = screenSize.width;

for (let x = 0; x < width; x++) {
  const y = height * Math.sin((twoPI * x) / width) + height;
  robot.moveMouse(x, y);
}

Возможно, это не лучшее решение, но, учитывая мои текущие ограниченные знания об этих технологиях, это придется делать. Я открыт для мнений.

Спасибо за ваше время, приятного вам дня!

...