# 1

在桌面软件中,开机自启动是很常见的功能,在electron中也提供了很好的支持,以下是主要代码:

//应用是否打包
if (app.isPackaged) {
  //设置开机启动
  app.setLoginItemSettings({
    openAtLogin: true
  });
}

//应用是否打包
if (app.isPackaged) {
  //获取是否开机启动
  const { openAtLogin } = app.getLoginItemSettings();
  return openAtLogin;
}

设置开机启动后,如果不稍加处理,用户一开电脑,就会弹出你的软件窗口,这样不太友好。正常来说某些软件只有用户手动打开软件时才弹出主窗口,开机启动的话,只收起到系统托盘中会更好一些。

# 2

参考electron开机启动相关文档:appsetloginitemsettingssettings-macos-windows[1]

windows

在windows下,setLoginItemSettings方法有一个args参数,利用这个参数就可以达到目的,以下是主要代码:

//设置开机启动
app.setLoginItemSettings({
  openAtLogin: true,
  args: ["--openAsHidden"],
});

//获取是否开机启动
const { openAtLogin } = app.getLoginItemSettings({
  args: ["--openAsHidden"],
});
return openAtLogin;

设置开机启动时,在args中传入--openAsHidden,这个字符串可以随便更改。获取开机启动时,也要在args中传入同样的字符串,不然获取不到正确的值。

然后在显示主窗口时,先判断一下process.argv中是否包含--openAsHidden,如果包含,说明是开机自动启动的,这时候不显示窗口;相反 如果不包含--openAsHidden的话,说明是用户手动启动软件,这时正常显示窗口就好了:

win.once("ready-to-show", () => {
  if (process.argv.indexOf("--openAsHidden") < 0) 
      win.show();
});

macOS

mac下没有args参数,可以通过openAsHidden来实现。以下是主要代码:

//设置开机启动
app.setLoginItemSettings({
  openAtLogin: true,
  openAsHidden: true,
});

//获取是否开机启动
const { openAtLogin } = app.getLoginItemSettings();
return openAtLogin;

光设置openAsHidden: true还不行,也需要做一下判断:

win.once("ready-to-show", () => {
  if (!app.getLoginItemSettings().wasOpenedAsHidden) 
      win.show();
});

# 3

以上就是我正在使用的Electron开机启动时隐藏主窗口的方法,显示系统托盘就用Tray就行,比较简单。如有其他更好的方式,欢迎交流。。。

参考资料

[1]

appsetloginitemsettingssettings-macos-windows: https://www.electronjs.org/docs/api/app#appsetloginitemsettingssettings-macos-windows

Electron实用技巧-开机启动时隐藏主窗口,只显示系统托盘的更多相关文章

  1. Linux系统开机启动时的工作原理

    Linux系统开机启动时的工作原理也是深入了解Linux系统核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至 ...

  2. bat批处理文件运行时隐藏cmd窗口

    想让bat运行时隐藏cmd窗口,最好的方法是使用vbs文件实现, 1.新建一个文本文档,改名为123.vbs,编辑内容: set ws=WScript.CreateObject("WScri ...

  3. 运行bat时隐藏cmd窗口

    运行bat时隐藏cmd窗口 新建一个shrjj.vbs文件,文件内容为: Set ws = CreateObject("Wscript.Shell") ws.run "c ...

  4. 设置win7资源管理器启动时的默认位置-windows-操作系统-网页教学网

    设置win7资源管理器启动时的默认位置-windows-操作系统-网页教学网 如何设置win7资源管理器启动时的默认位置?我不太习惯 Win 7 的资源管理器默认总是打开库,我还是喜欢资源管理器打开树 ...

  5. Linux 系统运行着许多子系统和应用程序。您可以使用系统日志记录从启动时就收集有关运行中系统的数据。有时

    概述 在本教程中,您将学习以下内容: 配置 syslog 守护程序 了解标准设施.优先级和操作 配置日志轮换 了解 rsyslog 和 syslog-ng 系统内部发生了什么 Linux 系统运行着许 ...

  6. Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.

    Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏. Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.没有MS开发环境中的ShowI ...

  7. Linux开机启动时执行脚本的方法

    方法 1 – 使用 rc.local利用 /etc/ 中的 rc.local 文件在启动时执行脚本与命令.我们在文件中加上一行来执行脚本,这样每次启动系统时,都会执行该脚本.不过我们首先需要为 /et ...

  8. 设置开机启动时指定非ROOT用户执行相应的脚本

    [root@MSJTVL-MJSP-A01 sm01]# vim /etc/rc.d/rc.local #!/bin/sh # # This script will be executed *afte ...

  9. Qt程序开机启动的怪现象————无法正常显示程序皮肤

    事情很简单:最近公司项目在做即时通讯软件,类似QQ.该软件应该支持开机启动这样的常用功能.但是实际上开发该功能的时候碰到了个问题:开机启动程序无法正常加载皮肤文件. 这个问题让我头疼了很久啊.最终确定 ...

随机推荐

  1. 解决IDEA Maven下载依赖包速度慢问题

    右键项目,maven选项,"Open setting.xml"或"Create setting.xml",在 mirrors 节点添加下面代码. <mir ...

  2. Spark性能优化指南

    1 Spark开发调优篇 原则一:避免创建重复的RDD 原则二:尽可能复用同一个RDD 原则三:对多次使用的RDD进行持久化 原则四:尽量避免使用shuffle类算子 因此在我们的开发过程中,能避免则 ...

  3. 【超详细】MakeDown(Typora)+PicGo+Gitee实现图床

    [超详细]MakeDown(Typora)+PicGo+Gitee实现图床 序言:我们有时在用makedown整理笔记时想把自己的笔记上传到博客园,可是发现在上传过程中makedown中的图片显示不出 ...

  4. RHCE <复习RHSCA>

    什么是shell? shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序,你在提示符下输入的每个命令都由shell先解释然后传给Linux内核. bash 是大多数 ...

  5. SVN 使用教程 命令 visual studio 使用SVN

    首先推荐大家一个应该是国内外最好的SVN仓库,不限私有,不限成员:https://svnbucket.com/ SVN官网 https://tortoisesvn.net/downloads.html ...

  6. [.NET] - EventLog.EntryWritten Event

    刚看到在MSND论坛上有人问一个EventLog.EntryWritten Event相关的问题,说是在2015触发了一个2013年的EventWritten的事件,比较好奇,然后查看了下这个类: h ...

  7. Oracle dd-m月-yy转yyyy-mm-dd

    表名称:TEST_LP 字段:PROD_DATE 1 SELECT '20' || SUBSTR(T.PROD_DATE, INSTR(T.PROD_DATE, '-', 1, 2) + 1, 2) ...

  8. 搭建web攻防环境

    提示:本实验仅用于学习参考,不可用作其他用途! 任务一.基于centos7搭建dvwa web服务靶机 在centos7安装LAMP并启动,访问phpinfo页面 从互联网下载dvwa并解压到/var ...

  9. Asp.net Core 2.0 实现Cookie会话

    与1.0版本相比微软做了一些调整.详细请参考官方文档,我这里就讲2.0的吧 1.首先要在 根目录下 Startup.cs 类中启用 cookie会话,有两处要配置 第一处在  public void ...

  10. Beta冲刺——第五天

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...