【问题标题】:How to copy and paste outside an Electron app?如何在 Electron 应用程序之外复制和粘贴?
【发布时间】:2020-05-01 01:52:55
【问题描述】:

如果我的问题已经得到解答,请提前抱歉,因为我在搜索时没有找到任何答案。我目前正在使用 Electron 等电子打包器构建 Angular 桌面应用程序。我需要能够将文本从应用程序内部复制并粘贴到另一个窗口,并且以其他方式相同。如果我留在应用程序内,我已经可以复制和粘贴。 正如您将在我的代码中看到的那样,我已经尝试了社区建议的许多解决方案,方法是向我的应用程序添加一个菜单,并使用复制和粘贴快捷方式。

下面是我启动电子窗口 (main.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、electron 7.1.1 和 electron-packager 13.1.1。我为 Windows 打包我的应用程序。

注意:我是在 StackOverflow 上发帖的新手,如果我的帖子发错地方了,请见谅

【问题讨论】:

  • 您运行的电子版本和平台可能与此处相关。从你的代码 - 我猜你在 MacOS 上运行?您尝试复制什么样的内容?
  • 我改变了这个谢谢。不,我在 Windows 上运行,我只是尝试复制文本,将序列号和产品代码复制并粘贴到应用程序中
  • 啊,现在我明白了-您尝试将文本从外部复制到应用程序-而不是像我假设的那样从应用程序复制到外部-感谢您澄清这一点:)所以,您有一个文本字段或表单你想把东西复制进去,对吧?
  • 是的,有一个包含多个输入的表单,我希望能够从应用程序外部粘贴文本。如果能够从应用程序中复制并将其粘贴到应用程序之外,那就太好了。但我想一旦完成另一个是完全相同的过程。
  • 您可以在此期间做一件事 - 通过在窗口中加载一个带有表单的简单 html 来消除角度,看看您的问题是否仍然存在。如果是,请尝试使用不同的电子版本以排除电子错误的可能性。

标签: angular electron electron-packager


【解决方案1】:

对于那些可能遇到与我相同问题的人,我已解决。事实上,它与代码无关,只是公司的防病毒软件在我每次启动它时都会将我的应用程序隔离。将其列入白名单,n 一切都适用于复制和粘贴。只是很遗憾我没有早点想出来

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    相关资源
    最近更新 更多