Как скопировать и вставить вне приложения Electron? - PullRequest
0 голосов
/ 14 января 2020

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

Вот мой код ниже запуска электронного окна (основной. js):

const { app, BrowserWindow, Menu} = require("electron");
const path = require("path");
const url = require("url");

let win;

function createWindow() {
  win = new BrowserWindow({icon:  path.join(__dirname, `/src/logo4.ico`)});
  win.maximize();

  // Create the Application's main menu
  const template = [{
    label: "Application",
    submenu: [
      {label: "About Application", selector: "orderFrontStandardAboutPanel:"},
      {type: "separator"},
      {
        label: "Quit", accelerator: "Command+Q", click: function () {
          app.quit();
        }
      }
    ]
  }, {
    label: "Edit",
    submenu: [
      {label: "Undo", accelerator: "Ctrl+Z", selector: "undo:"},
      {label: "Redo", accelerator: "Shift+Ctrl+Z", selector: "redo:"},
      {type: "separator"},
      {label: "Cut", accelerator: "Ctrl+X", selector: "cut:"},
      {label: "Copy", accelerator: "Ctrl+C", selector: "copy:"},
      {label: "Paste", accelerator: "Ctrl+V", selector: "paste:"},
      {label: "Select All", accelerator: "Ctrl+A", selector: "selectAll:"}
    ]
  }
  ];

  Menu.setApplicationMenu(Menu.buildFromTemplate(template));
  // Menu.setApplicationMenu(null);

  // load the dist folder from Angular
  win.loadURL(
    url.format({
      pathname: path.join(__dirname, `/dist/index.html`),
      protocol: "file:",
      slashes: true
    })
  );

  // The following is optional and will open the DevTools:
  // win.webContents.openDevTools()

  win.on("closed", () => {
    win = null;
  });
}

app.on("ready", createWindow);

// on macOS, closing the window doesn't quit the app
app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit();
  }
});

// initialize the app's main window
app.on("activate", () => {
  if (win === null) {
    createWindow();
  }
});

Как вы можете видеть, я пытался добавить меню и ярлыки в приложение. Он прекрасно работает для копирования и вставки в приложение, но не более того, хотя найденные источники указывают на то, что оно должно работать и снаружи. Надеюсь, вы сможете мне помочь :) Я уже уверен, что проблема не имеет ничего общего с angular или упаковщиком, так как я пытался скопировать и вставить из окна, открытого electron ., на простой html форма, и она все еще не работала. Вот форма ниже, на всякий случай, если вам это нужно:

<div class="login-wrapper" fxLayout="row" fxLayoutAlign="center center">

  <mat-card class="box">
    <mat-card-header>
      <mat-card-title>Log in</mat-card-title>
    </mat-card-header>

    <form class="example-form" [formGroup]="loginForm" (ngSubmit)="onSubmit()">
      <mat-card-content>
        <mat-form-field class="example-full-width" [ngClass]="{'error': loginForm.controls['username'].errors && !loginForm.controls['username'].pristine}" dividerColor="{{loginForm.controls['username'].errors && !loginForm.controls['username'].pristine ? 'warn' : 'primary'}}">
          <input type="text" matInput placeholder="Username" formControlName="username" required>
          <mat-error *ngIf="loginForm.controls['username'].errors && !loginForm.hasError('required')" class="error-msg">
             Username is required !
          </mat-error>
        </mat-form-field>

        <mat-form-field class="example-full-width">
          <input type="password" matInput placeholder="Password" formControlName="password" required>
          <mat-error *ngIf="loginForm.controls['password'].errors && !loginForm.hasError('required')" class="error-msg">
            Password is required
          </mat-error>
        </mat-form-field>
      </mat-card-content>
      <button type="submit"  [disabled]="!loginForm.valid" class="btn-block" color="accent" mat-stroked-button><span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
        Log in</button>
    </form>
      <mat-checkbox [(ngModel)]="remember" (change)="rememberChange()"> Remember 
         me</mat-checkbox>
      </mat-card>

    </div>

Хорошего дня и заранее спасибо сообществу

Я использую Angular 8.2.13, электрон 7.1.1 и электрон-упаковщик 13.1.1. Я упаковываю свое приложение за Windows.

Примечание: я новичок в публикации в StackOverflow, извините, если мое сообщение не в нужном месте

1 Ответ

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

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

...